2014-01-13 1 views
2

). 죄송 합니다만 제목을 요약하면 일관성있는 문장으로 요약하기가 어렵습니다.힘내는 하나의 파일을 제외한 모든 파일을 병합합니다.이 파일은 (전체) 충돌 파일입니다 (

하나 또는 두 개의 파일을 제외하고 모두 병합을 요청하는 많은 사람들이 있는데, 체리 따기가 일반적으로 여기에 있습니다. 그러나 나는 이것을 어떻게하는지 확신 할 수없고 비슷한 질문을 찾을 수 없다.

기본적으로 나는 두 개의 가지를 가지고 있는데, devrefactor이라고 부를 수 있습니다. refactor 분기를 dev으로 병합하고 싶습니다. 일반적으로 완료되었습니다.

refactor에는 몇 개의 새 파일과 주 논리에서 완전히 다른 파일이 있습니다 (file). 분기를 병합하고 싶지만, file을 충돌 시키거나 적어도 비슷한 것을 원합니다.

// file in <dev> 
lots of code 
loop 
    main logic 
lots more code 

리팩터의 요점은 크고 매우 중첩 된 루프에 대한 요구를 제거하는 것입니다. 리팩토링 코드의 형태는 : 나는 선택적으로 원본에서 새로 주요 논리를 얻을 수 있도록

// file in <refactor> 
lots of code 
BLANK (where main logic ought to be) 
lots more code 

나는, '갈등 모드'또는 무언가로 팝업 할 수있는 전체 파일을 싶습니다 .

이것은 파일 내에서 한 번 발생하는 것만은 아니지만 몇 가지가 있습니다. 그러나 이것은 아이디어를 제공하는 것입니다.

이것이 가능합니까? 또는 수동으로 dev에서 refactor으로 병합하기 전에 코드를 복사해야합니까?

답변

3

파일이 충돌한다는 것을 나타내는 custom merge driver으로 시도 할 수 있습니다. 그러나 병합베이스에 저장된 버전 이후 현재 브랜치와 병합 대상 분기 모두에서 파일을 수정 한 경우에만 작동합니다. 이미 수동으로 병합 한 후에 만 ​​적용하기 전에 편집 할 파일을 알고 있다면


, 난 그냥 git merge --no-commit ...를 실행하는 것입니다. 결과 병합은 "준비 완료"로 표시 될 수 있지만 먼저 편집 할 수 있습니다 (편집 결과는 git add입니다). merge 프로세스가 .git 디렉토리의 파일을 기록하기 때문에 궁극적 인 수동 git commit은 병합 커밋이됩니다.

편집하는 동안 충돌이 있는지 여부에 관계없이 git show HEAD:filegit show branch:file 두 파일 버전 file을 볼 수 있습니다. 필요한 경우 결과를 임시 파일로 덤프하십시오.

이 공통 조상 버전을 볼 수없는 완전히 사소한 방법은 없지만이 두 단계 방법은 유닉스 쉘에서 작업을 수행합니다

: 당신은이 점을 단순화 할 수 있습니다,

ancestor=$(git merge-base HEAD branch) 
git show ${ancestor}:file 

(또는 이 같은 방법의 어느 경우

git show $(git merge-base HEAD branch):file 

: 먼저 우리는 git merge 작성 병합 계 계산을 반복하고 우리 show 파일 file 선택된 버전을 사용한다.)

+0

의견을 보내 주셔서 감사 드리며, 필자는이 문제에 대해 필자가 필요로하지 않았 음을 발견했다. – parnmatt

관련 문제