Merge와 Rebase

정보/뉴스

Merge와 Rebase

담운 0 1,103 2019.06.08 12:51

git merge

이제 feature 브랜치에서 작업하던 내용이 완성되었다면 master와 합쳐서 실제로 사용할 수 있게 해야합니다. 이 때 사용하는 명령어가 git merge [브랜치명]입니다. 주의할 점은 여기서의 브랜치명은 합칠 branch입니다. 바탕이 되는 branch가 아니라요. 우리가 합칠 branch는 feature죠. 따라서 merge 전에 항상 git branch 명령어로 현재 HEAD가 바탕이 되는 master에 있나 확인해야 합니다.

merge 후에는 구조가 다음과 같아집니다.

2cnMOSMYQAGqHsWfgl1P


merge 결과에 Fast-forward라고 표시되어 있는데 이것은 master 브랜치를 앞으로 쭉 당겼다는 뜻입니다. feature 브랜치가 master 브랜치보다 한 commit 앞에 있었기 때문에 master 브랜치가 feature 브랜치를 merge하는 순간 한 commit 앞으로 당겨지는 거죠.

conflict

하지만 모든 merge가 이렇게 순조롭게 되는 것은 아닙니다. 가끔 branch끼리 충돌이 나는 경우가 있는데 그 경우를 알아봅시다.

git reset HEAD~1으로 master branch를 뒤로 돌려봅시다. 그리고 git.html을 다음과 같이 수정하고 commit을 해봅니다.

<!DOCTYPE html>
<html>
<head>
  <title>깃 연습</title>
  <link rel="stylesheet" href="./git.css" />
</head>
<body>
  <h1>깃 conflict</h1>
  <p><b>깃 conflict</b>의 사용 방법에 대해 알아봅시다</p>
</body>
</html>

zW6oeCPR2OL1aBDSuZBA


이제는 branch 두 개가 각자 다른 갈래로 갈라졌습니다. 이제 git merge feature을 하면 충돌이 일어나는 것을 볼 수 있습니다.

Syf4OjmSBqrgq4W1FmhQ

또한 git.html도 다음과 같이 자동으로 변경되었습니다.

<!DOCTYPE html>
<html>
<head>
  <title>깃 연습</title>
  <link rel="stylesheet" href="./git.css" />
</head>
<body>
<<<<<<< HEAD
  <h1>깃 conflict</h1>
  <p><b>깃 conflict</b>의 해결 방법에 대해 알아봅시다</p>
=======
  <h1>깃 브랜치</h1>
  <p><b>깃 브랜치</b>의 사용 방법에 대해 알아봅시다</p>
>>>>>>> feature
</body>
</html>

<<<<<<< HEAD와 >>>>>>> feature 사이가 충돌이 발생하는 지점입니다. Conflict commit과 Feature commit의 차이점이기도 하고요. 이 부분을 직접 정상적으로 바꿔주고 addcommit 해줍니다. 이제 갈라졌던 두 브랜치가 하나의 commit으로 다시 합쳐졌습니다.


git rebase

두 branch를 합치는 다른 방법은 git rebase입니다. 위의 구조에서 git reset HEAD~1을 해줍니다. 합쳐졌던 두 개의 브랜치가 다시 갈라졌습니다.


두 사람이 협업하다가 commit이 서로 달라진 경우죠. 이제 여기(master)서 feature branch를 rebase합니다. git rebase [브랜치명]입니다.

KqzTJprSmaJpoQwFEDCL

역시나 충돌이 일어나는 데 merge와는 해결 방법이 살짝 다릅니다. 일단 git.html의 충돌을 해결하고 git add git.html로 staged 상태로 만들어줍니다. merge는 그 후에 commit을 했지만, rebase는 git rebase --continue로 중단된 rebase를 이어가면 됩니다.

hFIlZVomTuir6JDxDN6x

현재 구조는 다음과 같습니다.


merge 때와는 살짝 다르죠? merge는 갈라진 두 commit이 합쳐져서 새로운 commit이 되었다면, rebase는 하나의 commit이 다른 commit 앞으로 올라갑니다. 아래의 merge 경우와 비교해보세요.


merge와 rebase는 취향에 따라 사용하시면 됩니다. 깔끔한 log를 원하면 rebase를 하고, 직관적으로 간단하게 하고 싶으면 merge를 하면 됩니다.

다음 시간에는 그 외 자잘한 명령어들에 대해 알아보겠습니다!

연관 게시글

투표로 게시글에 관해 피드백을 해주시면 많은 도움이 됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요. 

Comments

번호 제목 글쓴이 날짜 조회
72 과연 양방향매매로 수익낼 수가 있는가… 댓글+1 담운 2020.05.14 2067
71 [해외선물] 실시간 시세신청 안내-지… 담운 2020.05.11 639
70 해외선물 실시간 시세 무료로 볼 수 … 담운 2020.05.10 1083
69 DB금융투자, 수수료 혜택 등 해외선… 담운 2020.04.02 567
68 위험 고지 담운 2020.03.31 569
67 리스크 고지 담운 2020.03.11 552
66 해외선물 증거금 담운 2019.10.20 831
65 CME E-micro 담운 2019.10.20 824
64 파생상품 양도소득세 확정신고 안내 담운 2019.09.25 857
63 주식, 암호화폐, 해외주식 세금 비교 담운 2019.09.13 881
62 해외선물옵션 API 시세 유료화 정책… 담운 2019.08.28 1864
61 Github에 ssh키 생성하고 등록… 담운 2019.06.08 1195
60 github-white-logo-70… 담운 2019.06.08 1229
59 ssh-key 생성 및 github,… 담운 2019.06.08 1713
58 Git 서버 - SSH 공개키 만들기 담운 2019.06.08 1351
57 Nodejs로 구현한 서비스를 Caf… 담운 2019.06.08 2999
56 GitHub SSH 키 생성 및 등록… 담운 2019.06.08 1527
55 기타 Git 명령어(cherry-pi… 담운 2019.06.08 1017
열람중 Merge와 Rebase 담운 2019.06.08 1104
53 Git 브랜치(Branch) 관리 담운 2019.06.08 1339
52 Git commit 수정하기, dif… 담운 2019.06.08 1167
51 Github 사용하기, remote,… 담운 2019.06.08 1642
50 Git 저장소 생성(init), 최초… 담운 2019.06.08 1237
49 Git 설치와 사용법(Git Bash… 담운 2019.06.08 1298
48 node.js git 사용법 담운 2019.06.08 1454
47 Windows에서 git 및 node… 담운 2019.06.08 1387
46 Nodejs로 구현한 서비스를 Caf… 담운 2019.06.08 1249
45 Git 활용 (기본적인 사용법) 담운 2019.06.08 1258
44 cafe24 nodejs git 저장… 담운 2019.06.08 1865
43 카페24 node.js 접속준비 담운 2019.06.08 1804
42 cafe24 node.js git 사… 담운 2019.06.08 3433
41 GitHub - 소스트리(Source… 담운 2019.06.07 1824
40 Sourcetree 설치 가이드 담운 2019.06.07 1103
39 [Git] 소스트리 (SourceTr… 담운 2019.06.07 1395
38 GitLab 업무환경 구성 가이드 담운 2019.06.07 1339
37 Git :: 소스트리(SourceTr… 담운 2019.06.07 1261
36 cafe24 에서 nodejs hos… 담운 2019.06.06 1758
35 카페24 node.js 접속준비 담운 2019.06.06 2712
34 카페24에서 Node.js 서버로 A… 담운 2019.06.06 1466
33 ssh 키 인증 방식으로 로그인하기 담운 2019.06.06 1436