본문 바로가기

[뭘, 이런걸 다?]

[뭘, 이런걸 다?] git에서 특정 commit에 들어간 수정 파일을 다른 commit으로 옮기는 방법

git add . 이나 git commit -a 를 자주 쓰다보면 자칫 실수로 원하지 않는 파일이 커밋에 포함되어 버리는 경우가 있습니다. 


상황



원래는 26d0ab1에 포함되어야 할 파일이 96a41e9 커밋에 포함되어 버림. 

(그냥 가도 되긴 하지만 게으르면서도 집착증세가 있는 나란 동물...)


되돌리기 작업 시작!


rebase 옵션으로 한 단계 뒤로 돌아가서 시작. 원하는 commit을 pick 한다.

지금 같은 경우엔 26d0ab1 와 96a41e9 를 선택한다.


    git rebase -i 96a41e9ef2d9747e7b34ae424b0c845ab7092ee4^


불필요한 파일을 staged에서만 지움

    git rm --cached project/Build.scala


재 커밋 후 rebase 계속

    git commit --amend

    git rebase --continue


특정 commit에 파일을 추가하고 수정커밋 

    git add project/Build.scala

    git commit --amend


rebase 계속

    git rebase --continue



유의점

이미 최신 코드들을 중앙저장소로 넣은 상태라면

git push --force 명령어로 넣어야 하는데, 이런경우 수 많은 사람들에게 불편을 끼칠 수 있습니다.

(모든 사람에게 I'm so sorry but I'm allergy! 라고 말을 해야 하는 상황)

견뎌낼 수 있는 수준인지 확인할 필요가 있다. 안되면 아쉽지만 포기!