자식에서 '둘 다 추가'병합 충돌을 해결 하시겠습니까?


138

나는 git에서 rebasing하고 있는데, 하나의 충돌은 '둘 다 추가되었습니다'입니다. 즉, 정확히 동일한 파일 이름이 내 지점과 rebasing하는 지점에서 독립적으로 추가되었습니다. git status나에게 말한다 :

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

내 질문은 어떻게 해결할 수 있습니까? 병합 도구를 사용해야합니까, 아니면 명령 줄에서 바로 수행 할 수있는 방법이 있습니까? 그렇다면 git rm src/MyFile.csgit은 제거하려는 파일 버전과 유지할 파일 버전을 어떻게 알 수 있습니까?

답변:


139

당신이 사용하는 경우 git rmgit 하면 인덱스에서 해당 경로의 모든 버전을 제거하므로 해결 작업으로 버전이 없어집니다.

git checkout --ours src/MyFile.cs리베이스 할 지점 git checkout --theirs src/MyFile.cs에서 버전을 선택 하거나 리베이스 할 지점에서 버전을 선택할 수 있습니다 .

블렌드를 원하면 병합 도구를 사용하거나 수동으로 편집해야합니다.


1
감사. 그리고 병합 도구가 작동하지 않는 이유는 git이 병합을 위해 .LOCAL 및 .REMOTE 파일을 생성하지만 .BASE 파일은 생성하지 않기 때문입니다. 빈 .BASE 파일을 만들어야한다고 생각합니다. 빈 .BASE 파일을 수동으로 만들면 병합 도구가 제대로 작동합니다.
Jez

1
@Jez :이 글타래를 보세요
CB Bailey

1
그래서 이것이 최신 버전의 git에서 수정 될 것이라고 말하고 있습니까?
Jez

1
@Jez : git 버전> = 1.7.9.1에 있습니다. git.kernel.org/?p=git/…
CB Bailey

21
@ Tom 답변에서 : 수행 할 때 ... git checkout --ours someFile git 상태를 수행 할 때 아무것도하지 않은 것처럼 보일 수 있습니다. 나중에이 작업을 수행해야합니다. git add someFile git status
pec

72

때로는 파일의 출처를 식별하기 위해 --theirs--ours옵션을 사용하여 혼동 되는 경우가 있습니다. 대부분의 시간은 내가 참조하는 지점에있을 것입니다 --theirs.

당신은 또한 사용할 수 있습니다 git checkout <tree-ish> -- src/MyFile.cs

가 어디 <tree-ish>분기 이름 중 하나를 교체하거나 할 수 커밋 ID를 사용하면 유지하고자하는 파일이 포함되어 있습니다.

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs


42

할 때 ...

git checkout --ours someFile

자식 상태를 수행 할 때 아무것도하지 않은 것처럼 보일 수 있습니다.

나중에이 작업을 수행해야합니다.

git add someFile
git status
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.