한 지점에서 다른 지점으로 파일을 선택적으로 병합하려면 다음을 실행하십시오.
git merge --no-ff --no-commit branchX
branchX
현재 브랜치로 병합하려는 브랜치가 어디에 있습니까 ?
이 --no-commit
옵션은 실제로 커밋하지 않고 Git에 의해 병합 된 파일을 준비합니다. 이렇게하면 병합 된 파일을 수정할 수 있지만 원하는대로 커밋 할 수 있습니다.
파일 병합 방법에 따라 다음과 같은 네 가지 경우가 있습니다.
1) 당신은 진정한 합병을 원합니다.
이 경우 Git이 자동으로 병합 한 방식으로 병합 된 파일을 수락 한 다음 커밋합니다.
2) 병합하고 싶지 않은 파일이 있습니다.
예를 들어, 현재 분기에 버전을 유지하고 병합하려는 분기의 버전을 무시하려고합니다.
현재 분기에서 버전을 선택하려면 다음을 실행하십시오.
git checkout HEAD file1
이것은 file1
현재 브랜치에서 버전을 검색하고 file1
Git에 의해 자동 병합 된 것을 덮어 씁니다 .
3) branchX의 버전을 원할 경우 (진정한 병합이 아님).
운영:
git checkout branchX file1
이것은 Git에 의해 자동 병합 된 file1
in branchX
및 덮어 쓰기 버전을 검색합니다 file1
.
4) 마지막 경우는에서 특정 병합 만 선택하려는 경우입니다 file1
.
이 경우 수정 된 내용을 file1
직접 편집 하고 원하는 버전으로 업데이트 file1
한 다음 커밋 할 수 있습니다.
Git이 파일을 자동으로 병합 할 수 없으면 파일을 " 병합되지 않은 " 것으로보고 하고 충돌을 수동으로 해결해야하는 사본을 생성합니다.
예제를 통해 더 자세히 설명하기 위해 branchX
현재 브랜치 로 병합하고 싶다고 가정 해 봅시다 .
git merge --no-ff --no-commit branchX
그런 다음 git status
명령을 실행하여 수정 된 파일의 상태를보십시오.
예를 들면 다음과 같습니다.
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
어디에서 file1
, file2
그리고 file3
성공적으로 자동 합병이 자식 파일입니다.
이것이 의미하는 것은 master
및 branchX
세 파일 모두에 대한 변경 사항이 충돌없이 함께 결합되었다는 것입니다.
git diff --cached
; 를 실행하여 병합이 수행 된 방식을 검사 할 수 있습니다 .
git diff --cached file1
git diff --cached file2
git diff --cached file3
병합이 바람직하지 않은 것을 발견하면
- 파일을 직접 편집하십시오
- 저장
git commit
병합하지 않고 file1
현재 분기에서 버전을 유지하려는 경우
운영
git checkout HEAD file1
병합하지 않고 file2
버전 만 원하는 경우branchX
운영
git checkout branchX file2
당신이 원하는 경우 file3
자동으로 병합 할, 아무것도하지 않습니다.
Git은 이미이 시점에서 병합했습니다.
file4
위의 Git 병합 실패입니다. 이는 동일한 라인에서 발생하는 두 가지 모두에 변경이 있음을 의미합니다. 여기서 충돌을 수동으로 해결해야합니다. 파일을 직접 편집하거나 원하는 브랜치에서 버전에 대한 체크 아웃 명령을 실행하여 병합 된 내용을 버릴 수 있습니다 file4
.
마지막으로 잊지 마세요 git commit
.