Pull request를 올리기 전에, 나의 브랜치가 master와 fast-forward 상태가 되도록 만든다.
💡 "fast-foward"는 충돌 없이 바로 병합될 수 있는 상태를 말한다.
쉽다. 한 번의 merge 명령어만으로 쉽게 해결이 가능하다.
커밋 내역이 지저분해진다. merge commit은 보통 관심이 없기 때문이다.
rebase란 내 브랜치의 base를 master의 최신 상태로 옮기는 것을 말한다.
rebase의 원리는 기록 조작이다. 내 브랜치가 master의 최신 커밋에서 생성된 것처럼 조작하는 것이다.
실제로 해보면, 내가 원래 딴 커밋에서부터 내가 목표하는 base 커밋까지 하나씩 옮겨가면서 새로 커밋을 하는것이다.
[(커밋 A) --- (커밋 B) --- (커밋 C)]
ㄴ--- (내 브랜치 커밋)
// (커밋 C)을 베이스로 리베이스를 실행한다
[(커밋 A) --- (커밋 B) --- (커밋 C)]
ㄴ--- (내 브랜치 커밋) // 한 커밋씩 옮겨가며 commit한다. 컨플릭이 나면 고쳐준다.
(Continue rebase를 누른다)
[(커밋 A) --- (커밋 B) --- (커밋 C)]
ㄴ--- (내 브랜치 커밋) // 목표하는 (커밋 C)까지 왔다. 컨플릭이 나면 고쳐준다
merge commit없이 깔끔한 커밋 히스토리를 만들 수 있다.
--force
옵션을 켜야한다.merge --squash
를 하면 merge의 단점인, 쓸모 없는 merge commit이 생기는 문제를 없앨 수 있다. 다만 의미있는 commit들도 날아갈 수 있다. 보통 develop과 feature 브랜치 간 병합의 경우, feature의 복잡하고 지저분한 커밋 히스토리를 굳이 남길 이유가 없어서, merge --squash
를 쓰는 것이 좋다고 생각한다.git config --global pull.rebase true