HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🙂
달리팀 노션
/
👨🏻‍💻
달리 2팀 (deprecated 문제 없으면 삭제 예정)
/
Today We Learned
Today We Learned
/
Git에서 push된 Merge 취소하기
Git에서 push된 Merge 취소하기
Git에서 push된 Merge 취소하기

Git에서 push된 Merge 취소하기

생성일
Nov 5, 2021 04:33 PM
기록자
해결 여부
해결 여부
속성
github
카테고리
이슈

🔥 문제

최근에 강의를 듣다가 커밋을 수정할 때가 와서, 마침 프로젝트 때 앞으로 적용할 스쿼시를 연습하려고 했다.
따라서 최근에 민철 님께 배운 git rebase ~i를 통해 squash를 성공적으로 해서 두 커밋 내역이 합쳐진 하나의 커밋이 나왔다.
그러나 내가 실수로 pull하라는 명령을 듣고 pull 후 push를 해버렸더니, 다음과 같이 기존 합치려고 했던 애들들이 recursive merge가 되어버리면서, 합쳐져버렸다.
notion image
💡
아구야... 이게 아닌데... 내 맘은 이게 아닌데...😂
이런 상황에서, 나는 2e5e355를 마지막 커밋으로 남겨주고 싶다. 어떻게 해야할까?
 

📢 답변

만약 push를 하지 않았는가? --abort를 하자!

git merge --abort는 merge 충돌이 났을 때, 이를 아예 취소시켜주는 역할을 해준다. 따라서 머지 충돌 이전으로 되돌릴 수 있는 유용한 친구라고 한다.
 

하지만 나는 이미 원격 저장소에 merge를 해버렸는 걸...?

따라서 위의 명령어는 소용이 없다.
그렇다면 어떻게 해야할까?

1. 내가 마지막으로 남기고 싶은 커밋 쪽으로 이동한다.

난 현재 베이스에서 한 단계 뒤로 쳐진 커밋을 마지막으로 남기고 싶었다.
따라서 다음을 입력한다.
git reset HEAD^

2. 강제 푸시해버린다.

이동 한 후에는 git push -f origin main을 해준다.
즉, 여기를 origin 의 main으로 강제로 해버릴 거야~를 의미한다.
이 이외의 방법을 찾으려 했지만 아직의 나로서는 역부족이었다. 왜냐하면 merge라는 명령어가 꽤나 강력할 줄은 몰랐기 때문이다.
💡
만약 이것이 틀린 답이면, 깃린이에게 조언을 해주기를 바란다.
 

🖥 결과

아구야, 커밋 내역이 이쁘게 수술이 됐다!!
나중에 커밋을 합칠 때가 있을 때, 누군가가 다음과 같은 이슈가 발생한다면 꼭 요긴하게 쓰길 바란다! (무엇보다, -f 옵션이니 3번은 고민하고 쓰자!)
notion image

🏃🏻‍♂️ 배운 점

  • push -f가 정말 나쁜 건 아니다.
    • 아직은 너무나 서툴러 -f라는 명령어가 무섭기 그지 없다. 하지만, 언젠가 내가 실수를 만들었을 때, 머지한 브랜치 내역이 정말 꼭 필요한 게 아니라면, 한 번쯤은 고려해야 할 옵션이라고 생각하게 되었다.
       
  • merge, 3번은 고민하고 적용하자.
    • revert reset 등 모든 방법을 총 동원했음에도 불구하고, 머지된 커밋은 쉽사리 없앨 수 없었다. 따라서 항상 머지만큼은 주의해서 적용해야겠다고 생각하게 되었다.