我想找到影响或涉及给定文件中的所有合并的提交。
对于背景,在合并时,有人误解决的冲突,这不是由团队几天注意到。 在这一点上,很多其他不相关的合并已被提交(我们中有些人已经倾向于不使用变基,或事情会更简单)。 我需要找到“坏”合并提交,所以可以进行检查,以确定可能已经恢复些什么(当然,找出并惩罚罪犯)。
该方案是这样的:
$ echo First > a.txt && git add a.txt && git commit -m 'First commit'
$ git branch branch1
$ echo "Second: main-branch" >> a.txt && git commit -a -m 'Commit on master'
$ git tag a1
$ echo "Third: main" >> a.txt && git commit -a -m 'Other commit on master'
$ git checkout branch1
$ echo "Second: on branch1" >> a.txt && git commit -a -m 'Commit on branch'
$ git tag b1
......所以,现在有冲突的改变在主机和BRANCH1到A.TXT。
$ git checkout master
$ git merge branch1
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat a.txt
First
<<<<<<< HEAD:a.txt
Second: main-branch
Third: main
=======
Second: on branch1
>>>>>>> branch1:a.txt
$ vi a.txt
# ...
$ cat a.txt
First
Second: on branch1
$ git add a.txt
$ git commit -m 'Merge commit'
......换句话说,该决议是“拿他们的”。 该图现在看起来是这样的:
$ git log --graph --branches --format='%h %s %d'
* fefb623 Merge commit (refs/heads/master)
|\
| * 93e065e Commit on branch (refs/tags/b1, refs/heads/branch1)
* | cf4d12b Other commit on master
* | 6fade67 Commit on master (refs/tags/a1)
|/
* 07545ea First commit
在这一点上错版A.TXT的是高手。 在A1的版本是我们想要的,但b1版本承诺。 到目前为止,我已经试过:
$ git log --decorate --oneline a.txt
93e065e (refs/tags/b1, refs/heads/branch1) Commit on branch
07545ea First commit
好了,既不A1也不是合并提交出现。
$ git log --decorate --oneline --follow a.txt
...
这说明我的两个分支的一切,但还是忽略了合并提交。
$ git log --oneline --graph --decorate a1..master
...
当然,这是“一切都在主人不在A1”,在这个玩具例如工作,但在我的实际情况给我最近做的所有合并(并没有迹象表明其中一个感动A.TXT)。
我可以理顺从文件的历史记录A1的消失,因为合并选择忽略这种变化(至少在Git的关心,我认为意义上的)。 但我怎么找到所有合并的提交影响A.TXT? 这甚至可能无需手动检查所有candiate合并提交?