코딩마을방범대

이전 커밋 수정하기 & 이전 커밋 삭제하기 본문

🎃 기타/Git

이전 커밋 수정하기 & 이전 커밋 삭제하기

신짱구 5세 2023. 11. 9. 11:17

 

 

 

예전에 커밋했던 소스를 수정해야할 일이 생겼다.

하지만 그 커밋 이후 여러 커밋을 했던 상태여서 푸쉬 기록을 날리기엔 어려운 상황이였다.

아래 방법이 정답은 아니겠지만 문제 없이 내가 원하는대로 수정을 완료했으니 참고만!

 

 


 

 

 

이전  커밋 수정하기

 

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 특정 커밋 삭제하기 | rebase

 

 

SMALL

'🎃 기타 > Git' 카테고리의 다른 글

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
Git 명령어 모음  (0) 2023.05.26