어제보다 한걸음 더

지우고 싶은 특정 커밋을 rebase로 해결하는 방법(with 남의 최신 커밋이 있을 때) 본문

카테고리 없음

지우고 싶은 특정 커밋을 rebase로 해결하는 방법(with 남의 최신 커밋이 있을 때)

지안22 2025. 4. 28. 15:39

git 상태: 지우고 싶은 커밋(commit A) + 남의 커밋(commit B)
- 동일한 브랜치(main)에 푸시되어있는 상태.

 

1. git rebase로 해결


1-1. git rebase 진행
- 명령어: git rebase -i HEAD~2
- ⚠️⚠️해당 브랜치를 건드는 동안에 push 된 커밋은 다 날아가니 주의 필요⚠️⚠️
1-2. 삭제를 원하는 커밋을 pick -> drop으로 변경한다.
- 코드 에디터가 띄워 짐.

pick {커밋해시B} 남의 커밋(commit B)
pick {커밋해시A} 지우고 싶은 커밋(commit A)


⬇️

pick {커밋해시B} 남의 커밋(commit B)
drop {커밋해시A} 지우고 싶은 커밋(commit A)


1-3. 변경사항 저장 후 창닫기(window+x) 한다.
1-4. 만약 conflict 나면 하단의 <0. conflict 났을 시> 항목을 참고한다.
1-5. git status 로 현재 상태를 체크한다.
- rebase를 계속하고 싶으면: git rebase --continue
- rebase를 멈추고 싶으면: git rebase --abort
- rebase 폴더를 삭제하고 싶으면(git 오류 시): rm -rf .git/rebase-merge
1-6. git에 push
- 명령어: git push --force-with-lease origin main
- 리모트(main)가 중간에 더 변경되지 않은 경우에만 안전하게 강제 push를 허용.
- 내가 리베이스한 로컬 상태를 깔끔하게 리모트에 반영 가능.
- 다른사람이 리모트에 뭘 올렸다면 실패 함.

----
2. git checkout + git cherry-pick 명령어 조합

2-1. 브랜치를 새로 딴다 
- 명령어: git checkout -b temp
- 남의 커밋 보존 용
2-2. 메인 브랜치로 돌아온다.
- 명령어: git checkout main
2-3. cherry-pick으로 원하는 커밋을 현재 커밋에 붙인다. 
- 명령어: git cherry-pick {커밋해시}
2-4. git push 하고 종료한다.

------
0. conflict 났을 시
0-1. conflict를 해결한다
- code editor에서 해결.

0-2. 스테이지에 올린다.
git add .
0-3. 커밋
git commit -m "긴급 저장: 리베이스 중 사라진 커밋 복구"
0-4. 푸시
git push