git에서 merge하는 2가지 방법인 fast forward, 3-way merge에 대해서 알아보겠습니다.
두 브랜치가 공통 commit을 조상으로 가지고 있는데 한쪽 branch만 이후의 commit이 있을 때, 병합을 위한 새로운 commit을 만들지 않고, 기존의 branch에 브랜치의 헤드를 옮기는 것을 말합니다.
fast forward을 진행하게 되면 병합된 브랜치는 삭제합니다.
병합하고 나서 어떤 브랜치를 사용했고, 언제 병합했는지 기록의 변화가 남지 않게 됩니다.
git emrge --no-ff "병합할 브랜치명"
해당 옵션을 사용하여 브랜치를 서로 분리한 상태로 유지하며 merge할 수 있습니다.
두 브랜치를 병합할 때, 두 커밋 모두에 속한 파일들이 모두 내용이 다르다면,
충돌이 발생할 수 있습니다.
두 커밋이 어떤 브랜치에서 변경된 것인지, 알기 위해
두 커밋이 공통으로 갖는 commit과, 서로 병합하는 두 branch의 commit을 비교하기 때문에 3-way merge라고 합니다.
git cherry-pick "가져올 commit의 해시"
다른 브랜치에서 원하는 commit만 가져오는 방법입니다.
원하는 브랜치만 복사해서 위로 붙여넣는 방식으로 실행 됩니다.
git rebase --onto "도착 브랜치" "출발브랜치" "이동할 브랜치"
어떤 기능을 main에 적용하기위해 만들어 놓은 second 브랜치가 있고,
second 브랜치에서 다른 유용한 기능을 만들기 위한 third 브랜치를 만들었다고 가정하겠습니다.
main브랜치에 third 브랜치만을 main 브랜치에 옮겨놓고 싶을 때 해당 명령어를 사용합니다.
git switch main
아직 main branch와 병합 되지는 않았습니다.
git merge "붙여 놓은 branch"
붙여놓은 branch와 main브랜치를 합쳐주는 명령으로 병합해줍니다.
git merge --squash "브랜치 이름"
다른 branch의 여러 commit들을 한번에 가져옵니다.
git commit -m "새로 만들 커밋 message"
변경사항이 commit 되지는 않았음으로 commit하여 변경사항을 repository에 저장하여 줍니다.
가져오려는 branch의 commit들이 새로운 commit으로 가져와서 합쳐졌습니다.