-
반응형
여러 명이 공동으로 작업하는 저장소를 clone 받아서 작업을 하고 있는 상황이다.
master라는 공동의 branch가 존재하고, 나는 my-branch라는 새로운 branch를 만들어서 코드 작업을 하고 있다.
git branch my-branch git checkout my-branch // 한 줄로 축약해서 쓰기 git checkout -b my-branch
코드 작업을 마치고 master branch에 merge를 하려고 하는데,
내가 merge 하기 전에 누군가가 master branch에 다른 작업을 한 후 commit을 하고 push를 해버렸다.
이 경우에 my-branch를 master branch에 병합하는 방법은 대략 3가지 정도가 있다.
바로 merge, squash and merge, rebase and merge.
■ Merge
하나의 브랜치와 다른 브랜치의 변경이력 전체를 합치는 방법.
my-branch의 commit a, b를 참조하는 commit m이 생성되고, 이 m을 통해 a + b가 master branch에 추가된다.
이 때, commit m은 2개의 parent(바로 앞의 보라색 commit과 b commit)를 가진다(my-branch가 살아있다는 뜻)
git checkout master git merge my-branch // 현재 브랜치인 master 브랜치에 my-branch를 병합시킨다
■ Squash and Merge
commit a, b를 합쳐서 새로운 commit인 ab를 생성하고, 이를 master branch에 추가한다.
위의 merge와 다른 점은, merge일 때는 commit ab가 my-branch의 두 개 commit을 참조하고 있다는 점.
즉, my-branch(의 commit 두 개)와의 연관이 사라지지 않는다.
반면 squash merge는 my-branch(의 commit 두 개)를 하나로 합쳐버리면,
my-branch의 commit a, b는 merge 이후의 master branch commit ab와 아무런 연관을 가지지 않게 된다.
이렇게 되면, commit ab는 하나의 parent만을 가지게 된다(바로 앞의 master branch commit).
feature branch의 commit branch를 깔끔하게 만들기 위해서 종종 사용되는 방법.
git checkout master git merge --squash my-branch git commit -m "커밋 메시지"
my-branch의 여러 history가 합쳐져서 하나의 새로운 commit을 생성한다.
(새로 commit을 해줘야 한다)
* 참고로, 원래 squash 명령어는 rebase에서 여러 커밋을 하나로 묶을 때 사용.
자세한 내용은 두 번째, 세 번째 참고글에.
■ Rebase and Merge
모든 커밋들이 합쳐지지 않고 각각 master branch에 추가된다.
각 commit들은 모두 하나의 parent(master branch의 commit)를 가진다.
git checkout my-branch git rebase master git checkout master git merge my-branch
역시나, merge된 이후의 master branch의 commit들은 my-branch의 commit a, b와 아무런 연관을 가지지 않는다.
원래 merge는 merge commit 기록이 추가로 남게 되지만
rebase의 경우는 branch 병합 시 merge commit 기록이 남지 않는다.
그래서, 마치 하나의 branch에서 작업한 것처럼 보여진다.
첫 번째 참고 블로그인 'Code Playground'에서 이 글을 보고 이해가 너무 잘 돼서,
복습할 겸 기록하면서 멈칫했던 부분에 추가 설명 정도만 덧붙였다.
참고
반응형'Git' 카테고리의 다른 글
Git cherry-pick (2) 2021.03.31 git stash 명령어 (0) 2021.03.15 .gitignore가 올바르게 작동하지 않을 때 😤 (0) 2021.02.07 Git 커밋 메시지 컨벤션 (0) 2020.12.30 수정과 관련된 git 명령어 💡 (0) 2020.12.05