당김 동안 변경 사항에 찬성하여 Git 병합 충돌 해결 잠시 동안 모든 충돌 을

변경 사항을 가져 오기 위해 git merge 충돌을 어떻게 해결합니까?

기본적으로 충돌없는 git mergetool모든 변경 사항을 유지하면서 잠시 동안 모든 충돌 을 거치지 않고 작업 트리에서 충돌하는 모든 변경 사항을 제거해야합니다 . 나중에 당기지 않고 당기는 것이 좋습니다.



답변

git pull -s recursive -X theirs <remoterepo or other repo>

또는 간단히 기본 저장소의 경우 :

git pull -X theirs

이미 충돌 상태 인 경우 …

git checkout --theirs path/to/file


답변

재귀적인 “그들의”전략 옵션을 사용할 수 있습니다 .

git merge --strategy-option theirs

로부터 사람 :

ours
    This option forces conflicting hunks to be auto-resolved cleanly by
    favoring our version. Changes from the other tree that do not
    conflict with our side are reflected to the merge result.

    This should not be confused with the ours merge strategy, which does
    not even look at what the other tree contains at all. It discards
    everything the other tree did, declaring our history contains all that
    happened in it.

theirs
    This is opposite of ours.

참고 : man 페이지 말한대로의 “우리”병합 전략 옵션 은 “우리의”병합 매우 다르다 전략 .


답변

이미 충돌 상태에 있고 모든 것을 수락하려면 다음을 수행하십시오.

git checkout --theirs .
git add .

당신이 반대를하고 싶다면 :

git checkout --ours .
git add .

이것은 매우 과감하므로 수행하기 전에 이와 같이 모든 것을 지우고 싶은지 확인하십시오.


답변

좋아, 내가 방금 있었던 시나리오를 상상해보십시오.

당신은 시도 merge, 또는 어쩌면 cherry-pick, 당신은 함께 중지하고

$ git cherry-pick 1023e24
error: could not apply 1023e24... [Commit Message]
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

이제 충돌 된 파일을보고 변경 사항을 유지하고 싶지 않습니다. 위의 경우 파일이 IDE에 자동 추가 된 줄 바꿈으로 충돌했습니다. 변경 사항을 취소하고 변경 사항을 승인하려면 가장 쉬운 방법은 다음과 같습니다.

git checkout --theirs path/to/the/conflicted_file.php
git add path/to/the/conflicted_file.php

이것의 반대는 (들어오는 버전을 당신의 버전으로 덮어 쓰는 것입니다)

git checkout --ours path/to/the/conflicted_file.php
git add path/to/the/conflicted_file.php

놀랍게도, 나는이 답변을 인터넷에서 매우 쉽게 찾을 수 없었습니다.


답변

git pull -X theirs대답은 못생긴 병합 커밋을 만들거나

오류 : 다음 파일에 대한 로컬 변경 사항을 병합하여 덮어 씁니다.

예를 들어 항상 원점의 미러 여야하는 클라이언트와 같이 리포지토리의 파일에 대한 로컬 수정 사항을 단순히 무시하려면 다음을 실행하십시오 ( master원하는 분기로 교체 ).

git fetch && git reset --hard origin/master

어떻게 작동합니까? 하지만 병합 git fetch하지 않습니다git pull . 그런 다음 git reset --hard작업 트리를 마지막 커밋과 일치시킵니다. 리포지토리의 파일에 대한 모든 로컬 변경 내용은 삭제 되지만 새 로컬 파일은 그대로 유지됩니다.


답변

git merge 후 충돌이 발생하고 자신 또는 자신이 원하는 경우

git checkout --theirs .
git checkout --ours .


답변

특정 분기의 버전과의 모든 충돌을 해결하려면

git diff --name-only --diff-filter=U | xargs git checkout ${branchName}

따라서 이미 병합 상태에 있고 충돌하는 파일의 마스터 버전을 유지하려는 경우 :

git diff --name-only --diff-filter=U | xargs git checkout master