Git 是否显示影响不在要素分支中的文件的提交?

Git 是否显示影响不在要素分支中的文件的提交?,git,branch,git-rebase,feature-branch,Git,Branch,Git Rebase,Feature Branch,给定branch-a和git-rebase-origin/master branch-a,有时文件中会出现冲突 CONFLICT (content): Merge conflict in .../file.txt 假设在重新基础之前没有冲突(根据定义),那么冲突只能发生在b/c一个或多个提交到../file.txt 在冲突解决过程中,我无法找到一种方法来轻松显示“来自影响…/file.txt的源代码/master的提交”,以便我能够更自信地集成这些更改 ---A---B---[C]---D

给定
branch-a
git-rebase-origin/master branch-a
,有时文件中会出现冲突

CONFLICT (content): Merge conflict in .../file.txt
假设在重新基础之前没有冲突(根据定义),那么冲突只能发生在b/c一个或多个提交到
../file.txt

在冲突解决过程中,我无法找到一种方法来轻松显示“来自影响…/file.txt的源代码/master的提交”,以便我能够更自信地集成这些更改

---A---B---[C]---D
    \             \
     E---[F]---G   E'--[C/F']--G'
ABCD
是主线开发
EFG
是我在当地的分支机构。Commit
C
在本地重设到
D
期间,导致文件/Commit
F
发生冲突

给定一个分离的头部或“重定基址”状态,当我执行
git log-3 file.txt
时,它似乎没有显示我想要看到的内容,这就是导致我现在在应用commit
F
时试图解决的冲突的差异(即:commit
C


如何获取仅影响特定文件且范围在
ABCD
范围内的提交列表。。。不包括我在
EFG
中的提交或当前活动的
--rebase

您应该通过以下方式获得所需的输出:

git log --patch --full-history A..D -- file.txt
--patch
(或
-p
)标志可能是您要查找的主要内容:它显示记录的每个提交的差异

--full history
标志阻止Git根据工作树的当前状态忽略提交,从而简化历史记录。根据您的具体情况,这可能不是必需的

A..D
将输出限制为在提交
A
(独占)和提交
D
(包含)之间提交。假设您手边有
a
D
的参考,这可能是限制提交的更可靠的方法,而不是
-3
。实际上,两个ref都很方便,因为
D
是主线分支的尖端,您可以通过以下操作获得
A

git merge-base <mainline> <local>
为了节省时间,您还可以设置别名:

git config --global alias.conflict-commits "! git log --patch --full-history $(git merge-base $1 $2)..$1 -- $3"
然后将其用作:

git conflict-commits master feature file.txt

您可以选择
log
命令的来源为
origin/master

git log origin/master -3 file.txt

仅供参考。。。最后,我将把您的建议总结成一个小小的command/scriptlet(git conflict committes)或其他东西,但我没有再遇到过一次冲突,因为我一直想这样做。@user400575:您的评论让我想到了如何将它用作别名;我已经更新了我的答案。
git log origin/master -3 file.txt