git merge 명령 의 세 가지 상황 을 자세히 설명 합 니 다.

6031 단어 git.merge
1.git merge 명령 에 적용 되 는 세 가지 상황
1.1"빨리 들 어가 기"(충돌 없 음)
마스터 분기
현재 기본 master 분기 만 있 고 세 번 제출 했다 고 가정 하면 B0,B1,B2 는 모두 제출 대상 이다.

우선 매번 발생 하 는 제출 대상 에 지난번 제출 대상(부모 대상)을 가리 키 는 지침 이 포함 되 어 있 기 때문에 그림 에서 B0,B1,B2 사이 의 화살 표 는 지침 이 부모 대상 을 가리 키 는 뜻 이 고 진정한 제출 순 서 는 B0 에서 B1 에서 B2 까지 이다.동시에 마스터 포인터 가 최신 제출 B2 를 가리 키 고 있 습 니 다.
또한 Git 에는 HEAD 라 는 특수 한 지침 이 있 습 니 다.이것 은 지침 으로 현재 있 는 로 컬 지점 을 가리 키 고 있 습 니 다.(HEAD 를 현재 지점 의 별명 으로 상상 할 수 있 습 니 다.)
dev 새 분기
현재 새 지점 을 만 들 고 새 지점 으로 전환 합 니 다.

$ git checkout -b dev
Switched to a new branch 'dev'
그것 은 다음 두 명령 의 약자 이다.

$ git branch dev
$ git checkout dev

B2 에서 dev 를 만 들 기 때문에 새 분기 dev 는 B2 를 가리 키 고 있 습 니 다.또한 분기 master 에서 분기 dev 로 전환 하기 때문에 HEAD 는 현재 분기 dev 를 가리 키 고 있 습 니 다.
dev 지점 에서 작업 하고 2 회 제출:

dev 와 master 통합
분기 dev 작업 이 끝나 면 분기 master 로 전환 한 다음 dev 를 master 에 통합 합 니 다.

$ git checkout master
Switched to branch 'master'
$ git merge dev
Merge made by the 'recursive' strategy.
 test-2.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
현재 master 분기 가 가리 키 는 제출 은 현재 제출(dev 의 제출)의 직접 상류 이기 때문에 Git 은 master 포인 터 를 간단하게 앞으로 이동 합 니 다.다시 말 하면 두 가 지 를 합병 하려 고 할 때 한 가 지 를 따라 내 려 가면 다른 가 지 를 얻 을 수 있다 면 Git 은 두 가 지 를 합병 할 때 간단하게 지침 을 앞으로 밀고 나 갈 수 밖 에 없다.이런 상황 에서 합병 작업 은 해결 해 야 할 이견 이 없 기 때문이다.이것 을'빠 른 진행(fast-forward)'이 라 고 한다.합병 결 과 는 다음 과 같다.

마지막 으로 dev 지점 을 삭제 할 수 있 습 니 다.더 이상 필요 하지 않 기 때 문 입 니 다.master 지점 은 이미 같은 위 치 를 가리 키 고 있 습 니 다.-d 옵션 이 있 는 git branch 명령 을 사용 하여 가 지 를 삭제 할 수 있 습 니 다:

$ git branch -d dev
1.2"빨리 들 어가 기"가 아 닌 다른 파일 을 수정 합 니 다.(충돌 없 음)
새 분기 dev 에서 B3 를 한 번 제출 하고 분기 master 로 돌아 가 B4 를 한 번 더 제출 합 니 다.

여 기 는 git merge 로 두 가지 상황 으로 나 뉘 는데 지금 은 첫 번 째 상황 을 말 합 니 다.
master 분기 와 dev 분기 의 공공 조상 B2 이후 master 와 dev 의 제출 은 서로 다른 파일 이나 같은 파일 의 다른 부분 을 수정 한 것 입 니 다.Git 은 이 를 합 칠 수 있 습 니 다.(예 를 들 어 원래 test-1 과 test-2 두 개의 파일 이 있 었 는데 B4 는 test-1 파일 을 수 정 했 고 B3 는 test-2 파일 을 수정 한 다음 에 두 개의 가 지 를 합 쳤 다.)

$ git checkout master
Switched to branch 'master'
$ git merge dev
Merge made by the 'recursive' strategy.
 test-2.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
합병 은 성공 적 이다.
이런 상황 이 발생 했 을 때 Git 은 두 갈래 의 끝 에서 가리 키 는 스냅 샷(B3 와 B4)과 이 두 갈래 의 공공 조상(B2)을 사용 하여 간단 한 3 자 합병 을 한다.통합 후 master 자동 commt 가 한 번 제출 되 었 고 제출 B5 가 생 겼 습 니 다.B5 의 결 과 는 3 자 합병 결과 다.합병 결 과 는 다음 과 같다.

마지막 으로 합병 이 완료 되 었 습 니 다.당신 은 더 이상 dev 분기 가 필요 하지 않 습 니 다.지금 너 는 이 가 지 를 삭제 할 수 있다.

$ git branch -d dev
1.3"빨리 들 어가 기"가 아니 라 같은 파일 을 수정 합 니 다.(충돌 이 있다
새 분기 dev 에서 B3 를 한 번 제출 하고 분기 master 로 돌아 가 B4 를 한 번 더 제출 합 니 다.

위 에서 말 한 것 은 첫 번 째 상황 이 고 지금 은 두 번 째 상황 을 말한다.
master 분기 와 dev 분기 의 공공 조상 B2 이후 master 와 dev 의 제출 은 같은 파일 의 같은 부분 에 대해 서로 다른 수정 을 했 기 때문에 Git 은 깨끗하게 합 칠 수 없습니다.(예 를 들 어 원래 test-1 과 test-2 두 개의 파일 이 있 었 는데 B4 는 test-1 파일 을 수 정 했 고 B3 는 test-1 파일 의 같은 부분 을 수정 한 다음 에 두 개의 가 지 를 합 쳤 다.)

$ git checkout master
Switched to branch 'master'
$ git merge dev
Auto-merging test-1.txt
CONFLICT (content): Merge conflict in test-1.txt
Automatic merge failed; fix conflicts and then commit the result.
합병 은 실패했다.
이 때 Git 은 통합 을 했 지만 자동 으로 새로운 통합 제출 을 만 들 지 않 았 습 니 다.Git 은 합병 으로 인 한 충돌 을 해결 하기 위해 잠시 멈 출 것 입 니 다.병합 충돌 후 임의의 시간 에 git status 명령 을 사용 하여 병합 충돌 을 포함 하여 병합 되 지 않 은 파일 을 볼 수 있 습 니 다.

$ git status
On branch master
You have unmerged paths.
 (fix conflicts and run "git commit")
 (use "git merge --abort" to abort the merge)

Unmerged paths:
 (use "git add <file>..." to mark resolution)

    both modified:  test-1.txt

no changes added to commit (use "git add" and/or "git commit -a")
합병 충돌 을 포함 하여 해결 해 야 할 모든 파일 은 병합 되 지 않 은 상태 로 표 시 됩 니 다.Git 은 충돌 이 있 는 파일 에 표준 충돌 해결 표 시 를 추가 합 니 다.충돌 이 포 함 된 파일 을 열 고 충돌 을 수 동 으로 해결 할 수 있 습 니 다.충돌 이 발생 한 파일 은 아래 와 같은 특수 구간 을 포함 합 니 다.

This is test-1.
update test-1.
add test-1.
<<<<<<< HEAD
test master.
=======
test dev.
>>>>>>> dev
여기 HEAD 는 지시 한 버 전(즉,master 분기 가 있 는 위 치 를 표시 합 니 다.merge 명령 을 실행 할 때 이 분기 가 검출 되 었 기 때 문 입 니 다)은 이 구간 의 상반부(=====의 상반부)에 있 고 dev 분기 가 지시 한 버 전 은======의 하반부 에 있 습 니 다.충돌 을 해결 하기 위해 서 는 유=======분 단 된 두 부분 중 하 나 를 사용 하거나 스스로 이 내용 을 합병 할 수 있 습 니 다.예 를 들 어 이 내용 을 아래 의 모습 으로 바 꾸 어 충돌 을 해결 할 수 있다.

This is test-1.
update test-1.
add test-1.
test master.
test dev.
그리고 수 동 으로 제출:

$ git add .
$ git commit -m "connection"
[master f7daa6b] connection
그리고 충돌 은 해결 되 었 다.합병 결 과 는 다음 과 같다.

마지막 으로 합병 이 완료 되 었 습 니 다.당신 은 더 이상 dev 분기 가 필요 하지 않 습 니 다.지금 너 는 이 가 지 를 삭제 할 수 있다.

$ git branch -d dev
git merge 명령 애플 리 케 이 션 에 대한 세 가지 상황 을 자세히 설명 하 는 글 은 여기까지 입 니 다.더 많은 git merge 명령 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기