2016-10-19 3 views
1

branch-agit rebase origin/master branch-a이 주어지면 파일에 충돌이 일어나는 경우가 있습니다. 기능 분기에없는 파일에 영향을주는 커밋을 표시 하시겠습니까?

CONFLICT (content): Merge conflict in .../file.txt 

는 REBASE 전에 (정의에 의해), 다음 충돌은 나 하나 이상의 커밋 C/ .../file.txt에 발생했을 수있는 충돌이 없었다 감안할.

충돌 해결 프로세스 중에 "변경된 항목을 원래/마스터에서 영향을 받았다 .../file.txt"로 표시하여 쉽게 변경 사항을 통합 할 수 있습니다.

---A---B---[C]---D 
    \    \ 
    E---[F]---G E'--[C/F']--G' 

ABCD은 주요 라인 개발입니다. 내 로컬 지점 개발은 EFG입니다. C을 실행하면 내 로컬 rebase 중에 F 파일/커밋이 충돌하여 D에 있습니다.

을 감안할 때 분리 된 HEAD 또는 "리베이스"상태, 내가 git log -3 file.txt을 할 때 내가 사랑하는이었다 무엇 인보고 싶은 보여줘하지 않는 것 : 갈등의 원인 (즉 C 커밋) 커밋을 적용 할 때 지금 해결하려고 노력 중입니다 F.

난 단지 특정 파일에 영향을 미치는 범위 내 EFG에서 커밋 또는 현재 활성화 된 --rebase 포함되지 ABCD ... 출신 커밋의 목록을 얻을 수 있습니까?

답변

1

당신은 당신이 필요로하는 출력을 얻을해야합니다

git log --patch --full-history A..D -- file.txt 

--patch (또는 -p) 플래그는 아마도 당신이 찾고있는 중요한 것은입니다 : 각가 기록 커밋은 diff를 보여줍니다.

--full-history 플래그는 작업 트리의 현재 상태를 기반으로 커밋을 생략함으로써 작업 내역을 단순화하지 못하도록합니다. 이것은 귀하의 특정 상황에 따라 필요하지 않을 수도 있습니다.

A..D은 출력을 커밋 A (제외) 사이의 커밋으로 제한하고 D (커밋되지 않음)을 커밋합니다. AD에 대한 참조가 있다고 가정 할 때 -3 대신 커밋을 제한하는 것이 더 신뢰할 수있는 방법 일 수 있습니다. D이 주류 지점의 끝이고, 때문에 실제로, 당신은 당신이 수행하여 A를 얻을 수 있습니다, 항상 모두 심판 편리합니다

git merge-base <mainline> <local> 

구체적인 예 :

가 주류가 있다고 가정 브랜치는 master이고 다른 브랜치는 feature입니다. log 명령 origin/master을 할 당신은 소스를 선택할 수 있습니다

git conflict-commits master feature file.txt 
+1

그냥 FY 나는 마침내 당신의 충고를 작은 명령/스크립틀릿 (git conflict-commits)이나 뭔가로 마무리 할 것입니다. 그러나 나는 그것을하기 위해 동기를 부여받은 곳에서 충돌을 다시 치지 않았습니다. – user400575

+0

@ user400575 : 귀하의 의견은 나에게 별칭으로 사용하는 방법을 보여주기위한 아이디어를주었습니다. 내 대답을 업데이트했습니다. –

0

:로 사용 그리고

git config --global alias.conflict-commits "! git log --patch --full-history $(git merge-base $1 $2)..$1 -- $3" 

:

git rebase master feature 
# conflicts occur 
git log --patch --full-history $(git merge-base master feature)..master -- file.txt 

시간을 절약하기 위해, 당신은 또한 별칭을 설정할 수 있습니다 :

git log origin/master -3 file.txt 
관련 문제