2015-02-10 121 views
2

要做代码审查,我经常做一个功能分支的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。分支的Git diff,不包括其他分支的提交

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

+0

你确切的问题是什么?您是否正在查找命令以查看功能分支中存在的源分支中不存在的提交? – 2015-02-10 14:20:09

回答

2

首先,你可以得到合适的提交列表,像这样:

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

这得到每一个非合并提交的feature_branch不是来自主可达。 反转将它们按时间顺序排列,适用于应用。

其次,你可以樱桃采摘这些到一个临时分支:

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来保持与终端的连接。

+0

接受,因为它是正确的答案!仅仅为了帮助其他人,当在开发过程的中间从主人合并到feature_branch时,feature_branch上的下一次提交无法从合并插入的更改中完全“分离”。 (这很明显,但我没有注意到)所以,虽然这是正确的答案,并且如果人们改变的文件不同,那么“古代神明的智慧”是正确的:小的请求可以节省很多时间。当正确(以及何时可以)应用时,重新保存时间会节省很多时间。 – jademcosta 2015-02-10 16:26:57