清单合并提交影响文件(List merge commits affecting a file)

2019-07-29 00:59发布

我想找到影响或涉及给定文件中的所有合并的提交。

对于背景,在合并时,有人误解决的冲突,这不是由团队几天注意到。 在这一点上,很多其他不相关的合并已被提交(我们中有些人已经倾向于不使用变基,或事情会更简单)。 我需要找到“坏”合并提交,所以可以进行检查,以确定可能已经恢复些什么(当然,找出并惩罚罪犯)。

该方案是这样的:

$ 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合并提交?

Answer 1:

你的情况的问题是,合并的提交是空的,因为你只从一个分支拿东西,所以混帐通过删除那些“空”提交简化的历史。

因此,有您的合并在日志中显示的提交,你需要告诉git的改变历史的简化,告诉--simplify-merges 。 如果你想了解你为什么要使用它,继续在git log人的页面,但我走了吧:)反正在这种情况下,合并提交正确与a.txt中过滤出,所以这就是你想。

最后,你要显示DIFF两次,每次父母,与-m

所以这给

git log -U -m --simplify-merges --merges -- a.txt

与输出

commit a7340d6e91deedff6f52c8ec8da932245f73e5f6 (from d577e6c4dcbff5485ded666c89f38
Merge: d577e6c fe3c4d2

    merge commit

diff --git a/a.txt b/a.txt
index 319137b..1aa6dc4 100644
--- a/a.txt
+++ b/a.txt
@@ -1,3 +1,2 @@
 First
-Second: main-branch
-Third: main
+Second: on branch1


Answer 2:

您可以添加--merges到日志命令。 这将只列出合并提交。 此外,你可以指定--first-parent ,所以你只跟随分支历史,而不是考虑分支的历史合并到它。



文章来源: List merge commits affecting a file