Git 一个分支的差异,不包括在其他分支中的提交
Git diff of a branch, excluding commits in other branch
为了进行代码审查,我经常对功能分支进行 git difftool hash_of_parent_of_first_commit_in_branch last_commit_in_branch
。 feature_branch 是从它的源代码创建的(我们称它为 master 分支)并在其上完成了工作。但是在这中间,master分支收到了一些commit,这些commit被合并到feature_branch.
澄清一下,如果我使用的是 git 日志,则此命令很简单:git log feature_branch ^master
(可能带有 --no-merges 或不带有,视情况而定)。有了这个,我会从 feature_branch.
中过滤掉主提交
我做了一些研究,但无法弄清楚如何实现这一目标。也许使用 cherry-pick?关于如何在 diff/difftool 命令上实现类似的东西有什么想法吗?
首先,您可以像这样获得合适的提交列表:
git rev-list --reverse --no-merges feature_branch ^master
这会获取 feature_branch 上所有无法从 master 访问的非合并提交。 reverse按时间顺序排列,适合应用。
其次,您可以挑选这些到临时分支:
git branch review $(git merge-base feature_branch master)
git checkout review
git rev-list --reverse --no-merges feature_branch ^master | xargs git cherry-pick
然后您的评论就会出现
git diff $(git merge-base feature_branch master)..review
请注意 xargs
可能很难以交互方式解决 cherry-pick
问题。您可以编写一个包装器脚本来使用 for
循环而不是 xargs 来完成所有这些操作,以使所有内容都很好地连接到终端。
为了进行代码审查,我经常对功能分支进行 git difftool hash_of_parent_of_first_commit_in_branch last_commit_in_branch
。 feature_branch 是从它的源代码创建的(我们称它为 master 分支)并在其上完成了工作。但是在这中间,master分支收到了一些commit,这些commit被合并到feature_branch.
澄清一下,如果我使用的是 git 日志,则此命令很简单:git log feature_branch ^master
(可能带有 --no-merges 或不带有,视情况而定)。有了这个,我会从 feature_branch.
我做了一些研究,但无法弄清楚如何实现这一目标。也许使用 cherry-pick?关于如何在 diff/difftool 命令上实现类似的东西有什么想法吗?
首先,您可以像这样获得合适的提交列表:
git rev-list --reverse --no-merges feature_branch ^master
这会获取 feature_branch 上所有无法从 master 访问的非合并提交。 reverse按时间顺序排列,适合应用。
其次,您可以挑选这些到临时分支:
git branch review $(git merge-base feature_branch master)
git checkout review
git rev-list --reverse --no-merges feature_branch ^master | xargs git cherry-pick
然后您的评论就会出现
git diff $(git merge-base feature_branch master)..review
请注意 xargs
可能很难以交互方式解决 cherry-pick
问题。您可以编写一个包装器脚本来使用 for
循环而不是 xargs 来完成所有这些操作,以使所有内容都很好地连接到终端。