21

我总是问自己一系列关于我创建的分支的问题,我还没有确定如何完成:

  1. 我在分支中更改了哪些文件?
  2. 我对分支所做的实际更改(差异)是什么?
  3. 我对分支所做的提交日志是什么?

现在我想如果弄清楚如何使用git cherry master <branchname>. 有了这个,我可以逐个哈希并找出所有内容,但是如果您有很多提交,这可能会很耗时。请注意,我不想与 master 的当前状态进行比较。我认为关键是知道您创建分支的 master 的哈希值,但我不确定如何确定这一点。

4

3 回答 3

31

要查找当前结帐与 master 分支的差异,

base=`git merge-base master HEAD`
echo $base

找出从那时起更改了哪些文件,

git diff --name-only $base HEAD

显示累积的差异

git diff $base HEAD

当您想描述整个提交系列时,您可以使用上面链接的答案 Gabriele Petronella 中的语法,它master..HEAD是简写HEAD ^master,意思是“所有可从 HEAD 访问的提交,但不包括可从 master 访问的提交”。缺少端点默认为 HEAD,所以你可以说git log --oneline master..

于 2013-04-11T17:20:31.103 回答
13

假设您从 分支master

1. 分支后哪些文件发生了变化?

git diff master...<branchname> --name-only

2. 自分支以来的完整差异是什么?

git diff master...<branchname>

3. 什么是分支后的提交日志?

git log master..<branchname>

您无需指定<branchname>是否已将其签出(例如,git diff master...)。

注意: git diff需要三点...git log双点..才能获得您要求的行为。


有关点语法的说明,请参见:

于 2016-10-18T23:58:31.030 回答
2

对于更改的文件列表和实际差异,如果您知道要比较的 2 个提交,则更有意义。

如果您想查看 和 之间的差异START_SHA1END_SHA1您可以这样做:

git diff START_SHA1 END_SHA1

如果你只想要文件列表,你可以这样做:

git diff --name-only START_SHA1 END_SHA1

如果您还想知道文件中的更改类型(如A, M, D, C, R, U),您可以执行以下操作:

git diff --name-status START_SHA1 END_SHA1
于 2013-04-11T17:20:22.003 回答