【问题标题】:Git diff of a branch, excluding commits in other branch一个分支的 Git diff,不包括其他分支的提交
【发布时间】:2015-04-10 14:12:56
【问题描述】:

为了进行代码审查,我经常为功能分支创建一个git difftool hash_of_parent_of_first_commit_in_branch last_commit_in_branch。 feature_branch 是从它的源代码创建的(我们称它为 master 分支)并在其上完成了工作。但是在这中间,master分支收到了一些commit,这些commits被合并到了feature_branch中。

澄清一下,如果我使用 git log,这个命令会很简单:git log feature_branch ^master(可能带有 --no-merges 或不带有,视情况而定)。有了这个,我就会从 feature_branch 中过滤掉主提交。

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

【问题讨论】:

  • 您的具体问题是什么?您是否正在寻找命令来查看功能分支中存在但源分支中不存在的提交?

标签: git diff


【解决方案1】:

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

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 来完成所有这些操作,以保持一切都很好地连接到终端。

【讨论】:

  • 接受,因为它是正确的答案!只是为了帮助其他人,当在开发过程中进行从 master 到 feature_branch 的合并时, feature_branch 的下一次提交不能与合并插入的更改完全“分离”。 (很明显,但我没有注意到)所以,虽然这是正确的答案,而且如果人们更改的文件不同,它可能会起作用,但“古神的智慧”是对的:小拉请求节省了很多时间。如果正确(以及何时可以)应用 Rebase,可以节省大量时间。
猜你喜欢
  • 2019-11-24
  • 2021-10-08
  • 1970-01-01
  • 2011-11-21
  • 2010-12-15
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多