GitKraken(깃크라켄) 활용하기
깃크라켄은 상대적으로 러닝커브가 높은 CLI를 사용해서 Git을 활용하는 방법을 예쁘장하고 편리한 GUI를 통해 좀 더 편하게 사용하게 해주는 툴입니다.
유사한 툴로 SourceTree 가 있다. 차이점은 소스트리는 완전 무료이지만, 깃크라켄은 사용할 수 있는 기능에 따라서 무료/유료 버전이 따로 있다.
그래도 아래와 같이 왠간한 건 다 된다. 더 정확하게 알고 싶다면 여기를 클릭해서 보도록 하자.

1. commit --amend
amend 개정하다, 수정하다
커밋하면서 amend라는 옵션을 클릭하면 새로운 커밋을 생성하지 않고, 기존의 커밋을 수정하게 된다.
🤔 수정 전

내부파일 sample.txt 내용 변경
새롭게 수정된 커밋인 WIP(work in progress) 클릭
Stage all changes클릭
Amend옵션 체크(커밋메시지를 변경하고 싶다면 변경해도 됨)
Amend Previous Commit클릭


😱 수정 후

새로운 커밋이 추가되지 않고 기존의 커밋이 수정된 것을 볼 수 있다.
2. revert
revert 되돌아가다
기존 커밋을 그대로 두고, 기존 커밋의 수정 내용을 제외한 새로운 커밋을 생성합니다.
🤔 수정 전

지우고 싶은 커밋 우클릭
Revert commit클릭Yes


😱 수정 후


특이한 점은 revert는 그런겁니다.
기존에 지울 커밋이 sample.txt 파일에 pull: 원격 저장소의 내용을 가져오기라는 내용을 추가하는 커밋이었다면 revert는 아예 해당 커밋을 실행하지 않은 상태로 되돌아가는 느낌이라기보다는 기존의 커밋 기록은 그대로 두고 해당 커밋 내용을 삭제한 새로운 커밋을 만들어 생성합니다.
3. reset
reset 다시 제자리에 놓다, 다시 맞추다
기존의 커밋을 지웁니다.
🤔 수정 전

2개의 커밋을 지우고 싶다면 3번째의 커밋으로 가서 클릭
마우스 우클릭 후
Reset [브랜치명] to this commitReset 옵션 선택 후 클릭

😱 수정 후

위의 revert와는 다르게 reset 기존 커밋 기록도 같이 지워버린다. 깃크라켄에서는 실수로 reset하는 것을 방지하기 위해 Undo와 Redo버튼을 제공합니다. 그래서 원래 터미널에서 $ git reset --hard ORIG_HEAD 와 같은 식으로 reset 실행 전의 상태로 되돌리는 것보다 훠얼씬 단순하게 되돌리기/다시하기를 할 수 있습니다.
reset option
커밋만 되돌리고 싶을 때 (soft)
변경한 인덱스의 상태를 원래대로 되돌리고 싶을 때 (mixed)
최근의 커밋을 완전히 버리고 이전의 상태로 되돌리고 싶을 때 (hard)

4. cherry-pick
cherry-pick 선별하다
다른 브랜치에 있는 커밋을 나의 브랜치로 가져와서 붙입니다.
🤔 수정 전

커밋을 가져갈 브랜치(issue1)에서 커밋을 가져와서 넣을 브랜치(master)로
checkout센터 화면의
GRAPH메뉴에서 내가 가져오고 싶은 브랜치의 커밋을 클릭우클릭 후,
Chrry pick commit클릭Yes
conflicted 발생, 충돌이 발생하는 파일을 열어서 충돌하는 부분을 수정하고 저장한다우측
mark all resolved모두 해결된 것으로 표시 버튼 클릭
Commit changes to 1 file클릭(커밋 메시지 변경도 가능)



😱 수정 후

5. rebase -i 로 커밋 모두 통합하기
터미널 명령은 git rebase -i 수정을 시작할 커밋의 이전 커밋 이지만, 여기서 i는 interative(대화형, 상호작용의)의 약자이다. 왜 대화형인지는 아래에서 볼 수 있다.
기능을 한 줄로 정의하자면 커밋을 합치는데 여러 옵션을 사용해서 커밋을 통합하는 기능이라고 볼 수 있겠다.
🤔 수정 전

pull 설명을 추가커밋과commit의 설명추가커밋을 합칠 것이므로 그 이전커밋인add의 설명추가커밋을 클릭한다.우클릭 후,
Interative rebase 2 children of-를 클릭한다.새로운 창이 생기면
pull의 설명을 추가옵션을Squash로 선택하고Start Rebase를 클릭한다.




😱 수정 후

그러면 기존의 2개의 커밋이 하나로 합쳐진 것을 볼 수 있다. 그리고 옵션에 따라서 커밋메시지에는 commit의 설명추가 대표메시지로 보이고 해당 커밋을 클릭하면 밑에 작게 pull의 설명을 추가 라는 커밋메시지가 있는 것을 볼 수 있다.
선택한 대화형 리베이스의 옵션은 6가지가 있다. 커밋메시지를 변경하는 옵션(reword)도 있고, squash처럼 해당 커밋을 이전 커밋과 합치는 명령어도 있다.
Commands: p, pick = use commit r, reword = use commit, but edit the commit message e, edit = use commit, but stop for amending s, squash = use commit, but meld into previous commit f, fixup = like "squash", but discard this commit's log message x, exec = run command (the rest of the line) using shell
fixup 또한 해당 커밋을 이전 커밋과 합치는 명령어지만 커밋 메시지는 합치지 않는다. exec 를 이용하면, 각각의 커밋이 적용된 후 실행할 shell 명령어를 지정할 수 있다.
$ git rebase 는 이전의 커밋 히스토리를 변경하기 때문에 항상 주의해서 사용하여야 한다. 만약 이미 GitHub과 같은 원격 저장소에 push까지 한 커밋이라면 변경한 커밋들은 원격 저장소에 push되지 않을 것이다.
이 때 $ git push --force 또는 $ git push -f 명령어로 강제로 원격 저장소에 커밋 히스토리를 덮어쓸 수도 있다. 하지만 만약 이전에 push한 커밋들을 다른 개발자들과 공유하고 있었다면 커밋 히스토리의 불일치가 발생해 흔히 말하는 "git이 꼬였다."하는 상황이 발생할 수 있다.
이렇듯 여러 옵션에 따라서 커밋을 합치거나 커밋 메시지를 변경하거나 할 수 있기 때문에 interactive rebase이다.
6. Squash
깃크라켄에서는 커밋을 합치는 방법도 아주 쉽게 제공합니다. 물론 CLI로도 합칠 수 있긴해요. 만능 rebase 를 사용하면 되죠.
git rebase -i HEAD~2
약간 이런느낌입니다. "현재 헤드를 기준으로 2개의 커밋을 합치겠다." 라는 의미로 볼 수 있죠.
그런데, 위에서 말씀드린 것처럼 깃크라켄에서는 훠얼씬 더 쉽습니다.
합칠 커밋 선택 후 우클릭
Squash 버튼 클릭


이렇게 해주면 아주 간단하게 커밋을 합치는 기능인 Squash 작업을 할 수 있습니다. 참고할 부분은 지금 보면 커밋메세지가 두개잖아요? 제일 먼저 커밋했던 Add Resource coin falling, flexing 와 마지막 커밋인 Add Resource 이죠. 그러면 합쳐지면 어떻게 될까? 보시는 바와 같이 커밋의 Summary 부분에 제일 먼저 했던 커밋메시지가 들어가고 이후에 합쳐진 커밋이 Description 으로 지정됩니다. 참고하셔서 작업하시면 되겠습니다 :)
Last updated