2012-07-13 2 views
0

git log을 사용하여 특정 파일이 마스터로 가져온 시간을 찾으려고합니다. (간체) 버전 기록은 다음과 같습니다병합 커밋을 표시하는`git log-filename`을 얻는 방법

* f77cac3 Merge branch 'branch2' 
|\ 
| * da35250 Merge branch 'branch1' into branch2 
| |\ 
| | * 90ab3e3 adding foo on branch1 
| * | 42a0367 adding bar in branch2 
| |/ 
* | 853b691 changes to baz on master 
* | c7b6c72 baz file on master 
|/ 
* e195580 first commit 

내가 (f77cac3해야한다) 마스터로 파일 'foo는'도입 커밋하는 찾을 싶습니다. 그러나 git log --foo을 실행하면 90ab3e3이됩니다. 더 복잡한 경우, branch1과 branch2에서 foo 파일을 여러 번 변경하면 모든 커밋이 표시되지만 병합 커밋은 표시되지 않습니다. 구글 도움을 통해뿐만 아니라 봤 거든 스택 오버플로에 대한 검색,하지만이 일을 할 수있는 방법을 찾을 수 없습니다. 내가 정말이 시점에서 난처한 상황에 빠진

mkdir testgit 
cd testgit 
git init 
vim README 
git add README 
git commit 
git checkout -b branch1 
vim foo 
git add foo 
git commit 
git checkout master 
git checkout -b branch2 
vim bar 
git add bar 
git commit 
git checkout master 
vim baz 
git add baz 
git commit 
vim baz 
git add baz 
git commit 
git checkout branch2 
git merge --no-ff branch1 
git checkout master 
git merge --no-ff branch2 

, 어떤 포인터를 정말 감사하겠습니다 :

다음은 아래의 시나리오를 재현하는 데 사용할 수있는 명령입니다.

+0

무엇이 이상한 지, 나는'git log --merges - foo'을 제안하려했으나 샘플 저장소에는 아무것도 표시하지 않았다. (나는 여기에 Git 1.7.10.4가있다.) – kostix

답변

0

가장 좋은 방법은 git blame 또는 git bisect을 사용하여 변경 내용이 포함 된 첫 번째 커밋을 찾은 다음 하위 커밋 체인을 따라 첫 번째 병합 커밋을 찾는 것입니다.

힘내네에는 실제로 가지에 속하는 특정 커밋의 개념이 없습니다. 예, 커밋은 지점에 포함되어 있으며 하나의 지점에만 포함될 수도 있고 포함되지 않을 수도 있습니다. 당신이하려고하는 것은 모든 커밋이 어느 지점에 있었는지를 기록 할 것을 요구할 것입니다. 이것은 Mercurial은하지만 Git는하지 않습니다.


귀하의 질문에 조금 읽기, 당신은 자동화 된 방식으로이 작업을 수행 할 필요가 없습니다 수 있습니다. 이 경우 제공되는 커밋 목록을 살펴볼 수 있습니다. git log --sparse -- foo

차이점은 --sparse은 걸어온 부모를 모두 나열하고, 정확히 동일한 내용을 가진 부모를 먼저 처리합니다 (이 경우, 합병의 오른쪽). 그래서 여기

+0

내가 처음 시도했을 때이 접근 방식이 원래 작동하지 않는다고 생각한 이유를 기억해주십시오. 문제는'git log --sparse'는 ** 모든 ** 커밋을 보여줄 것입니다. '- foo'는 효과가 없습니다. 내가 병합 한 후에 마스터에 대한 커밋이 더 많다면, 내가 원하는 커밋을 식별 할 수있는 방법이 필요하다. –

1

난 그냥 알아 낸 것입니다 : 올바른 주문이 git log --first-parent -- foo 당신의 자식 버전은 위의 1.7.9.1 또는 경우 그러나, 그것은 단지 때문에 이전 --first-parent가 파손 된 해당 버전으로, 작동합니다. 아아,이 문제가 발생했을 때 이전 버전을 사용하고 있었고 1.7.9.1 (https://github.com/git/git/blob/master/Documentation/RelNotes)의 릴리스 노트에서 수정 사항에 대한 언급을 발견했습니다. /1.7.9.1.txt)

관련 문제