Git 분기 의 새로 만 들 기 및 병합
지금 우 리 는 간단 한 분기 와 합병 의 예 를 살 펴 보 자.실제 업무 에서 도 대체적으로 이런 업무 절 차 를 사용 할 것 이다.
우선,우 리 는 당신 이 프로젝트 에서 즐겁게 일 하고 있다 고 가정 하고 이미 몇 차례 업 데 이 트 를 제출 했다(그림 3-10 참조).
그림 3-10.짧 은 제출 역사
이제 문제 추적 시스템 의\#53 문 제 를 고치 기로 했 습 니 다.설명 에 따라 Git 은 특정한 문제 추적 시스템 과 다르다.여기 서 해결 해 야 할 문 제 를 설명 하기 위해 서 새로 만 든 가 지 를 iss 53 이 라 고 지 었 습 니 다.이 지점 으로 새로 만 들 고 전환 하려 면
git checkout
을 실행 하고-b
인 자 를 추가 하 십시오.
$ git checkout -b iss53
Switched to a new branch 'iss53'
이것 은 아래 두 명령 을 집행 하 는 것 과 같다.
$ git branch iss53
$ git checkout iss53
그림 3-11 은 이 명령 의 집행 결 과 를 나타 낸다.그림 3-11.새 분기 의 지침 을 만 들 었 습 니 다.
이 어 복구 문 제 를 시도 하기 시 작 했 습 니 다.몇 번 의 업 데 이 트 를 제출 한 후에
iss53
분기 의 지침 도 앞으로 추 진 될 것 입 니 다.이것 이 바로 현재 분기(다시 말 하면 현재HEAD
지침 이 가리 키 고 있 기 때 문 입 니 다iss53
.그림 3-12 참조):
$ vim index.html
$ git commit -a -m 'added a new footer [issue 53]'
그림 3-12.iss 53 분 지 는 업무 진행 에 따라 앞으로 추진 된다.
지금 너 는 그 사이트 문제 의 긴급 전 화 를 받 았 으 니 즉시 수리 해 야 한다.Git 이 있 으 면 이 패 치 와
iss53
의 수정 사항 을 동시에 발표 할 필요 도 없고,서버 에 패 치 를 만 들 거나 발표 하기 전에 이 수정 사항 을 복원 하 는 데 많은 힘 을 들일 필요 도 없습니다.유일 하 게 필요 한 것 은 분기 전환master
입 니 다.그러나 그 전에 임시 저장 소 나 작업 디 렉 터 리 에 제출 되 지 않 은 수정 사항 을 주의 하 십시오.이것 은 곧 검출 될 분기 와 충돌 하여 Git 이 분기 전환 을 막 을 것 입 니 다.분기 전환 을 할 때 는 깨끗 한 작업 영역 을 유지 하 는 것 이 좋 습 니 다.잠시 후 이 문 제 를 돌아 가 는 방법 몇 가 지 를 소개 하 겠 습 니 다.현재 모든 수정 사항 이 제출 되 었 기 때문에 다음은 정상적으로
master
분기 로 전환 할 수 있 습 니 다.
$ git checkout master
Switched to branch 'master'
이 때 작업 목록 의 내용 은 당신 이 문 제 를 해결 하기 전과 똑 같 습 니 다.긴급 수리 에 집중 할 수 있 습 니 다.이 점 은 명심 할 필요 가 있다.Git 은 작업 디 렉 터 리 의 내용 을 어떤 지점 이 검출 되 었 을 때 가리 키 는 제출 대상 의 스냅 샷 으로 복원 할 것 이다.디 렉 터 리 의 내용 이 제출 했 을 때 와 똑 같 도록 파일 을 자동 으로 추가 하고 삭제 하 며 수정 합 니 다.이제 긴급 수 리 를 해 야 합 니 다.우 리 는 해결 할 때 까지 긴급 보수 지점
hotfix
을 만 들 었 다.(그림 3-13 참조)
$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email address'
[hotfix 3a0874c] fixed the broken email address
1 files changed, 1 deletion(-)
그림 3-13.hotfix 지점 은 master 지점 에서 분 화 된 것 이다.
수리 가 성공 적 이 었 는 지 확인 하고
master
분기 로 돌아 가 합 쳐 생산 서버 에 발표 할 필요 가 있다.git merge
명령 으로 합병 하기:
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
README | 1 -
1 file changed, 1 deletion(-)
합병 시'Fast forward'라 는 힌트 가 나 왔 음 을 주의 하 세 요.현재master
분기 가 있 는 제출 대상 은 병합 할hotfix
분기 의 직접 상류 이기 때문에 Git 은master
분기 지침 을 직접 오른쪽으로 이동 하면 됩 니 다.한 갈래 를 따라 내 려 가면 다른 갈래 에 도달 할 수 있다 면 Git 은 두 가 지 를 합 칠 때 간단하게 포인 터 를 오른쪽으로 이동 할 수 밖 에 없다.이런 단선 의 역사 가 지 는 해결 해 야 할 이견 이 없 기 때문에 이러한 합병 과정 을 빠 른 전진(Fast forward)이 라 고 할 수 있다.현재 최신 수정 사항 은 현재
master
지점 이 가리 키 는 제출 대상 에 있 습 니 다.생산 서버 에 배치 할 수 있 습 니 다(그림 3-14 참조).그림 3-14.합병 후 master 분기 와 hotfix 분기 가 같은 위 치 를 가리 키 고 있 습 니 다.
그 아주 중요 한 보수 가 발 표 된 후에 당신 은 방 해 받 기 전의 일 로 돌아 가 고 싶 습 니 다.현재
hotfix
지점 과master
모두 같은 제출 대상 을 가리 키 기 때문에hotfix
역사적 사명 을 완 수 했 으 니 삭제 할 수 있다.git branch
의-d
옵션 을 사용 하여 삭제 작업 을 수행 합 니 다.
$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).
현재 완료 되 지 않 은\#53 문제 복구 지점 으로 돌아 가 계속 작업(그림 3-15):
$ git checkout iss53
Switched to branch 'iss53'
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+)
그림 3-15.iss 53 가 지 는 영향 을 받 지 않 고 계속 추진 할 수 있다.
주의해 야 할 것 은 이전
hotfix
분기 의 수정 내용 이 아직iss53
에 포함 되 지 않 았 다 는 점 이다.이번 보수 가 필요 하 다 면git merge master
master 분기iss53
를 합 칠 수 있 습 니 다.또는iss53
이 완 료 된 후에iss53
분기 의 업 데 이 트 를 합병 합 니 다master
.원 격 분기 삭제:
$ git push origin --delete <BranchName>
원 격 분기 보기:
$ git branch -a
분기 적 합병 문제\#53 관련 작업 이 완료 되면 분기
master
를 합 칠 수 있 습 니 다.실제 작업 은 앞의 합병hotfix
과 분기 차이 가 많 지 않 습 니 다.master
분기 로 돌아 가 고 실행git merge
명령 은 합병 할 가 지 를 지정 합 니 다.
$ git checkout master
$ git merge iss53
Auto-merging README
Merge made by the 'recursive' strategy.
README | 1 +
1 file changed, 1 insertion(+)
이번 합병 작업 의 밑바닥 실현 은 이전hotfix
의 합병 방식 과 같 지 않 음 을 주의 하 십시오.이번 개발 역 사 는 더 일찍 갈 라 지기 시 작 했 으 니까.현재master
분기 가 가리 키 는 제출 대상(C4)은iss53
분기 의 직접적인 조상 이 아니 기 때문에 Git 은 추가 처 리 를 해 야 합 니 다.예 를 들 어 Git 은 두 갈래 의 끝(C4 와 C5)과 그들의 공동 조상(C2)으로 간단 한 3 자 합병 계산 을 한다.그림 3-16 은 Git 이 병합 에 사용 할 세 개의 제출 대상 을 빨간색 상자 로 표시 합 니 다.그림 3-16.Git 은 분기 합병 을 위해 가장 좋 은 동원 합병 점 을 자동 으로 식별 한다.
이번에 Git 은 간단하게 분기 포인 터 를 오른쪽으로 이동 하지 않 고 세 측 이 합 친 결과 에 대해 새로운 스냅 샷 을 만 들 고 제출 대상(C6)을 자동 으로 만 듭 니 다(그림 3-17 참조).이 제출 대상 은 두 조상(C4 와 C5)이 있 는 비교적 특수 하 다.
특히 Git 은 어떤 공동 조상 이 가장 좋 은 합병 기반 인지 스스로 판단 할 수 있다.CVS 나 Subversion(1.5 이후 버 전)과 달리 개발 자가 수 동 으로 통합 기반 을 지정 해 야 합 니 다.그래서 Git 의 통합 작업 은 다른 시스템 보다 훨씬 간단 하 다.
그림 3-17.Git 은 통합 결 과 를 포함 하 는 제출 대상 을 자동 으로 만 들 었 다.
이전의 업무 성과 가
master
로 합 쳐 졌 으 니iss53
소 용이 없다.이 문 제 를 삭제 하고 문제 추적 시스템 에서 닫 을 수 있 습 니 다.
$ git branch -d iss53
충돌 시 분기 통합 합병 작업 이 이렇게 순 조 롭 지 않 을 때 도 있다.만약 서로 다른 지점 에서 같은 파일 의 같은 부분 을 수정 하면 Git 은 둘 을 깨끗하게 합 칠 수 없다.만약 당신 이 문 제 를 해결 하 는 과정 에서
hotfix
에서 수정 한 부분 을 수정 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Git 이 합병 을 했 지만 제출 하지 않 았 습 니 다.충돌 이 해결 되 기 를 기다 리 는 것 이 멈 출 것 입 니 다.어떤 파일 이 합병 할 때 충돌 하 는 지 보 려 면git status
으로 찾 아 볼 수 있 습 니 다.
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
충돌 이 해결 되 지 않 은 파일 은 병합 되 지 않 은 상태 로 표 시 됩 니 다.Git 은 충돌 이 있 는 파일 에 표준 충돌 해결 표 시 를 추가 합 니 다.충돌 을 수 동 으로 찾 아서 해결 할 수 있 습 니 다.이 파일 은 아래 와 같은 부분 을 포함 하고 있 습 니 다:
<<<<<<< HEAD
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
please contact us at [email protected]
</div>
>>>>>>> iss53
=======
분 리 된 상반부,HEAD
(즉master
분기,merge
명령 을 실행 할 때 전환 한 분기)의 내용 을 볼 수 있 으 며,하반 부 는iss53
분기 에 있 는 내용 입 니 다.충돌 을 해결 하 는 방법 은 둘 중 하 나 를 선택 하거나 당신 이 직접 통합 하 는 것 이 아 닙 니 다.예 를 들 어 당신 은 이 내용 을 다음 과 같이 바 꾸 어 해결 할 수 있 습 니 다.
<div id="footer">
please contact us at [email protected]
</div>
이 해결 방안 은 각각 두 가지 중 일 부 를 채 택 했 고 나 는<<<<<<<
,=======
과>>>>>>>
이 줄 들 을 삭제 했다.모든 파일 의 충돌 을 해결 한 후 실행git add
은 해 결 된 상태 로 표시 합 니 다.일단 잠 정적 으로 남 으 면 충돌 이 해결 됐다 는 뜻 이기 때문이다.만약 당신 이 그래 픽 인터페이스 가 있 는 도구 로 이러한 문 제 를 해결 하고 싶다 면 실행git mergetool
하 십시오.이것 은 시각 화 된 합병 도 구 를 호출 하여 모든 충돌 을 해결 하도록 유도 할 것 입 니 다.
$ git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html
Normal merge conflict for 'index.html':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (opendiff):
기본 병합 도구(Git 이 기본 으로 선택opendiff
를 사용 하지 않 으 려 면 Mac 에서 이 명령 을 실 행 했 기 때 문 입 니 다)위 에 있 는'merge tool candidates'에서 사용 가능 한 병합 도구 목록 을 찾 아 사용 하고 싶 은 도구 이름 을 입력 하 십시오.우 리 는 제7 장 에서 환경 에서 의 기본 값 을 어떻게 바 꾸 는 지 토론 할 것 이다.병합 도 구 를 종료 하면 Git 에서 병합 에 성 공 했 는 지 물 어 봅 니 다.만약 그렇다 고 대답 한다 면,그것 은 상 태 를 해결 했다 는 것 을 나타 내기 위해 관련 서 류 를 잠시 저장 할 것 이다.
모든 충돌 이 해결 되 었 는 지 확인 하기 위해 서 다시 한 번
git status
을 실행 합 니 다.
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: index.html
만족 하고 모든 충돌 이 해결 되 었 다 는 것 을 확인 하면 임시 저장 구역 에 들 어가 면git commit
으로 이번 합병 제출 을 완성 할 수 있다.제출 한 기록 의 차이 가 많 지 않 습 니 다.
Merge branch 'iss53'
Conflicts:
index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
#
앞으로 이번 합병 을 보 여 주 려 는 사람들 에 게 편 의 를 주 려 면 이 정 보 를 수정 하고 더 많은 합병 세부 사항 을 제공 할 수 있다.예 를 들 어 당신 이 어떤 변경 을 했 는 지,그리고 이렇게 한 원인.때때로 판결 충돌 의 이 유 는 직접적 이거 나 뚜렷 하지 않 으 므 로 약간 주석 을 달 필요 가 있다.총결산
여기 서 Git 분기 의 새로 만 들 기 및 통합 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Git 분기 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
브랜치 병합(Visual studio 2017 사용)의 계속입니다. 기능 추가를 위한 브랜치를 작성하고, 기능 추가한 후, 그 내용을 develop 브랜치에 병합해 봅니다. 1. 새롭게 「add1」라고 하는 브랜치를 작성 2. 브랜치 "add1"을 선택한 상태에서 M...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.