본문 바로가기

개발도구 사용법/Git으로 버전관리 하기

[ git ]step.5 merge 방법 3-way/ fast-forward/ squash/ rebase

 

지난 시간 배운 merge의 다양한 종류와 쓰임새에 대해 알아본다. 

 

[merge - 3-way]  가장 일반적인 commit 방법, main 과 신규 브랜치의 commit이 있을 경우 사용됨

1. main 브랜치의 최신 commit 버전과 그외 브랜치의 commit버전을 하나로 합침

2. merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성한다.




 

[merge  - fast-forward merge] 

1. 새로 생성한 브랜치에 신규 commit이 있고

2. 기존 main 브랜치에 commit이 없을 경우 신규 브랜치를 main으로 변경합니다.

3. 
main 브랜치의 신규 commit 이 없으면  자동으로 fast-forward merge 가 발동됩니다.

 

[fast-forward merge] main / copon branch 생성 ( merge before)

기존 브랜치에  commit 없음

신규 브랜치에서 git coupon.txt / newbranch.txt 추가로 commit

[merge] main + copon ,   fast-forward 표시됨 (merge  after)

[fast-forward 최종 확인] 



fast-forward를 막는방법

git merge --no-ff 브랜치명

 

[new branch] --no-ff 테스트를 위해 다시 뉴브랜치인 coupon에서 git merge --no-ff.txt 파일을 추가 commit 했다.

[main branch]  git merge --no-ff 브랜치 명을 진행했는데 아래와 같은 메세지가 나왔다. 

메인으로 이동이 안되서 그냥 git merge --quit 했다.

이전에 fast-forward 이력이 있어서 그런 것 같다.  브랜치를 지우고 새로만들어보니 잘된거 같다.

 

[branch삭제] 브랜치를 삭제하는 명령어

 

merge 완료된 브랜치 삭제

git branch -d 브랜치이름



merge  되지않은 브랜치 삭제

git branch -D 브랜치이름

머지 안된 브랜치를 -d 로 삭제 시도하면 -D명령어를 사용하시라고 친절하게 안내해줍니다.

삭제완료

 

 

[rebase and merge] rebase는 신규 브랜치의 시작점을 다른 commit으로 옮겨주는 행위

 

1. rebase를 이용해서 신규 브랜치의 시작점을 main 브랜치 의 최근 commit으로 옮긴다음 

2. fast-forward merge 하는것

   

3. 강제로 fast-forward 하고싶을 때 commit 내역을 한줄로 계속 이어서 남기고 싶을때  사용함

 

 

main 브랜치 / new 브랜치 생성 모두 commit 시작

git switch 다른 브랜치(새로운 브랜치)

git rebase main

new 브랜치로 이동후 Git rebase main 실행
실행결과

git switch main
git merge 새로운브랜치

 

git merge 새로운 브랜치 실행결과

 

[squash  and merge ]  - 여러명이 작업시 3-way merge의 경우 복잡도가 증가하므로 심플하게 log정리 가능

 

1.squash and merge - 새로운 브랜치에 있는 commit 들을 연결해주는게 아니고 똑 떼와서 main 브랜치에 붙여 주기 떄문에 깔끔하게 코드관리를 할수 있다. 

 

2. 새코드에 있던 코드 변경사항들이 main 브랜치로 텔레포트 한다고 보면됨, 

 

3. merge 완료된 브랜치의 commit 같은 것들은 출력되지 않음

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

새로운 브랜치에 있던 commit을 (new_squash.txt) main 브랜치로 가져온 모습이다.

대부분의 경우 rebase / squash를 사용했을 경우와 일반적인 merge방법과 결과는 동일하고
git log등 관리하기 편하기때문에  많이 사용한다. 

 

 

[git graph error] 실습중간에 폴더를 새로만들거나 초기화 했을 경우 git graph가 동작하지않는다.

Error:Unable to load Commits

There are no commits in this repository

 


1. 기존에 쓰던 폴더를 지우고 초기화시, 처음 설정했던 정보를 다시 넣어줘야한다.

git config --global user.email "이메일@gmail.com"
git config --global user.name "사용자명"
git init


2. 그리고 gitgraph repository를 완전 삭제 후 다시 설치 했다.  vscode 명령창에 >git Graph:Remove git Repository 실행

>git Graph:Remove git Repository 실행

 

3.레포지토리 모두삭제 후 vscode 종료후 재실행 

select

 

4.정상적으로 git graph 나타남


출처:https://qiita.com/yamaputo5tospace/items/888514265bce127659b4

 

 

 

 

오늘은 내용이 좀 길었네요 

여기까지 감사합니다.

=======================================================================

해당 시리즈는 코딩애플 강의 "매우쉽게 알려주는 git & github" 참고 하였습니다.

https://codingapple.com/

 

코딩애플 온라인 강좌 - 개발자도 단기완성!

단연 NO1 강사님의 NO.1 강의 역시나 명강입니다. IT 업계의 대치동 NO1. 강사같은 엄청난 강의력. 코딩애플님의 강의는, 엄청나게 기초적인 것부터 가르치는 듯 보이지만, 실제로 다루는 깊이는 절

codingapple.com

 

반응형