본문 바로가기

IT/설계관련

【git】작업 되돌리기

참고도서 :  Do it!  지옥에서 온 문서 관리자 깃&깃허브 입문
git Windows 설치설명 : https://youtu.be/JKT9laOAPIs

 

작업 되돌리기

작업 트리에서 수정한 파일 되돌리기

1.  "hello.txt"파일을 수정한 후 저장

$ vim hello.txt

수정 전 파일 내용
수정후 파일내용

2. 파일의 상태 확인

$ git status

노란색 글로 표시된 부분을 보면

작업 트리(디렉터리)의 변경사항을 취소하려면 restore 를 사용하라고 되어있음을 확인 할 수 있다.

 

3. 변경사항 취소하기

$ git restore hello.txt

위의 [수정후 파일내용]이미지에서 추가한 내용인 "3_three"가 삭제됨을 확인 할 수 있다.

 

 


스테이징 되돌리기

"작업 트리에서 수정한 파일 되돌리기"에서는 파일의 수정을 취소하고 원래대로 되돌리기를 했습니다. 여기에서는 스테이징을 취소하는 방법을 알아본다.

1. "hello2.txt"파일을 수정한 후 저장

$ vim hello2.txt

2. "hello2.txt"파일을 스테이지에 올린후 git status명령으로 파일의 상태확인

$ git add hello2.txt
$ git status

스테이지에서 내리려면 restore --staged 를 사용하라고 되어있음을 확인 할 수 있다.

 

3. 스테이지에서 내리는 명령어(깃 버전 2.23이후)

$ git restore --staged hello2.txt

4. git status로 파일의 상태확인

$ git status

파일이 스테이지에 올라가기 전(not staged)로 돌아온 것을 확인 가능함

 

스테이지에서 내리는 명령어(깃 버전 2.23이전)
$ git reset HEAD hello2.txt

최신 커밋 되돌리기

수정된 파일을 스테이징후 커밋까지 한상태에서 가장 마지막 커밋을 취소

1. "hello2.txt"파일을 수정한 후 저장

$ vim hello2.txt

2. 스테이징과 커밋을 함께 실행

$ git commit -am "message4"

3. 커밋 메시지가 'message4'인 커밋을 확인

$ git log

4. 최신 커밋으로 되돌리는 명령어

$ git reset HEAD^

HEAD^는 현재 HEAD가 가르키는 브랜치의 최신 커밋을 가르킴

 

5. 커밋이 취소됨을 확인

커밋했던 'message4'가 사라진 것을 확인 할 수 있다.

 

git reset 명령의 옵션 살펴보기
명령 설명
--soft HEAD^ 최근 커밋을 하기 전 상태로 작업트리를 되돌립니다.
--mixed HEAD^ 최근 커밋과 스테이징을 하기전 상태로 작업 트리를 도돌립니다. 옵션없이 git reset명령을 사용할 경우 이 옵션을 기본으로 작동 합니다.
--hard HEAD^ 최근  커밋과 스테이징, 파일 수정을 하기 전 상태로 작어 트리를 되돌립니다. 이 옵션으로 되돌린 내용은 복구할 수 없습니다.

특정 커밋으로 되돌리기

깃에는 파일을 수정하고 커밋하면서 저장한 버전들이 있는데 그 특정 버전으로 되돌려서 그 이후 버전을 삭제할 수도 있는데 특정커밋을 되돌릴경우 명령어는git reset를 사용한다.

 

1. "reset_Test.txt"파일을 수정한 후 저장

$ vim reset_Test.txt

2. 스테이지에 올린후 'R1'메시지와 함께 커밋

$ git add reset_Test.txt
$ git commit -m "R1"

R1 커밋까지 된것을 확인하고

 

3. "reset_Test.txt"파일을 한번더 수정한 후 'R2' 메시지와 함께 커밋

$ vim reset_Test.txt

$ git commit -a -m "R2"

4.  위와 같은 방법으로 'c' 를 추가후 'R3'메시지와 커밋, 'd'를 추가하여 'R4' 메시지와 함께 커밋하여 총 4번의 커밋을 실행 합니다.

$ git log

5. reset에서 커밋 해시를 사용해 되돌릴 경우

주의점 : 예를 들어 reset A를 입력한다면 이 명령은 A를 커밋을 리셋하는 것이 아니라 최근 커밋 A로 리셋 되므로, A 커밋을 삭제하는 것이아니고 A 커밋 이후에 만들었던 커밋을 삭제하고, A커밋으로 이동하게다는 의미가 된다.

 

'R2'커밋의 해시를 선택하여 복사해두고 이하의 명령어로 실행

4db39e71dbd1e29e95e0f4c52139d595602f4249
$ git reset --hard 복사한 커밋 해시

HEAD가 방금 복사해서 붙인 커밋 해시 위치로 옮겨 졌다고 합니다.

6. 로그목록으로 확인

$ git log

7. "reset_Test.txt" 파일을 확인

$ cat reset_Test.txt

R4 커밋과 R3커밋이 사라지고 R2메시지가 있는 두 번째 커밋이 최신 커밋으로 되었습니다.

 


커밋 삭제하지 않고 되돌리기

커밋으로 되돌릴경우 수정했던 내용을 삭제를 해도 되는 경우에는 get reset을 사용하면 되지만, 커밋을 되돌리더라도 취소한 커밋을 남겨 두어야 할 때가 있는데 이와 같은 경우에 사용

 

1. "reset_Test.txt"파일을 수정한 후 저장

$ vim reset_Test.txt

2. 'R5'라는 메시지와 함께 커밋

$ git commit -am "R5"

3. git log로 버전을 확인

$ git log

4. 가장 최근에 커밋한 R5 버전을 취소하고 R2로 돌아가려고 합니다.

revert 명령의 경우에는 revert명령 뒤에 취소하고자 하는 버전의 해시를 지정(여기에서는 메시지 R5의 커밋해시)

※ reset의 경우는 취소할 커밋의 해시가 아니라 되돌아갈 커밋 해시를 지정하고, revert의 경우에는 추소할 커밋 해시를 지정한다는 것

$ git revert 복사한 R5 커밋 해시

 

5. revert 명령을 실행시 편집기가 자동으로 나타나면서 커밋 메시지를 입력 할 수 있으며 입력후 저장합니다.

 

7. 'R5' 버전이 revert 되었는지 확인

$ git log

7. "reset_Test.txt" 파일을 확인

$ cat reset_Test.txt

앞에서 추가했던 'e'가 없어진 것을 볼 수 있습니다. 이렇게 revert 명령을 사용하면 버전에 있던 이력을 취소 할 수 있습니다.

반응형