코딩마을방범대
이전 커밋 수정하기 & 이전 커밋 삭제하기 본문
예전에 커밋했던 소스를 수정해야할 일이 생겼다.
하지만 그 커밋 이후 여러 커밋을 했던 상태여서 푸쉬 기록을 날리기엔 어려운 상황이였다.
아래 방법이 정답은 아니겠지만 문제 없이 내가 원하는대로 수정을 완료했으니 참고만!
이전 커밋 수정하기
1. git 로그 확인 후 커밋 ID 복사
git log
intellij 를 사용 중이라면, 굳이 터미널에 명령어를 입력하지 않고
git 탭에서 수정하려는 커밋보다 전 버전의 커밋에서 오른쪽 마우스 클릭 후 'Copy Revision Number' 을 클릭해주면 커밋 ID가 자동으로 복사된다.
2. rebase를 통해 작업 환경 세팅
git rebase -i [커밋ID]
위에서 복사했던 커밋ID를 이용해 위 명령어 입력 시 아래와 같이 커밋 목록이 주루룩 나온다.
수정할 커밋을 'pick' 대신 'edit'으로 변경한 후 :wq를 이용해 빠져나온다.
실수로 잘못 저장했을 경우 git rebase --abort 명령어 실행!
3. 원하는 소스 수정
Intellij에서 원하는 소스를 수정해준다.
4. 수정한 사항 커밋
git add .
git commit --amend
commit --amend 입력 시 편집창이 나오는데 무시하고 :q! 로 종료해주면 된다.
5. 수정한 내용 적용
git rebase --continue
6. 원격 저장소에 업로드
git push --force
git push --force-with-lease
git push --force-with-lease는 --force와 비슷하지만, 조금 더 안전한 방식으로 사용된다.
이 옵션은 로컬 브랜치와 원격 브랜치 사이의 차이를 확인한 후,
변경 사항이 있으면 업로드가 불가하고, 없다면 정상적으로 push를 완료한다.
위의 명령어를 통해 강제(--force)로 업로드하면 수정이 완료된다.
하지만 나는 push 명령어를 실행하지 않고 실수로 merge 명령어를 실행해 아래와 같이 지저분하게 로그가 기록되었다...
이 로그를 지우기 위해 아래 과정을 실행하였다!
이전 커밋 삭제하기
1. rebase를 통해 커밋을 drop 상태로 변경하기
git rebase -i [커밋ID]
아래 편집창에서 삭제할 커밋을 'pick'에서 'drop'으로 바꿔준 후 :wq를 통해 저장해서 빠져나온다.
2. 변경 사항 적용
git rebase --continue
나의 경우 위 명령어를 실행하니 'fatal: No rebase in progress?' 라는 오류가 발생했다.
그래서 그냥 'git push --force' 로 강제로 덮어씌워줬다..
참고사이트
'🎃 기타 > Git' 카테고리의 다른 글
Git stash란 (0) | 2024.09.27 |
---|---|
Git 커밋 리셋 방법 (0) | 2024.01.09 |
Git의 merge와 rebase의 차이 (0) | 2023.08.23 |
Intellij IDEA에서 Git 특정 커밋만 가져오기 (0) | 2023.08.23 |
Intellij IDEA에서 Git push 되돌리기 (0) | 2023.07.25 |