8장 커밋 이력 조작
Must Have 박미정의 깃&깃허브 입문 정리 MOC
다른 브랜치의 커밋을 작업 브랜치에 추가하기 : git cherry-pick
병합하는 대신에 다른 브랜치의 커밋을 선택적으로 작업 브랜치에 추가할 때 사용
git cherry-pick "추가하려는 커밋 체크섬"
❓ 어떨 때 사용하나
- 치명적인 결함이 있는 버전을 배포했을 때, 결함 수정해서 브런치에 추가시킴
- 작업 브런치 잘못 설정하고 커밋 했을 때, 다른 브런치로 옮긴다
이런 상황 등등
이전 커밋으로 작업 브랜치의 최종 커밋 변경하기 : git reset
이미 생성된 커밋을 취소하고 이전 커밋으로 최종 커밋을 변경.
git reset "이전 커밋 체크섬"
변경 사항 되돌리는 커밋 생성하기 : git revert
이미 생성된 커밋 취소하고 변경사항 되돌리는 새로운 커밋을 생성함.
git rever "되돌리려는 커밋 체크섬"
git reset
이용하면 커밋 자체를 커밋 이력에서 제외하지만, git revert
는 커밋의 변경 사항을 되돌렸다는 새로운 커밋을 커밋 이력에 생성.
git reset
이 커밋 이력이 깔끔하게 유지되는 것 가지만, 협업할 때는 작업을 되돌리는 이력을 확인할 수 있도록 git revert
를 사용하는 편이 좋다.
브랜치 커밋 이력 재정렬하기 : git rebase
git rebase "재정렬을 위한 기준 브렌치"
그냥 브랜치 병합
git checkout main
git merge test/test
* 0b19204f328972d36484205a70b60bf80360a4d5 (HEAD -> main) Merge branch 'test/test' into main
|\
| * 7476f365fe334ae6f2fa0bc7846e0fdf4f7ff781 (test/test) test rebase2
브랜치 커밋 이력 재정렬후 병합
main 기준으로 test/test 브랜치를 재정렬했다.
git checkout test/test
git commit "test rebase3" --allow-empty
git log --pretty=online --graph
>>
* 9e937c0cb5b8a6a84729ca0e5e38ccb1324d190a (HEAD -> test/test) test rebase3
git chekcout main
git merge test/test
git log --pretty=online --graph
>>
* 9e937c0cb5b8a6a84729ca0e5e38ccb1324d190a (HEAD -> main, test/test) test rebase3
- 브랜치로 가지치기 안되고 main 가지에 기생하는 느낌.
- commit 이력이 깔끔해짐. 다른 브랜치의 commit 이 main 브랜치 기준으로 정렬돼서
- rebase 한번 하면 끝까지 가는듯