728x90

# 출처 : [도서]Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문(이고잉)


  • git restore 파일 이름 : 작업 트리에서 수정한 파일 되돌리기(구 버전: git checkout -- 파일 이름) → 스테이지에 올라가지 않은 상태에서 적용!
  • git restore --staged 파일 이름 / git reset HEAD 파일 이름 : 스테이징 되돌리기 → 저장소에 올라가지 않은 상태에서 적용!
  • git reset HEAD^ : 최신 커밋 되돌리기
  • git reset 커밋 해시 : 특정 커밋으로 되돌리기
  • git revert 커밋 해시 : 커밋 삭제하지 않고 되돌리기

[ 되돌리기 로직 ] 나의 개인적인 생각으로 그린 그림.


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

※ 깃 버전이 업그레이드 되면서, checkout을 대신할 switch, restore가 도입되었다고 한다.

■ checkout : Switch branches or restore working tree files
■ switch : Switch branches
■ restore : Restore working tree files
더보기

(구버전) checkout으로 브랜치 변경과 작업 트리의 파일을 복원을 전부 다 했지만,

(새버전) switch로 브랜치 변경, restore로 작업 트리의 파일을 복원 하도록 분리되었다.

※ 참고 사이트 :  https://blog.outsider.ne.kr/1505

(구버전) git checkout --
(새버전) git restore

 

스테이징 되돌리기
git reset HEAD / git restore --staged
git reset HEAD
git restore --staged

git reset HEAD
git restore --staged

restore은 복구를 위한 명령어
reset은 되돌아간 커밋 이후의 히스토리는 전부 삭제
revert은 특정 커밋만 취소

 

최신 커밋 되돌리기
git reset HEAD^
git reset HEAD^

commit한 메세지 message5가 있다.
git reset HEAD^ 이후 commit한 메세지 message5가 업어진 것을 확인할 수 있다.

HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋(git log에서 (HEAD -> master)표시가 있던 곳)을 가리킨다.
→ 이렇게 되돌리면, 커밋도 취소되고 스테이지에서도 내려진다. 취소한 파일이 작업 트리에만 남는다.

※ 최근 3개의 커밋을 취소하려면, ex) $ git reset HEAD~3

▼ git reset HEAD~3 예시

더보기
3개의 커밋이 없어진 것을 확인할 수 있다.
마지막 커밋에서 hello.txt파일의 데이터는 good boy였다. 하지만 가장 최근부터 3개의 커밋을 취소했기 때문에, 해당 데이터는 수정된 데이터로 추적하고 있다. 고로 작업 트리에서 조차 변경 사항을 남기고 싶지 않다면, reseet 명령의 옵션인 --hard HEAD^를 사용하거나 지금 상태에서는 git restore를 사용하면 된다.

▼ reset 명령의 옵션

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

 

특정 커밋으로 되돌리기
git reset 커밋 해시
git reset --hard 커밋 해시

첫번째 커밋으로 되돌아가기 위해, 첫번째 커밋의 커밋 해시를 복사한다.
첫번째 커밋으로 돌아가며, --hard 옵셥으로 깃은 unmodified 상태가 되었다.

참고로, 되돌아가려는 커밋A의 커밋 해시를 입력했을때,
A 커밋을 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제하고 A 커밋으로 이동하겠다는 의미로 해석해야 한다.

 

커밋 삭제하지 않고 되돌리기
git revert 커밋 해시

첫번째 커밋 해시를 복사하여 git revert를 하면, 다음과 같이 hello.txt에는 추가한 b가 없는 것을 확인할 수 있다. revert를 통해 새 커밋을 만들면서 버전에 있던 이력을 취소할 수 있다.

더보기
revert를 하면, 다음과 같이 vim 으로 들어가지며, revert 커밋 메세지를 작성할 수 있다. 디폴트를 사용하거나 사용자가 직접 수정하면 된다.

 

728x90

+ Recent posts