체크 아웃 --ours
및 --theirs
을 사용하여 모든 파일의 충돌을 해결할 수 있습니까? 나는 당신이 개별 파일을 위해 그것을 할 수 있지만 모든 것을 위해 그것을 할 수있는 방법을 찾을 수 없다는 것을 안다.모든 파일에 대해 --ours/- theirs를 사용하여 Git 해결 충돌
답변
그냥 작업 디렉토리를 통해 grep을하고 xargs를 명령을 통해 출력을 보내
grep -lr '<<<<<<<' . | xargs git checkout --ours
또는이 어떻게 작동
grep -lr '<<<<<<<' . | xargs git checkout --theirs
: grep
은 (현재 디렉토리에있는 모든 파일을 검색합니다 .
) 및 서브 디렉토리를 반복적으로 찾습니다 (-r
플래그). 충돌 표시기 (문자열 '< < < < < < < ')
-l
또는 --files-with-matches
플래그로 인해 문자열이 발견 된 파일 이름 만 출력됩니다. 첫 번째 일치 후 검색이 중지되므로 일치하는 각 파일은 한 번만 출력됩니다.
일치 된 파일 이름은 다음 piped, xargs에 있습니다 git checkout --ours
또는 --theirs
더 at this link에 대한 개별 인수에 파이프 입력 스트림을 분해하는 유틸리티.
매번 명령 줄에서이 값을 입력해야하는 불편 함이 있으므로 자신이 많이 사용하는 것으로 밝혀지면 Bash을 선택하여 alias을 만드는 것이 좋지 않을 수 있습니다. 평범한 것입니다.
이 방법은 적어도 망할 놈의 버전 2.4.x
grepping 대신에 ['git diff --name-only --diff-filter = U'] (http://stackoverflow.com/a/10874862/559913)를 사용하는 것이 가능하다고 생각합니다. – Thai
또한'git status | grep 둘 다 | awk '{print $ 3}'| xargs git checkout - [theirs | ours]'. 큰 프로젝트를 가지고 있다면 grepping보다 빠릅니다. – joshbodily
@joshbodily 니스. 나는 큰 차이가 있음을 알 수있는 프로젝트가 없지만, 디렉토리의 총 수와 비교하여 파일이 거의 변경되지 않은 경우에 훨씬 더 빠를 수 있음을 알 수 있습니다. 커밋. – Dmitri
할 수 있습니다 git merge
와 -Xours
또는 -Xtheirs
뿐만 아니라 통해 작동합니다. 그래서 (git reset --hard HEAD
와 예를 들어) 현재 병합 중단
- 은 당신이 선호하는 전략 (
git merge -Xours
또는git merge -Xtheirs
)
를 사용
-Xours
또는 -Xtheirs
은 물론 파일별로 파일을 이동해야하는 다른 전략을 사용하십시오. checkout
에 대한 방법이 있는지 모르겠지만 솔직히 생각해 보면별로 유용하지 않습니다. 체크 아웃 명령으로 전략을 선택하면 다른 파일에 대한 다른 솔루션을 원한다면 유용합니다. 병합 전략 접근법.
감사합니다. 병합을 위해 '-'및 '--theirs'가 있는지 몰랐습니다. 병합을 위해서는 실제로 '-s'전략의 일부가 아니고 '-X'재귀 옵션의 일부인 것처럼 보입니다. 우리의 '-s'버전은 실제로 병합하지 않고 모든 파일을 대체하고 그 파일은 존재하지 않습니다. – exe163
v1.9.4를 사용할'- theirs' 또는'--ours'-Option은 없습니다. 접근 방법은'git merge -s recursive -Xtheirs BRANCH'입니다. – fbmd
'--theirs'와'--ours'는 git'2.2.0'과 함께 사용할 수 없습니다. 내 대답이 정확하지 않거나 이전 버전의 git 버전에서 사용 가능했다 (이 답변은 IT 시대에 상당히 오래된 것임). 올바른 접근 방식은'-X'입니다. 그에 따라 적절히 업데이트합니다. – ThanksForAllTheFish
git checkout --[ours/theirs] .
은 모든 갈등의 근원이되는 한 원하는대로 할 수 있습니다. ours/theirs는 병합되지 않은 파일에만 영향을 미치므로 grep/find/etc 충돌을 구체적으로 찾아야하지 않아도됩니다.
저에게 이것은 하위 디렉토리로 재귀하지 않는 것 같습니다. –
git diff --name-only --diff-filter=U | xargs git checkout --theirs
작업을 수행하는 것으로 보입니다. 이를 달성하기 위해서는 git repo의 루트 디렉토리로 cd해야한다.
'git checkout --ours - .'가 작동합니까? '.'는 작업 디렉토리 루트에서 적용될 때 현재 디렉토리를 의미하므로 기본적으로 전체 작업 디렉토리를 의미합니다. 그것이'--ours' 플래그와 함께 작동하는지 확신 할 수 없으며 삭제되거나 이름이 변경된 파일 충돌을 어떻게 처리 할 것인지 확신 할 수 없습니다. –
@Cupcake 성공적으로 사용했습니다. 어쩌면 그게 답이 될까요? –