如何获取在分支上提交的更改,并且仅在 Git 中的那个分支上?
How to get changes that was commited on a branch, and only on that branch in Git?
比方说,我有以下分支
B---C---D---E---F---G feature
/ / \
--A---F---G---H----I------J master
有一个特性分支,通过将主分支合并到特性(合并提交 B 和 E)从主分支定期刷新。当功能准备就绪时,它会合并到主控中(合并提交 J),所以此时功能和主控是等价的。
我想查看或记录仅在没有合并提交(B 和 E)的功能分支上更改的内容。那么有什么方法可以让我仅在合并的功能分支上查看更改。
谢谢。
git log --first-parent --no-merges A..feature
任何你想要的细节,也许--oneline --patch
。
这里没有方便的命令可以找到 A
,first-parent 合并基础,两个提示的 first-parent 祖先中的最新提交,但它很容易做到:
merge-base-first-parent() {
( git rev-list --first-parent ;
git rev-list --first-parent
) | awk 'seen[]++{print ;exit}'
}
git log --first-parent --no-merges --oneline --patch \
$(merge-base-first-parent master feature)..feature
并且在非常长的历史中,您可以使用 rev-list 的 --parents
和对退化情况的特殊处理以使其总是 运行 快速。
要将更改视为单个差异,您必须构建提示在没有合并的情况下的外观。这很容易做到,你可以
git checkout A
git rev-list --reverse --no-merges A..feature | git cherry-pick -n --stdin
git diff @
比方说,我有以下分支
B---C---D---E---F---G feature
/ / \
--A---F---G---H----I------J master
有一个特性分支,通过将主分支合并到特性(合并提交 B 和 E)从主分支定期刷新。当功能准备就绪时,它会合并到主控中(合并提交 J),所以此时功能和主控是等价的。
我想查看或记录仅在没有合并提交(B 和 E)的功能分支上更改的内容。那么有什么方法可以让我仅在合并的功能分支上查看更改。
谢谢。
git log --first-parent --no-merges A..feature
任何你想要的细节,也许--oneline --patch
。
这里没有方便的命令可以找到 A
,first-parent 合并基础,两个提示的 first-parent 祖先中的最新提交,但它很容易做到:
merge-base-first-parent() {
( git rev-list --first-parent ;
git rev-list --first-parent
) | awk 'seen[]++{print ;exit}'
}
git log --first-parent --no-merges --oneline --patch \
$(merge-base-first-parent master feature)..feature
并且在非常长的历史中,您可以使用 rev-list 的 --parents
和对退化情况的特殊处理以使其总是 运行 快速。
要将更改视为单个差异,您必须构建提示在没有合并的情况下的外观。这很容易做到,你可以
git checkout A
git rev-list --reverse --no-merges A..feature | git cherry-pick -n --stdin
git diff @