2016-12-20 2 views
3

분기를 병합 할 때 명령 프롬프트에 나열된 병합 충돌을 얻는 것이 일반적입니다. 충돌이있는 파일을보고 적절한 변경을하면 문제를 해결하는 방법을 알고 있습니다. 우리는 또한 매우 유용 할 수있는 "mergetool"을 가지고 있습니다. 내가 다른 소스에서 읽은 단계를이 해결 얻을에서있다 :git merge 문제가 수정되었는지 확인하는 방법은 무엇입니까?

  • 수정
  • 푸시 이것은 아주 간단 보인다

에게 추가 충돌. 하지만 뭔가를 놓치고 고치지 않으면 어떡하지? Git은 mergetool을 사용하는 것 외에 다른 문제가 있는지 확인하는 방법을 제공합니까?

+1

해결되지 않은 것은 무엇을 말합니까? 아직도 갈등이 있다면 무엇을 의미합니까? 병합을 완료 할 수 있으면 충돌이 해결 된 것이어야합니다. – dave

+0

일단 병합을 '추가'하고 '커밋'하면, Git에게 더 이상의 변경이 필요 없다는 것을 알려줍니다. 당신이 뭔가를 놓친다면 그것은 당신의 문제입니다. 그것을 고치고 병합 커밋을 다시 시도하거나'--amend'합니다. –

+1

[Git에서 병합 충돌을 해결하는 방법] 가능한 복제본? (http://stackoverflow.com/questions/161813/how-to-resolve-merge-conflicts-in-git) –

답변

2

마 도움이되기를 바랍니다 :

git diff -S "<<<<<<< HEAD" -S "=======" -S ">>>>>>> $(git name-rev --name-only MERGE_HEAD)" HEAD 

이것은 HEAD으로 worktree의 내용을 비교를하지만 병합 마크의 세 가지 유형 중 하나 이상이 포함 된 경우 모든 출력을 보여줍니다 변화.

그래서 모든 파일이 통합되었습니다 확인하기
public void fooTheBar(Bar input) { 
<<<<<<< HEAD 
    if (input == null) { 
    throw new Exception("input cannot be null!"); 
    } 
======= 
    Console.WriteLine("preparing to foo the bar"); 
>>>>>>> develop 
    input.foo(); 
} 

, 당신의 검색해야 다음 :

예를 들어, 당신이 지점에서 병합하는 경우는 병합되지 않은 파일은 다음과 같을 수, develop라고 세 줄 :

<<<<<<< HEAD 
======= 
>>>>>>> develop 

그리고 이것은 명령에서 -S 인수가하는 것입니다.

git name-rev --name-only MERGE_HEAD 

당신이 당신의 현재 지점에 병합 된 지점의 이름을 얻을 : 항상 develop을하지 않을 것이기 때문에, 우리는 명령을 사용합니다.

(당신은 아마 하나 그 라인의 검색,하지만 세 가지가 더 강력 검색, 그리고 당신이 바로 선 중 하나를 제거하는 것을 잊었다 예 사례를 보여줍니다 수 있습니다.) 명령 이후

작업 트리를 HEAD과 비교하고 단계적 변경 사항뿐 아니라 충돌이 여전히 포함 된 파일을 git add에 기록한 경우에도 작동합니다.

+0

이것은 내가 추가하고 커밋하기 전에 내 병합 충돌을 검사하려고 할 때 참조했던 것과 더 비슷합니다. 솔직히 말해서 나는 이런 종류의 능력을 가진 git에서 기대하는 것이 무엇인지 잘 모르겠다. 그러나 이것은 미해결 된 합병을 피하는 좋은 방법 인 것처럼 보인다. – polaris

+1

'git name-rev' 트릭은 꽤 영리합니다! 사소한 문제는 하나 있는데,'git checkout -m'을 사용하여 병합 충돌을 재 작성하면 원래 기호 이름을 잃어 버리는 경향이 있습니다. 마커 셰브론을 찾는 것이 더 안전 할 수도 있습니다 (조정할 수도 있지만 조정 가능함). – torek

0

나는 모든 수동 병합이 완료되었을 때 개발자가 어떻게 알 수 있습니까?

git checkout master 
git merge dev 

을 다음 얻을 : 예를 들어, 다음과 같이 간단한 병합을 실행할 수

CONFLICT blah blah 
CONFLICT blah blah 
CONFLICT blah blah 

가끔 (당신이 무책임한 된 경우) 당신이 셀 수있는 것보다 더 많은 충돌이 있습니다.

은 내가하는 일은 모든 매뉴얼은 내가 찾을 수 병합 해결하고, 그때는 코드베이스에서 "< < < < <"와 ">>>>>"문자 시퀀스에 대한 전역 검색을 수행. 과거에는 나를 위해 일한 것 같습니다. 이러한 문자열이 없으면 돌발해야하는 모든 수동 병합을 처리했을 가능성이 큽니다. -Xtheirs-Xours 옵션을 git merge으로 사용하지 않는 한, 자신의 용어로 코드를 성공적으로 병합 한 것은 매우 안전한 방법입니다.

0

파일을 추가하기 전에 파일에서 '===='을 찾을 수 없는지 확인하십시오. vim을 사용하여 명령 프롬프트에서 쉽게이 작업을 수행 할 수 있습니다.

vim yourFile 
/==== 
Enter 

아무 것도 발견되지 않으면 추가하십시오!

관련 문제