[git] merge 다루기

younoah·2021년 2월 5일
0

[Git]

목록 보기
4/14
post-custom-banner

merge명렁어

  • merge 진행하기

master 브랜치로 이동한 뒤 아래 명령어를 작성한다.

git branch 브랜치 # default is fast-forward
git branch --no-ff 브랜치 # no-fast-forward

git branch -d 브랜치 # merge한 이후에는 merge된 브랜치를 삭제한다.

보통 HEAD를 master로 해서 merge하지만

HEAD를 다른 브랜치로 하여 다른 브랜치를 merge할 수도 있다.

  • mgere 취소하기
git merge --abort
  • 충돌 해결하고 이어서 merge하기
git merge --continue

three-way merge 방식

  • fast-forward merge (default)
  • no-fast-forward merge
  • fast-forward merge 불가능 -> no-fast-forward merge

그냥 git merge를 할 때 기본적으로 fast-forward merge가 가능하다면 fast-forward merge를 진행한다 하지만 three-way 같은 상황이여서 fast-forward merge가 불가능하다면 no-fast-forward merge가 진행되면서 커밋 기록을 남긴다.

fast-forward merge가 가능한 상황임에도 커밋 기록을 남기는 no-fast-forward merge를 하고싶다면 git merge --no--ff 브랜치 를 사용한다.

fast-forward merge

merge1

merge2

기존에 작업하던 브랜치가 가리키는 커밋에 master 브랜치를 가리키도록 하고 브랜치를 삭제하는 방식이다.

이 방식은 히스토리에 merge가 되었다는 사실이 남지 않기 때문에 깔끔하게 merge하는 방식이다. merge가 기록이 되지 않는다는점에서 단점이 될 수도 있다.

# in master branch
git merge branch1

git branch -d branch1

no-fast-forward merge

merge 기록까지 모두 히스토리에 남기고 싶다면 아래와 같이 c커밋과 e커밋을 합한 f커밋을 새로 만들고 master브랜치에 커밋한다. 이렇게 하면 branch1이 merge되었다는 것을 기록에 남길 수 있다.

merge3

# in master
git merge --no-ff branch1 # --no-ff 옵션: no fast-forward

fast-forward merge가 불가능한 상황

merge4

위와 같은 상황이 fast-forward merge가 불가능한 상황이다. 커밋 e로 master브랜치를 fast-forward merge 하게되면 커밋 f와 커밋g를 잃게 된다. 따라서 no-fast-forward merge를 진행해야 한다.

git은 이런 상황에서 아무런 옵션없이 git merge branch1 만 해도 no-fast-forward merge를 진행한다.

profile
console.log(noah(🍕 , 🍺)); // true
post-custom-banner

0개의 댓글