처음 git을 사용할 때 작업 내용을 통째로 날려먹기도 하고 충돌을 해결하다가 중요한 코드들을 삭제해버리기도 했습니다.
그러다가 많은 사람들과 프로젝트를 하면서 git을 제대로 사용하기 위해 gitkraken을 사용하기 시작했고 벌써 1년째 애용하는 중입니다.
지금은 터미널과 gitkraken을 번갈아쓰는 중인데 Git GUI를 쓰다보면 git에 대한 전반적인 이해가 높아져서 나중에 터미널에서 작업할 때도 실수할 일이 적어지는 것 같습니다.
홈 화면에서는 레포지토리를 열거나 git clone
이 가능합니다.
Open a Repository
를 이용해 레포를 열어주면
다음과 같은 화면이 나옵니다. 이제 각 부분의 의미하는 것들을 살펴보겠습니다.
브랜치는 local
과 remote
로 나뉩니다. 브랜치는 더블클릭을 하면 checkout이 가능합니다. 만일 remote
에 있는 브랜치로 checkout하면 local
의 브랜치 리스트에도 해당 브랜치가 추가됩니다.
가운데 그래프는 지금 브랜치들이 어떻게 뻗어나오고 있고 합쳐지고 있는지를 보여줍니다.
체크표시가 되어있는 곳은 내가 현재 checkout 되어있는 브랜치임을 뜻합니다. 각각의 브랜치 옆에는 아이콘들이 있는데 아이콘들의 의미는 다음과 같습니다.
local 아이콘
노트북 모양의 아이콘은 현재 로컬 브랜치의 위치를 알려줍니다.
remote 아이콘
local 아이콘을 제외한 나머지 아이콘들(github의 organization 로고 등)은 해당 브랜치의 remote의 위치를 알려줍니다.
이 아이콘들을 사용해서 현재 로컬 브랜치가 remote 브랜치와 차이가 있는지 알 수 있습니다.
가장 오른쪽에는 commit에서 변경된 파일이나 현재 작성 중인 코드의 변경사항을 볼 수 있습니다.
view change
을 누르면 다음과 같은 화면이 나옵니다. 파일을 선택하면 각각의 파일의 변경사항도 확인 가능합니다.
여기서는 변경사항들을 stage / unstage하고 commit 메세지를 입력하여 commit할 수 있습니다. 여기서 stage는 git add
명령어로 수행하는 동작입니다. 각각의 파일을 stage할 수도 있고 stage all changes 버튼을 사용하여 git add .
를 할 수도 있습니다.
빨간색 휴지통 버튼은 모든 변경사항을 discard 시키는 동작을 합니다. 저는 주로 코드들의 변경사항을 확인하고 필요한 변경사항만 stage하여 commit한 후 필요없는 코드는 discard할 때 사용합니다.👍🏻
(하지만 잘못 누르면 필요한 코드까지 날라가기 때문에 주의해야 합니다.)
상단의 버튼에서는 현재 브랜치에서 push
, pull
이 가능하고 지금 commit 되어있지 않은 변경사항들을 stash
, pop
할 수 있습니다.
아까 위에서 설명한 remote, local 아이콘을 이용해 graph에서 현재 브랜치와 remote 브랜치의 상태를 확인하고 push 또는 pull을 해주면 됩니다.
위의 사진은 로컬이 remote보다 뒤쳐져 있는 상황이므로 pull
버튼을 누르거나 브랜치를 우클릭하여 pull(fase-forward if possible)
을 클릭 해줍니다.
그리고 가끔 다른 브랜치로 이동해서 작업해야할 때 위에 사진처럼 현재 브랜치의 변경사항 때문에 checkout이 안될 때가 있는데 이럴 때는 stash
를 이용하면 됩니다.
stash
버튼을 눌러주면 이렇게 박스가 생겨나는데 저기 변경사항들이 안전하게 담겨있게 됩니다. 그리고 다시 pop
버튼을 누르면 변경사항이 돌아옵니다. stash 해놓은 내용은 저 박스 아이콘을 우클릭하여 삭제도 할 수 있습니다.
저는 pull request를 생성하기 전에 rebase
하여 develop 브랜치와의 충돌을 미리 해결하고 pr을 생성하는 편입니다.
rebase는 현재 브랜치의 시작지점(base)을 변경시키는 명령어입니다. rebase를 진행하게 되면 브랜치의 commit들을 내가 선택한 시작지점에서 하나하나 적용시켜 줍니다.
아래 사진처럼 develop에 업데이트가 일어나서 현재 브랜치가 remote develop의 최신 변경사항이 적용이 안되어있는 경우 충돌이 날 가능성이 있기 때문에 rebase
를 이용하여 현재 브랜치를 remote develop에서 시작되게 만들어줍니다.
rebase-test 브랜치에 checkout 되어있는 상태에서 remote 아이콘이 붙어있는 develop을 우클릭 해준 뒤 Rebase 현재 브랜치명 onto origin/develop
을 클릭해줍니다.
만일 이 과정에서 충돌이 난다면 다음과 같은 화면이 나오게 됩니다.
충돌이 난 파일을 선택하고 원하는 변경사항을 선택한 후 오른쪽 상단의 save를 눌러 줍니다.
rebase가 완료되고 난 후에는 rebase-test브랜치가 remote develop에서 시작되고 있는 것을 볼 수 있습니다.
+) 만약 rebase-test가 remote에 push된 적이 있다면 rebase 후에 다시 push할 때 force-push를 해주어야 합니다.
만약 다른 브랜치의 commit을 현재 브랜치에도 적용시키고 싶다면 cherry pick
이라는 기능을 사용하면 됩니다.
예를 들어 나는 지금 mine
브랜치에 있는데 cherry-pick-test
에 있는 저 commit을 mine
브랜치에도 적용하고 싶다면 cherry pick test commit이라는 commit을 우클릭하고 Cherry pick commit
을 선택해줍니다.
그럼 다음과 같이 동일한 commit이 mine 브랜치에도 적용된 것을 볼 수 있습니다.
시간이 많이 지난 게시물이라 댓글을 보실지 모르겠지만 댓글남겨봐요
혹시 유료버젼을 사용중이신가요 ?
만약 사용중이시다면 무료와 유료의 체감차이가 많이큰지 궁금해요