본문 바로가기

programmer/Git 사용법

쉬운 Git 사용법 - 7 (discard, reset)

Discard, reset, revert - 1

이번 글에서는 Discard, reset, revert에 대해 알아보겠습니다. 지금까지 버전 관리 시스템인 Git을 이용하여 버전을 만들고 원격 저장소에 저장하기도 하고, clone을 가져오기도 하는 등의 과정을 배웠는데요. 정작 버전을 관리하는 이유 중에 하나인 이전의 버전으로 되돌아가는 방법을 아직 소개하지 않았습니다. 드디어 이전의 commit으로 되돌아가는 여러가지 방법을 알아보겠습니다.


.




30.


먼저 Discard, reset, revert에 대해 간단한 설명을 살펴보겠습니다.

Discard

  • 아직 commit을 하지 않은 자료를 최종버전의 commit으로 되돌리는 기능입니다.

reset

  • 더 이상 필요 없어진 commit들을 버릴 수 있습니다. soft, mixed, hard를 선택할 수 있는데 soft는 커밋만 되돌리고 싶을 때, mixed는 지금까지 하던 작업을 그대로 둔 상태에서 내가 원하는 commit으로 돌아가며, 그 때까지의 commit은 모두 사라지는 기능, hard는 내가 원하는 commit으로 돌아가면서 그 때까지의 commit이 모두 없어지고 하던 작업도 사라지는 기능(내가 선택한 commit의 자료로 바뀜)입니다.

revert

  • commit을 지우지 않고 새로운 commit을 추가하면서 내가 원하는 곳으로 되돌아가는 기능입니다.


31.


이제 discard 기능을 직접 사용해보겠습니다. 먼저 index.html을 수정해보겠습니다.

enter image description here

기존의 코드에서 li 태그를 추가하면서 discard라는 내용을 넣었습니다.
그러면 다음과 같이 Uncommitted changes라는 행을 SourceTree 창에서 확인할 수 있는데요. 이 상태에서 다시 최신 commit으로 돌아가는 것 입니다. 한 줄 썼는데 뭐하러 기능을 써가며 돌아가냐고 말씀하실 수 있지만, 만약에 한 줄이 아니고 많은 코드가 바뀌었는데 다시 돌아가려고 할 때, 일일히 지우기가 힘들고, 또한 정확하지도 않을 것입니다. commit이 되지 않은 상태에서 정확하게 최신 버전으로 돌아갈 수 있는 기능이 바로 discard입니다.




위의 메뉴에서 discard를 누릅니다.


enter image description here


누르면 다음과 같은 창이 나타납니다.


enter image description here


Discard Changes를 누릅니다. 경고창이 하나 뜨는데요.


enter image description here


OK를 눌러줍니다.


enter image description here


그러면 위와 같이 Uncommitted changes라는 말은 없어지고 원래의 상태로 되돌아온 것을 볼 수 있습니다.
코드를 직접 확인해보면,


enter image description here


제가 작성했던

<li>discard</li>

코드가 사라진 것을 확인할 수 있습니다.


32.



이제 reset기능에 대해 알아보겠습니다. reset기능을 사용해보기 위해서 commit을 두번만 더 해보겠습니다.


enter image description here

<li>reset</li>

간단한 코드를 추가하고 commit과 push도 하였습니다.


enter image description here

<li>reset2</li>

같은 과정을 반복하면서 commit과 push를 하였습니다.



이제 reset을 해보겠습니다.
저는 commit 메세지가 ‘li태그, choo2 추가’로 되어있는 곳으로 돌아가보겠습니다.



enter image description here

돌아가고 싶은 commit에 마우스 오른쪽 클릭을 하고 Reset current branch to this commit을 누릅니다.
다음과 같은 창을 만날 수 있습니다.



enter image description here


soft, mixed, hard를 선택할 수 있는데요. working copy라는 것은 내가 현재 작업하고 있어서 수정사항이 있지만 아직 commit하지 않은 상태의 코드를 말하는 것인데요. Hard의 설명은 보시다시피 discard all working copy changes입니다. 모든 작업내용을 없애고 내가 선택한 commit으로 돌아갑니다.


저는 먼저 Hard 기능을 해보겠습니다.


enter image description here


경고창을 만나게 되는데요. Yes를 누릅니다.


enter image description here


그러면 위와 같이 master가 내가 원하는 commit으로 옮겨진 것을 알 수 있습니다.

33.



그런데 이상한 점이 보이지 않나요? origin/master 즉, push를 계속 해주었기 때문에 원격저장소에 제가 commit한 내용이 추가되었고 reset을 할 때, 로컬 저장소의 코드는 reset되었지만 원격저장소의 code는 reset되지 않았습니다. 원격저장소의 코드도 reset을 시키고 싶다면 어떻게 해야할까요?


제가 SourceTree에 원격 저장소의 내용을 reset 시킬 수 있는 기능이 있는지는 잘 모르겠습니다.


그래서 git 명령어를 이용해 원격 저장소의 코드도 내가 원하는 곳으로 reset시켜보도록 하겠습니다.


먼저 git bash를 실행시킵니다.


enter image description here


그리고 로컬 저장소로 이동합니다.


enter image description here


git push origin -f

위의 코드를 입력하면 다음과 같이 github의 Username을 입력하는 창이 나타납니다.


enter image description here


Username을 입력하면 password를 입력하라고 하는데요. 정상적으로 입력하면 다음과 같은 응답을 만날 수 있습니다.


enter image description here

34.



그리고 다시 SourceTree로 돌아와보면 다음 그림과 같이 origin/master가 mater가 있는 곳으로 돌아온 것을 확인할 수 있을 것입니다.


enter image description here


지금까지 reset 기능을 알아보았습니다. 다음 글에서는 reset에서 mixed 옵션을 선택해서 진행해보고, revert 기능을 살펴보겠습니다.



git 명령어에 대한 것은 나중에 글을 써볼 생각입니다.