Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

[Git] Merge / Squash / Rebase 본문

프로젝트

[Git] Merge / Squash / Rebase

_슈프림 2021. 7. 30. 12:55
728x90

아래에서 설명하는 내용은 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는 완전히 같다!

반응형
Comments