Codesigner

[Git GUI] 소스트리(Sourcetree) 활용법 - (2) 본문

Git /GUI

[Git GUI] 소스트리(Sourcetree) 활용법 - (2)

eunsukimme 2019. 4. 17. 01:21

이번 포스팅에서는 저번 포스팅에서 이어 Git에서 제공하는 여러 고급 기능들을 소스트리에서 활용해 볼 것이다. 커밋에 태그를 지정하고, 커밋을 되돌리는 등 여러 기능을 실습을 통해서 알아보도록 하자. 저번 포스팅에서 활용한 Git 프로젝트를 그대로 활용할 것이니 만약 실습을 따라 해보고 싶다면 이전 포스팅을 따라하여 실습 환경을 구성하도록 하자. 여기서는 new_branch를 사용하지 않으므로 삭제하고 시작하도록 하자

 

 

 

태그 - tag

 

소스트리에서 태그를 다는 방법은 두 가지가 있는데, 커밋 히스토리 상에서 태그를 달고자 하는 커밋에 마우스 우클릭 - 태그 버튼을 클릭하는 방법과 상단 메뉴의 태그 버튼을 눌러서 달아주는 방법이 있다. 여기서는 apple 커밋에 v0.1라는 태그를 달아보도록 하겠다

 

<그림 1> apple 커밋에 붙이는 태그

 

고급 옵션 내의 '가벼운 태그' 는 Lightweight 태그를 말하는 것으로, 메시지 만을 포함하는 태그이다. 여기서 우리는 Lightweight가 아닌 Annotated태그를 만들기로 하고 태그를 추가해보자. 태그를 추가하면 좌측 태그 메뉴에 추가한 태그가 보이고 또 그래프에서 apple 커밋에 태그가 붙어있는 걸 확인할 수 있다. 추가한 태그에 마우스 우클릭하면 '세부 사항'이라는 버튼이 나오는데, 이는 git show 명령으로 태그 내용을 확인하는 것과 동일한 기능을 한다

 

<그림 2> apple 커밋에 v0.1 태그가 추가된 모습

 

세부 사항을 확인해보면 다음과 같이 태그를 만든 사람, 날짜, 태그 메시지, 커밋 내용을 확인할 수 있다

 

<그림 3> 태그 상세정보

 

이렇게 만든 태그들로 각 커밋을 참조할 수 있다. 정리된 태그들은 버전 관리를 더 수월하게 만들어주니 잘 활용하도록 하자

 

 

 

커밋 되돌리기 - reset & revert

 

Git Backtracking 포스팅에서 이전 커밋으로 되돌아가는 방법을 배운것이 기억날 것이다. 그때에는 reset에 대해서만 언급하였는데, 이번 섹션에서는 추가로 비슷한 기능을 하는 revert에 대해서도 알아보도록 하고, 이를 소스트리에서 어떻게 사용하는지 알아보도록 하자

 

 

 

reset

 

reset은 대표적으로 두 가지 목적을 달성하는데 사용된다. 첫 번째는 staging area에 잘못 올라간 파일을 unstaging 하는 것이고, 두 번째는 커밋을 영구적으로 되돌리는 것이다. 즉, 히스토리에서 되돌아간 이후의 커밋을 삭제하는 걸 의미한다. 물론 영구적이라고 해서 히스토리에서 삭제된 커밋이 아예 Git 프로젝트에서 날아가 버리는 건 아니니 걱정하지 마시라. 이전 포스팅에서 전자에 대해서 다루었으니 이번에는 후자, 즉 히스토리를 되돌리는 작업을 해보도록 하자

 

먼저, 히스토리를 되돌릴때 reset에서 자주 주어지는 두 가지 옵션이 있다. 하나는 --soft 이고, 다른 하나는 --hard 이다. --soft 옵션은 커밋을 되돌릴 때 해당 커밋의 작업 내용을 working directory에 반영하지 않는 것이고, --hard는 커밋을 되돌릴 때 해당 커밋의 작업내용을 working directory에 반영한다. 무슨 말인지 잘 감이 잡히지 않는다면 다음 실습을 통해 자세히 알아보도록 하자

 

우리의 커밋 히스토리에서 dragonFruit 커밋 이후의 donut, elephant 커밋이 과일이 아니여서(프로젝트의 방향성에 맞지 않다고 판단해서) 다시 dragonFruit 커밋으로 되돌아가려 한다고 가정하자. 다음과 같이 해당 커밋에 마우스 우클릭 - Reset current branch to this commit 버튼으로 되돌아 갈 수 있다. 갑자기 영어로 바뀌어서 당황할 수 있지만 영어가 더 이해하기 좋다고 판단해서 그런 거니 이해하길 바란다

 

<그림 4> reset 버튼

 

버튼을 누르면 다음과 같이 옵션을 지정할 수 있는 창이 나타난다. 먼저 --soft 옵션으로 reset 해보고, 다시 원상복귀 시킨 뒤 --hard 옵션으로 reset 하여 두 기능의 차이를 알아보도록 하자

 

<그림 5> reset 옵션을 지정하는 창

 

--soft 옵션으로 reset 하고 나면 다음과 같이 dragonFruit 이후의 커밋은 히스토리상에 나타나지 않는다

 

<그림 6> dragonFruit 커밋으로 되돌아간 커밋 히스토리

 

주목할것은, 터미널에서 ls 명령으로 파일을 나열해보면 여전히 donut, elephant 커밋에서 생성한 파일이 남아있다는 것이다

 

<그림 7> donut과 elephant 파일이 여전히 남아있는 현재 상태

 

이제 다시 원래 상태, 즉 donut과 elephant 커밋이 히스토리에 존재했던 상태로 되돌아가도록 하자. 터미널 창을 열고 다음 명령을 실행하면 원래대로 되돌아간다

git reset --soft ORIG_HEAD

<그림 8> 원래대로 되돌아간 커밋 히스토리

 

자, 이제 다시 dragonFruit 커밋으로 reset 할건데, 이번엔 --hard 옵션을 부여해보자. 같은 방법으로 reset 절차를 밟으면 다음과 같이 경고 창이 나타난다

 

<그림 9> reset --hard 명령시 나타나는 경고 창

 

직역하면 당신이 되돌아가려는 커밋 이후로 작업한 내용들이 싹 다 날아갈 건데 지금 이게 네가 하려는 짓이 맞냐? 정도가 되겠다. 이 경고 창이 전달하는 메시지가 바로 필자가 보여주려고 한 --soft--hard 옵션의 차이이다. Yes 버튼을 누르고 reset을 진행하고, 터미널에서 ls 명령으로 파일을 나열해보면 donut과 elephant 파일이 없어진 걸 확인할 수 있다

 

<그림 10> donut과 elephant 파일이 없어진 현재 상태

 

이것이 바로 --soft--hard 옵션이 만드는 차이다. 즉 working directory의 작업 내용을 버리냐 안 버리냐의 차이인 것이다. 다시 ORIG_HEAD로 돌아가서 원래 커밋 히스토리를 복구하도록 하자

git reset --hard ORIG_HEAD

 

 

 

revert

 

revert는 reset 과 마찬가지로 커밋을 히스토리에서 삭제하는 '기능'을 한다. reset과의 차이는 삭제한 커밋이 여전히 히스토리에 존재하고, 삭제한 커밋에서 작업한 모든 것을 취소하는 커밋을 생성한다는 것이다. revert 가 어떻게 작동하는지 실습을 통해 바로 알아보도록 하자. 이번에는 dragonFruit 커밋을 삭제한다고 가정하자. 해당 커밋에 마우스 우클릭 - Reverse commit 버튼이 revert 하는 것이다

 

<그림 11> revert 와 같은 기능을 하는 Reserve commit 버튼

 

버튼을 클릭하면 다음과 같은 경고 창이 나타난다. 직역하면 해당 커밋에서 작업한 모든 내용들을 싹 날려버릴 건데 진짜 그래도 되냐? 정도가 되겠다

 

<그림 12> revert 경고 창

 

Yes를 눌러서 revert를 진행하고 나면 다음과 같이 새로운 커밋이 생성되어 있는 걸 확인할 수 있다

 

<그림 13> dragonFruit 에서 생성한 파일을 삭제하는 커밋이 생성된 커밋 히스토리

 

새로 생성된 커밋은 dragonFruit에서 만들었던 파일은 삭제하는 작업이 포함되어 있다. 또 dragonFruit 커밋은 여전히 히스토리 상에 남아있는 것 또한 확인할 수 있다. 이처럼 revert는 작업을 취소하는 커밋을 생성함으로써 커밋을 삭제하는 '기능'을 수행한다

 

 

 

Generalizations

 

지금까지 소스트리를 활용해서 태그를 생성하는 법, reset과 revert의 기능과 차이 그리고 소스트리에서의 활용 방법에 대해 알아보았다. 이번 포스팅에서 배운 개념들을 정리하면 다음과 같다

 

  • Git에서 커밋을 취소하는 방법은 두 가지가 있는데, reset과 revert 가 그것이다

  • reset 은 커밋을 히스토리에서 삭제하는 명령으로, 다음 두 가지 옵션을 취한다

    • --soft - working directory의 작업 내용을 삭제하지 않는다

    • --hard - working directory의 작업 내용을 삭제한다

  • reset 으로 히스토리를 삭제한 뒤 다시 복구하고 싶다면 git reset --hard ORIG_HEAD 명령을 실행한다

  • revert 는 커밋의 작업 내용을 취소하는 새로운 커밋을 생성하는 명령으로, 취소한 커밋이 히스토리에 여전히 존재한다

 

 

GUI를 활용해서 Git을 다루면 커맨드 라인에서 다루는 것보다 이로운 점이 많다. 기본적인 git 공부는 커맨드 라인으로 하되, 실제로 프로젝트를 진행하게 된다면 소스트리와 같은 GUI툴을 활용하는 것을 추천한다. 이번 포스팅에서 언급한 것들 외에도 소스트리는 여러 유용한 기능들을 제공하므로 이들을 따로 공부하길 바란다

 

 

 

'Git > GUI' 카테고리의 다른 글

[Git GUI] 소스트리(Sourcetree) 활용법 - (1)  (0) 2019.04.16
Comments