我遇到了处理cherry-pick{able,ed}提交的各种日志选项,我很确定
git log --decorate --oneline --cherry master...topic
将在此处投放(注意三个点)。
供参考,git log 和 git revisions(指定修订和修订集的方法)文档。
要查找topic 到master 的最新记录合并,无论topic 引用是否已被删除,
git log --oneline -1 --first-parent --merges --grep="^Merge branch 'topic'" master
并记住它以供以后使用,例如
merge=$(git log --pretty=%H -1 --first-parent --merges --grep="^Merge branch 'topic'")
这样你就可以了
git log --decorate --oneline --cherry $merge^...$merge^2
其他选项:
在普通情况下,topic 仍然处于活动状态,您只关心合并正在处理的更改:
git diff master...topic
如果 topic 引用已被删除,即如果您正在处理这里的考古案例,则要查找 topic 到 master 的最新记录合并:
git log --oneline -1 --first-parent --merges --grep="^Merge branch 'topic'" master
您可以使用
为合并和合并提示提交 ID 设置一个变量
merge=$(git log --pretty=%H -1 --first-parent --merges \
--grep="^Merge branch 'topic'" master)
topic=$(git rev-parse -q --verify $merge^2)
edit:我保证有一天我会停止提供键盘到编辑框的命令。上面的工作现在。
如果您决定不记录合并,那么当然没有合并记录。
已记录的合并可能会使提交图变得混乱,如果它们中有很多,它们可能会使其难以遵循;此外,提交消息主题旨在足以确定其中完成的工作范围。所以 git 通常在可能的情况下更喜欢线性历史。为了避免依赖于提交主题,确保在祖先链中记录管理上重要的边界(对于大型项目,这通常是一个非常好的主意),进行合并并指定--no-ff。
要获取当前的topic 提示或获取其最近合并的提示:
topic=$( git rev-parse -q --verify refs/heads/topic \
|| git rev-parse -q --verify $( git log --pretty=%H \
-1 --first-parent --merges \
--grep="^Merge branch 'topic'" master)^2 )
$topic 的分支中的第一次从 master 提交:
first=`git rev-list master..$topic --reverse --first-parent | sed q`
该提交的第一个父节点是来自 master 的分支点:
branchbase=`git rev-parse $first^`
显示自从历史第一次分歧以来关于 $topic 的所有变化:
git diff $branchbase..$topic