git

[git] 특정 커밋 삭제하기 - rebase

여미미 2024. 8. 7. 15:54

이전에 포트폴리오 사용으로 GitLab에서 GitHub로 프로젝트를 복제했다 

히스토리를 보던중 스토어 관련 예민 정보가 들어가 있는 commit을 발견했다 

 

그래서 특정 커밋을 삭제하기를 해보았다

 

내가 삭제할 커밋은 레포지토리를 gitlab에서 미러한 github의 레포지토리이다 

 

1. 로컬에 미러한 깃헙 레포지토리를 clone

git clone 레포지토리 주소

 

2.마지막 커밋에 삭제할 커밋이 포함되어 있어 git log로 확인

git log -n 5

 

git log - 전체 로그를 볼수 있음
git log -n (숫자) 를 넣으면 해당 숫자만큼만 로그가 나온다

 

 

해당 로그를 확인하고 특이점이 있다면

삭제할 커밋 이전 커밋의 ID를 입력해야한다 삭제할 커밋의 최신이 아닌 바로 이전 old 커밋의 아이디

 

 

git rebase -i 삭제할 커밋 이전 커밋의 ID

 

rebase 화면이 나오면서 명령어 편집기(텍스트) 가 켜진다 

입력한 ID 이후로 커밋된 내역이 보여지고 commands 에  도움말이 적혀있다 

삭제할 꺼라 drop을 사용한다 

 

vim 명령어
i: 텍스트를 수정하려거든 
ecs: 텍스트 수정모드를 끝내고 하단의 명령어를 입력할 수 있는 모드로 전환
저장후 종료하기 :wq 

 

 

git log로 확인해보니 원하는 커밋만 삭제가 가능해서 로그에 보이지 않는다

이제 원격에 수정된 내용을 덮어씌울차례

 

로컬저장소의 내용을 원격 저장소에 강제로 덮어씌우는 명령어

❌강제 푸쉬는 원격 저장소의 내용을 덮어씌움으로 신중하게 사용하라는 안내문이 보인다 
git push -f

 

최근 last commit에서 5 log 안에 드는 마지막 커밋이자 코드에 영향을 주지 않는 config 내용의 커밋이고

브런치나 다른 사람과의 충돌부분이 없어서 진행하였다

원격저장소에 확인하니 삭제하려는 특정 커밋이 잘 삭제된걸 확인했다   🤗

 

해당 강제푸쉬를 진행할때는 협업시 다른 사람의 작업물에 영향을 줄 수 있고 

강제로 덮어버리는거라서 신중하게 사용을 권고하고 있음 🏋️‍♂️

프로젝트 막바지 뭔가 수정하거나 현 코드와의 연관성이 있는 커밋이라면

고민이 필요해보이는 부분이다