鉴于branch-a
和git 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
?
答案 0 :(得分:1)
您应该获得所需的输出:
git log --patch --full-history A..D -- file.txt
--patch
(或-p
)标志可能是您正在寻找的主要内容:它显示了每次提交记录的差异。
--full-history
标志通过根据工作树的当前状态省略提交来阻止Git简化历史记录。根据您的具体情况,这可能没有必要。
A..D
将输出限制为在提交A
(不包括)和提交D
(包括)之间提交。假设您有-3
和A
的引用,这可能是一种更可靠的方式来限制提交而不是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