一个分支的 Git 差异,排除其他分支中的提交。

4
为了进行代码审查,我经常会对一个特性分支进行 git difftool hash_of_parent_of_first_commit_in_branch last_commit_in_branch 操作。该特性分支是从其源(让我们称之为主分支)创建的,并在其上工作。但是在这段时间中,主分支接收了一些提交,并将这些提交合并到了特性分支中。
为了澄清,如果我使用 git log,这个命令就很简单:git log feature_branch ^master(根据情况可能带有 --no-merges 参数或没有)。通过这个命令,我可以过滤掉特性分支中的主分支提交。
我做了一些研究,但是无法弄清楚如何实现这个操作。也许可以使用 cherry-pick?您有关于如何在 diff/difftool 命令上实现类似操作的任何想法吗?

你的确切问题是什么?你是否在寻找一个命令来查看在特性分支中存在但在源分支中不存在的提交记录? - Charlie Vieillard
也许是三个点吧?https://dev59.com/YWMm5IYBdhLWcg3wdeua#17618008 - Ben Creasy
1个回答

4
首先,您可以这样获取适合的提交列表:
git rev-list --reverse --no-merges feature_branch ^master

这个命令可以获取 feature_branch 上所有不是从 master 分支可达的非合并提交记录。使用 reverse 参数可以将它们按照时间顺序倒序排列,方便应用。

其次,你可以将这些提交记录 cherry-pick 到一个临时分支中:

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来保持一切与终端连接良好。

因为这是正确的答案,所以被接受了!只是为了帮助其他人,在开发过程中从主分支合并到feature_branch时,feature_branch上的下一个提交不能完全“分离”合并插入的更改。(这很明显,但我没有注意到)因此,尽管这是正确的答案,并且如果人们更改的文件不同,则可能有效,但“古代神灵的智慧”是正确的:小的拉取请求可以节省大量时间。当正确(并且可以)应用时,变基可以节省很多时间。 - jademcosta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接