티스토리 뷰

Tools/Git

[Git] Fast-Forward & 3-way 병합

SdardewValley 2022. 6. 3. 15:13
반응형

Fast-Forward

  Fast-Forward는 직역하자면 빨리감기이다. Fast-Forward 병합은 혼자 개발할 때 사용한다. 혼자 개발할 때 commit은 순차적으로 생성된다. commit이 순차적으로 발생한 경우 사용하는 병합 방식이 Fast-Forward이다.

 

main 브랜치에 feat 브랜치로 분기

  혼자 작업 할 때 새로운 기능을 추가하기위해서 새로운 브랜치를 생성한다고 하자. commit들은 그림에서 볼수 있듯 순차적으로 생성된다. 해당 commit들은 Fast-Forward 방식으로 병합한다면 아래의 그림과 같이 병합될 것이다.

 

Fast-Forward 병합

   여기서 가장 큰 특징은 분기가 시작된 브랜치, 즉 main 브랜치에 아무런 변경도 없어야 한다. main commit 이후로는 어떤 commit도 없기 때문에 fast-forward 병합이 가능했다.

3-way  

  3-way는 여러 개발자와 작업하는 경우 사용하는 방법이다.

 

3-way 병합이 사용되는 경우

  3-way 병합의 경우 분기이후에 두 브랜치 모두 변경이 일어난 경우 사용된다. 위의 그림을 보면 빨간 점선 박스 3개가 있다. 이 3개의 박스들이 변경의 기준이 되는 커밋이다. 3-way의 경우 공통 조상 커밋(여기서는 main commit 1)과 그 이후의 각 브랜치의 커밋을 기준으로 병합을 한다.

 

3-way 병합 후 commit 모습

  3-way 병합은 두 브랜치에서 공통 조상 commit을 기준으로 브랜치를 병합한다. 그리고 병합 후에는 병합 commit이 생성된다. 이런 병합 commit은 부모 commit이 2개이다.

 

실제 3-way commit을 했을 때

  git log  --branches --decorate --graph --oneline 명령어를 통해서 브랜치들을 시각적으로 확인할 수 있다. 병합 commit과 메시지를 확인할 수 있다.

 

git log로 병합 commit 확인

  충돌 없이 3-way 병합이 된 경우 자동적으로 "Merge branch ~"이라는 commit 메시지가 생성된 것을 확인할 수 있다. 

 

--edit 옵션 추가

  git merge 브랜치명 --edit을 통해서 자동적으로 생성되는 메시지가 아닌 다른 메시지를 입력할 수도 있다. 위의 사진을 보면 commit 메시지가 Merge branch ~ 가 아닌 Edit message인 것을 확인할 수 있다.

 

참고

  • Git 교과서
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함