Miyeon

git commit --amend 취소하기

2021-09-13Git

Current Behavior

이전 커밋이 푸쉬된 상태에서 git commit --amend 해버렸다. remote의 마지막 변경 내역과 로컬의 변경내역이 합쳐져서 또 다른 커밋으로 스냅샷이 생겨버렸다.

Expected Behavior

그렇다면 마지막 커밋을 취소하면 되겠다(정말?)는 생각이 들어서 아주 희망차게 git reset HEAD\^를 입력했다. 그러고 나니 리모트 저장소가 로컬보다 하나 앞서 있었고, 변경내역들은 unstaged되었다. 아이고 두야..

어떻게 하면 로컬과 리모트를 같게 만들지.. 고민하다 우선은 가장 안전하다고 생각되는 방법이 떠올라서 unstage된 변경내역에서 개별적으로 각각 커밋을 진행했다. 리모트 커밋메세지와 변경 내역을 확인해 똑같이 커밋하는 과정이 불필요하게 느껴졌다.

unstage된 변경 내역을 모두 커밋한 뒤 git push -f(로컬 변경내역으로 리모트를 overwrite함)를 날려서 로컬과 리모트의 싱크를 맞출 수 있었다. 그렇지만 리모트 저장소에 기록된 커밋 내역이 변경되는 점을 보아서 이 방법이 좋지 않다는 생각을 들었다.

Steps to Solve

새로 알게된 해결 방법은 git commit --amend한 상태에서 git reset --soft HEAD@{1}을 입력하는 것이었다. 실제로 수정된 커밋이 취소되고 변경내역도 모두 남아서 원하는 결과를 얻을 수 있었다.

피드백

작업하다 막혔을 때, 무작정 될 것 같은 명령어를 입력하지 않고 따로 git-test라는 프로젝트를 만들어서 거기서 이것 저것 시도하면서 문제를 해결하는 시간을 가졌다. 그동안의 실수를 통해서 한 번 꼬인 매듭을 푸는 게 가장 쉽다는 걸 배웠기 때문에 가능했다.

오늘의 경험을 통해 내가 git이 어떻게 작동하는지 제대로 이해하지 못한다는 걸 알게되어서 이번주에 Pro Git 책을 훑어보면서 정리하는 시간을 가지려고 한다. git 오류를 해결하는데 생각보다 많은 시간을 쓰고 있다. 개선해봐야지.


참고

amend commit 취소