分支的Git diff,不包括其他分支中的提交

时间:2015-02-10 13:57:51

标签: git diff

要进行代码审核,我经常会创建一个功能分支git difftool hash_of_parent_of_first_commit_in_branch last_commit_in_branch。 feature_branch是从它的源代码创建的(让我们称之为master分支),并在其上完成工作。但是在这段时间中,master分支收到了一些提交,这些提交在feature_branch中合并。

为了澄清,如果我使用git log,这个命令很简单:git log feature_branch ^master(可能有--no-merges或不合并,具体取决于具体情况)。有了这个,我会将主提交过滤掉feature_branch。

我做了一些研究,但无法弄清楚我怎么能实现这一目标。也许使用樱桃挑选?关于如何在diff / difftool命令上实现类似功能的任何想法?

1 个答案:

答案 0 :(得分:2)

首先,您可以获得一个合适的提交列表,如下所示:

git rev-list --reverse --no-merges feature_branch ^master

这将获得无法从master访问的feature_branch上的每个非合并提交。 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编写一个包装器脚本来完成所有这些操作,以便将所有内容连接到终端。