슈프림 블로그
[Git] Merge / Squash / Rebase 본문
아래에서 설명하는 내용은 PR을 사용하지 않고 로컬에서 Merge 후 push 해주는 방법이다.
PR을 쓰려면 merge를 master가 아닌 my-branch에서 해 주어야 함!
일반적인 Merge
my-branch에서 작업하던 걸, master로 합치고 싶을 때 나는 보통 이런식으로 작업했다.
master 브랜치로 이동
git checkout master
원격저장소의 master에 변경내용이 있으면 로컬로 받아옴
git pull origin master
my-branch의 내용을 master로 합쳐줌
git merge my-branch
충돌이 날 수도 있다 -> 그럼 충돌 해결하고 commit을 작성해준다.
git commit -m "Merge commit message"
원격저장소에 merge 결과를 push 한다.
git push origin master
이렇게 하면 master에 있는 커밋, 내가 작성한 커밋이 이리저리 뒤섞여 있다. (commit 작성한 시간 순서대로)
한 사람이 작업한 히스토리는 몰려있게끔 merge 순서대로 커밋 히스트로리를 정렬할 수 있는 방법은 없을까?
커밋 히스토리를 합쳐서 merge
squash and merge
이 방법은 my-branch의 커밋 내역들을 하나로 합쳐서 master에 병합하는 방법이다.
내가 my-branch에서 100개의 커밋을 했다고 해도, 결과는 master에 커밋 1개만 남게 된다.
git checkout master
git pull origin master
git merge --squash my-branch
git commit -m "Squash and Merge my-branch"
git push origin master
이 방법은 브랜치를 통째로 squash 하는 법이다.
원하는 커밋만 squash 할 수도 있는데 그건 다음에....
모든 branch가 하나의 갈래로 보이도록 만들기
rebase and merge
내가 작업한 내용이 현재 master의 마지막 커밋으로부터 시작된 것 처럼 만들 수 있다.
rebase 뜻이 현재 브랜치의 base를 옮긴다는 뜻인데,
master에서 my-branch를 분기한 시점이 기존의 base이고, r
ebase 명령을 실행하면 master의 마지막 시점이 my-branch의 base로 변경된다.
일단 my-branch에서 rebase 하는것으로 시작한다.
git pull origin master
git rebase master
git checkout master
git merge my-branch
git push origin master
그럼 master랑 my-branch랑 내용이 다른거 아님??
ㄴㄴ. my-branch에서 git rebase master를 했을 때, 이미 my-branch는 master 뒤에 이어붙여졌다.
그리고 master로 이동해서 my-branch 내용을 그대로 가져왔으니
현재 my-branch와 master는 완전히 같다!
'프로젝트' 카테고리의 다른 글
[gitmoji-cli] 깃모지를 커멘드라인에서 바로 적용하여 사용해보자🎉 (0) | 2021.02.11 |
---|---|
[프로젝트] iOS 프로젝트 배경지식 준비 (Background media play, dlib 등) (0) | 2020.11.08 |