브랜치간의 변경사항 합치기

git merge [브랜치명]
git merge --squash [브랜치명]
git cherry-pick [커밋명]

합치기는 두 개 혹은 그 이상의 브랜치를 하나로 합치는 것이다. 브랜치간의 변경 사항을 합치는 방법에는 몇 가지가 있다.

  • 바로 합치기(Straight Merge)는 하나의 브랜치와 다른 브랜치의 변경 이력 전체를 합치는 방법이다.
  • 커밋 합치기(Squashed Commit)한 브랜치의 이력을 압축하여 다른 브랜치의 최신 커밋 하나로 만드는 방법이다.
  • 선택하여 합치기(Cherry-picking)다른 브랜치에서 하나의 커밋을 가져와서 현재 브랜치에 적용하는 방법이다.

바로 합치기

바로 합치기는 하나의 브랜치를 선택해서 다른 브랜치와 합친다. 해당 브랜치의 전체 이력을 다른 브랜치에 반영하고자 할 때 사용한다.

alternate 브랜치를 만들고 about.html 이라는 새 파일을 추가한 후 저장소에 추가하고 커밋한다.

git checkout -b alternate master
touch about.html
git add about.html
git commit -m "add new file"

현재 alternate 브랜치에 커밋한 내용은 master 브랜치에 존재하지 않는다 이제 git merge 명령어를 사용하여 두 브랜치를 합칠 수 있다.

먼저 현재 브랜치를 합치고자 하는 대상 브랜치로 전환해야 한다. 그 다음 git merge를 실행하여 현재 브랜치에 합치려는 브랜치명을 지정하면 된다.

git checkout master
git merge alternate

이제 alternate 브랜치의 변경 사항이 master 브랜치에 합쳐졌다.

커밋 합치기

커밋 합치기는 이것저것 실험해 봐야 하는 새로운 기능을 만들거나 버그를 수정할 때 유용하다. 실험한 내용은 추적하지 않아도 되므로 커밋할 필요가 없다. 즉, 마지막 결과만 필요할 뿐이다.

Git이 브랜치 하나의 모든 이력을 압축하여 다른 브랜치에 하나의 커밋으로 만들기에 커밋 합치기라고 한다.

master 브랜치에서 contact 브랜치를 생성한 후 체크아웃 한다. 그리고 contact.html 파일을 추가하여 이메일 주소를 입력하고 커밋한다

git checkout -b contact master
touch contact.html
git add contact.html
git commit -m 'add with first email'

추가 이메일 주소를 입력한 후 다시 커밋한다.

git commit -am 'add secondary email'

contact 브랜치에는 이제 두개의 커밋이 존재한다. 두개의 커밋을 master 브랜치에 한 개의 커밋으로 밀어 넣을 수 있다.

git merge을 실행할 때 --squash 매개변수를 추가하면 git merge에서 지정한 브랜치의 모든 커밋을 하나의 커밋으로 밀어 넣는다.

git checkout master
git merge --squash contact

contact 브랜치에 있는 두 개의 커밋이 작업 디렉토리에 적용되어 스테이징됐지만, 아직 커밋이 되지 않았으므로 커밋을 한다.

git commit -m 'add contact page'

선택하여 합치기

브랜치 간에 전체를 합치는 대신 오직 하나의 커밋만 합칠 필요가 있다. 브랜치에 아직 사용할 수 없는 기능이 있거나 해당 브랜치에는
아직 준비가 안 된 변경사항이 있을 수 있기 때문에 전체 합치기가 적합하지 않은 경우가 있다.

git cherry-pick을 사용하면 개별적인 커밋을 밀어 넣을 수 있다.

먼저 contact 브랜치로 체크아웃후 트위터 계정 같은 새로운 링크를 추가하고 커밋한다.

git checkout contact
vi contact.html

실행결과

추가된 커밋명은 '9941f44'이다. 이 커밋명을 이용하면 어디에서나 선택하여 합칠 수 있다.

master 브랜치로 체크아웃한 다음 cherry-pick 명령어를 실행하여 추가된 커밋명을 선택하여 합칠 수 있다.

git checkout master

실행결과

기본적으로 git cherry-pick은 선택한 커밋의 변경 사항을 가지고 새로운 커밋을 생성한다.

선택하려는 커밋이 여러 개라면 git cherry-pick-n 매개변수를 지정한다. -n 매개변수는 Git을 합치기는 하지만 커밋하지 않게 만든다.

git cherry-pick -n 9941f44

git status을 실행하여 새로운 파일이 추가되었고 스테이징되어 커밋할 준비가 됐음을 확인할 수 있다.

이제 계속해서 다른 변경 사항을 선택하여 합칠 수 있다. 선택한 커밋을 모두 가져온 후 원하는 대로 메시지를 지정하여 커밋하면 된다.
커밋할 때 메시지를 추가하는 -m 매개변수를 지정하지 않아도 된다. 편집기가 실행되면 기본적으로 가져온 커밋의 메시지가 나타남을 볼 수 있다.

results matching ""

    No results matching ""