显示影响不在功能分支中的文件的提交?

时间:2016-10-19 23:05:50

标签: git branch git-rebase feature-branch

鉴于branch-agit rebase origin/master branch-a,有时会在文件中出现冲突。

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

鉴于在rebase之前没有冲突(根据定义),冲突只能发生b / c一次或多次提交.../file.txt

在冲突解决过程中,我无法找到一种方法来轻松显示“来自origin / master的提交影响... / file.txt”,以便我可以更自信地整合这些更改。

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

ABCD是主线​​发展。 EFG是我当地的分支机构。在本地rebase期间,提交C导致文件/提交F发生冲突,导致D

鉴于一个分离的HEAD或“变基”状态,当我git log -3 file.txt时,它似乎没有显示我想要看到的内容,这是 WHAT 是差异(即:commit C)导致我在应用commit F时尝试解决的冲突。

如何获取仅影响特定文件且来自ABCD范围的提交列表...不包括EFG中的提交或当前有效的--rebase

2 个答案:

答案 0 :(得分:1)

您应该获得所需的输出:

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

--patch(或-p)标志可能是您正在寻找的主要内容:它显示了每次提交记录的差异。

--full-history标志通过根据工作树的当前状态省略提交来阻止Git简化历史记录。根据您的具体情况,这可能没有必要。

A..D将输出限制为在提交A(不包括)和提交D(包括)之间提交。假设您有-3A的引用,这可能是一种更可靠的方式来限制提交而不是D。实际上,你总是将两个引用都很方便,因为D是主线​​分支的提示,你可以通过以下方式获得A

git merge-base <mainline> <local>

一个具体的例子:

假设主线分支为master,另一分支为feature

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

为节省时间,您还可以设置别名:

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

答案 1 :(得分:0)

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

git log origin/master -3 file.txt
相关问题