[git] amend 되돌리기

달피·2021년 6월 10일
0

undo git --amend
출처 : How to undo “git commit --amend” done instead of “git commit”


새로운 commit으로 작성해야 하는데 실수로 --amend 옵션으로 작성해서 덮어씌워지는 경우가 있다. 이 경우에 아래의 명령어로 되돌아갈 수 있다. (단, 직전 명령어가 git commit --amend 인 경우이다)

$ git reset --soft HEAD@{1}

돌아가는데 사용된 방법은 reflog를 사용하는 것이다.
예를 들어 아래의 commit들이 쌓여있는 상태라고 보자.

$ git log --pretty=oneline
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit

잘못해서 네 번째 commit을 --amend 로 작성했다고 하면 git log 는 세 번째 commit이 사라진 상태로 보인다

$ git commit --amend -m "fourth commit"
484a59275031909e19aadb7c92262719cfcdf19a fourth commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit

이 경우 git reflog 를 사용하면 사라진 세 번째 commit이 HEAD@{1} 에 나타난다

$ git reflog
484a592 HEAD@{0}: commit (amend): third commit(2)
1a410ef HEAD@{1}: commit: third commit
cac0cab HEAD@{2}: commit: second commit
fdf4fc3 HEAD@{3}: commit: first commit

이 때 HEAD@{1} 의 의미는 reflog 라는 것으로 git의 HEAD가 변경될 때마다 남는 로그이다. 흔히 쓰는 git log 를 사용하면 보이지 않으나 git log -g 혹은 git reflog 를 사용하면 볼 수 있다.

commit --amend 를 통해 HEAD가 변경되었으므로 reflog가 남게 되며 이 reflogreset --soft를 사용해 돌아갈 수 있는 것이다.

더 자세한 reflog에 대한 내용은 Git의 내부 - 운영 및 데이터 복구의 '데이터 복구' 탭을 참고하면 된다.

profile
개발 오답노트

0개의 댓글