본문 바로가기
git

[git] 다양한 merge (3-way, fast-forward, squash, rebase)

by 딩박사 2022. 8. 27.
반응형

* 본 포스팅은 필자가 개인적으로 학습한 내용 정리 및 리뷰를 위해 포스팅합니다.


 

https://kks2140501.tistory.com/14

 

[git] 코드의 복사본! branch 만들기

* 본 포스팅은 필자가 개인적으로 학습한 내용 정리 및 리뷰를 위해 포스팅합니다. 새로운 기능을 추가하는 경우 원본 파일에 커밋하기 애매한 경우가 있다. 안전하게 새로운 기능을 추가하고

kks2140501.tistory.com

▲ 위에서 말한 branch를 합칠때는 다양한 방법을 사용할 수 있다


● 3-way merge

 

 

▲ branch에 신규 commit이 1회 이상 있는 경우 merge 명령을 내리면

두 branch 코드를 합쳐서 새로운 commit을 자동으로 생성

3-way merge 라고 부르며, merge의 기본 동작 방식

 

 

● fast-forward merge

 

 

▲ 가끔 새로운 branch에만 commit이 있고 기준이 되는 branch에는 신규 commit이 없는 경우

fast-forward merge 된다.

(git merge --no-f 브랜치명 해서 강제로 3-way merge 할 수 있다)

 

 

 

● rabase and merge

 

 

▲ rebase는 branch의 시작점을 다른 commit으로 옮겨주는 행위

1. rebase를 이용하여 신규 branch의 시작점을 main branch 최근 commit으로 옮긴 다음

2. fast-forward merge

 

■ rebase 사용 이유

 

 

1. 3-way merge 말고 강제로 fast-forward 하고 싶을 때

2. branch 없이 코드 짜고 싶을 때

단점 : branch끼리 차이가 많은 경우 rebase 할 경우 충돌이 발생!!

 

 

git switch 새로운 브랜치
git rebase main

git switch main
git merge 새로운 브랜치

▲ 1. 새로운 브랜치로 이동

2. git rebase main

3. branch가 main branch 끝으로 이동 후 fast-forward merge

 

 

● squash and merge

 

 

새로운 branch에 있던 commit들을 연결해주는 게 아니라 떼와서 main branch에 붙여준다

장점 : 3-way merge는 main branch의 git log를 출력해보면 다른 branch들의 commit 내역도 같이 출력되어 보기 힘들지만 squash and merge를 사용하면 log 보기가 간편해진다

 

 

 

 

git switch main
git merge --squash 브랜치명
git commit -m '메세지'

 

 

 

■ 브랜치 삭제

 

 

git branch -d 브랜치이름
git branch -D 브랜치이름

▲ 병합이 완료된 브랜치 삭제 시엔 -d

병합하지 않은 브랜치 삭제 시엔 -D

 

 

 

 

 

 

 

 

 

 

결론

merge 종류가 많지만 하나하나 개념을 파악하고 회사에서 원하는 merge 방법에 적용해야겠다.

 

 

 

 

 

출처 : https://codingapple.com/course/git-and-github/

 

매우쉽게 알려주는 git & github - 코딩애플 온라인 강좌

  누구나 마음 한켠엔 나만의 웹서비스를 만들고 싶어합니다. 프론트엔드는 어찌저찌 하겠는데 서버 만드는게 어렵고 귀찮다고요? 그렇다면 Firebase를 쓰십시오.   구글이 웹서버를 대신 만들어

codingapple.com

 

반응형

댓글