Git은 모든 파일에 대해 –ours /-theirs를 사용하여 충돌을 해결합니다. 모든 파일에

체크 아웃 사용하는 모든 파일에 대한 분쟁 해결 할 수있는 방법이 있나요 --ours--theirs? 개별 파일에 대해 할 수 있지만 모두를 위해 할 수있는 방법을 찾을 수 없다는 것을 알고 있습니다.



답변

작업 디렉토리를 통해 grep하고 xargs 명령을 통해 출력을 보냅니다.

grep -lr '<<<<<<<' . | xargs git checkout --ours

또는

grep -lr '<<<<<<<' . | xargs git checkout --theirs

작동 방식 : grep현재 디렉토리 ( .) 및 하위 디렉토리 ( -r플래그)에있는 모든 파일을 반복적으로 검색 하여 충돌 마커 ( ‘<<<<<<<‘문자열)를 찾습니다.

-l또는 --files-with-matches플래그는 출력 문자열이 발견 된 경우에만 파일 이름을 GREP됩니다. 첫 번째 일치 후 검색이 중지되므로 일치하는 각 파일은 한 번만 출력됩니다.

일치하는 파일 이름은 파이프 된 입력 스트림을 또는에 대한 개별 인수로 분할하는 유틸리티 인 xargs파이프 됩니다.git checkout --ours--theirs

이 링크에서 자세히 알아보십시오 .

매번 명령 줄에 입력해야하는 것은 매우 불편할 수 있으므로 자주 사용하는 경우 선택한 셸에 대한 별칭 을 만드는 것이 나쁘지 않을 수 있습니다 . Bash 는 일반적인 것입니다. .

이 방법은 최소한 Git 버전 2.4.x 에서 작동해야합니다.


답변

당신은 할 수 -Xours또는 -Xtheirsgit merge뿐만 아니라. 그래서:

  1. (예를 들어 함께 현재 병합을 중단 git reset --hard HEAD)
  2. 선호하는 전략을 사용하여 병합 ( git merge -Xours또는 git merge -Xtheirs)

면책 조항 : 물론 하나의 옵션 만 선택할 수 있습니다. -Xours또는 -Xtheirs, 물론 파일별로 이동해야하는 다른 전략을 사용하십시오.

에 대한 방법이 있는지는 모르겠지만 checkout솔직히별로 유용하지 않다고 생각합니다. 체크 아웃 명령을 사용하여 전략을 선택하는 것은 다른 파일에 대해 다른 솔루션을 원하는 경우 유용하고 그렇지 않으면 병합 전략 접근 방식을 사용합니다.


답변

git checkout --[ours/theirs] .당신이 모든 갈등의 근원에있는 한 당신이 원하는 것을 할 것입니다. ours / theirs는 병합되지 않은 파일에만 영향을 미치므로 grep / find / etc 충돌을 구체적으로 수행 할 필요가 없습니다.


답변

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

일을 할 것 같습니다. 이 작업을 수행하려면 git repo의 루트 디렉토리로 이동해야합니다.


답변

다른 사람이 한 브랜치 (예 : 마스터)의 모든 것을 다른 브랜치의 내용으로 덮어 쓰려는 경우 더 쉬운 방법이 있습니다.

git merge origin/master --strategy=ours

https://stackoverflow.com/a/1295232/560114 덕분에

또는 다른 방법으로 “git merge -s ours”의 “그들의”버전이 있습니까?를 참조하십시오.


답변

function gitcheckoutall() {
    git diff --name-only --diff-filter=U | sed 's/^/"/;s/$/"/' | xargs git checkout --$1
}

.zshrc 파일 에이 기능을 추가했습니다 .

다음과 같이 사용하십시오.
gitcheckoutall theirs또는gitcheckoutall ours