Git Revert And Reset 으로 커밋을 변경하자
배경
상황1
가끔 command 명령어로 commit 을 할때 취소해야 하는 경우가 있다.
-
우리는 main branch 에서 새로 branch 를 생성한다
-
checkout 해서 새 브랜치로 이동해서 보통은 작업하지만
-
갑작스런 이슈로 main에서 코드고치고 git stash 명령어 쓰려다가... 그냥 main에서 commit 한 적이 있었다
-
우선 commit 한 상태에서 새 branch로 이동해서 push 했고
-
원래 main을 되돌려야 하는 상황
상황2
- 여러명이 dev(default branch 개발계) Branch 를 clone 하고 협업중
- A라는 사람은 이번주에 배포하면 안돼는 코드를 작업 후 dev 로 머지했다
- dev 에 머지된 가장 최근의 commit 을 되돌려야 하는 상황
해결 방법
우선 나는 상황1
에서는
그냥 프로젝트를 다시 clone 했다.
프로젝트를 그냥 써야하는 상황이라면
git reset
명령을 썼을 거 같다
(git reset HEAD~1
=> 가장 최근 1개 커밋 reset => modify 상태로 변경)
예전에 시니어 개발자에게 해당 명령을 함부로 썼다고
혼난 이후 잘 사용은 안하지만
커밋을 아예 취소하는 상황이기 때문에
써야하는 상황인거 같다
상황2
에서는 git revert
를 사용했다
gitLab을 주로 사용하는데
gitLab 에서 merge 이후
화면에 [revert]
버튼이 있다
이 버튼사용하면
새로운 머지 request 를 생성 => 머지하면
새로운 revert commit 이 자동 추가되며
이전 코드로 돌아온다
(자세한 내용은 참고3 클릭)
첫번째 커밋 취소는 어떻게 하지?
git update-ref -d HEADgit rm --cached -r .
revert 한 커밋을 다시 머지하려면? - 체리픽은 특정 커밋을 현재 작업 중인 브랜치로 가져오는 작업
gitLab 에서 머지한 커밋을 ui 에서 revert 했다 이후에 ui 에 Cherry Picks 버튼이 보였다
revert 한 커밋을 dev에 다시 머지해야 햇는데 Cherry Picks으로 dev 에 머지할 수 있었다 내코드 살렸음 ㅠㅜ
git checkout dev
# 스킵된 체리픽에 대한 메시지 비활성화git config advice.skippedCherryPicks false
# 체리픽 수행 및 스킵된 커밋을 다시 포함하여 다시 적용git cherry-pick --reapply-cherry-picks <reverted_commit_hash>
참고 글
참고1 참고2 참고3-gitLab https://velog.io/@jakeseo_me/git-첫번째-커밋-취소하기https://velog.io/@jakeseo_me/git-첫번째-커밋-취소하기