16

一位同事从master创建了一个本地分支('branchA'),做了一些工作,推送它,合并到master中,做了更多的工作并再次推送它。同时,其他同事一直在做其他分支,合并到master。

现在我需要拉分支A 来查看它。所以我做了一个git pullgit checkout -b branchA origin/branchA这很好。但是所有命令(git diff/log/show)都显示了在 repo 中所有分支的提交。

如何查看对 branchA 所做的所有提交与创建它的 master 版本的差异?

另外,我git diff如何针对 master 的当前 HEAD 进行分支,但只查看分支 A 中更改的文件?

4

5 回答 5

18

以下适用于您的第二个问题,即如何找到branchA与您当地当前版本的master. 您想使用“双点”语法git log来查看所有branchA不在master. 以机智:

git log master..branchA

根据git log手册页:

SYNOPSIS
   git log [<options>] [<since>..<until>] [[--] <path>...]
   ...
   <since>..<until>
   Show only commits between the named two commits. When either <since> or <until> is omitted, it defaults to HEAD, i.e. the tip of the current branch.
   For a more complete list of ways to spell <since> and <until>, see gitrevisions(7).

如果您想在其中一个master或中看到提交branchA,但不是在两个中都看到提交,您可以使用“三点”语法:

git log master...branchA

git diff最后,您可以分别使用与, 即git diff master..branchA和完全相同的语法git diff master...branchA

顺便说一句,如果您已branchA签出,您甚至不需要将其指定为<until>. 如果未指定, Git 将假定HEAD它,因此这两组命令是等效的:

git checkout branchA
git log master..

git log master..branchA
于 2012-08-01T11:20:24.183 回答
3
  1. git diff master..brnachA:将比较master的HEAD和branchA之间的所有修改文件。
  2. git diff master...brnachA: 会将 branchA 与创建它的 master 版本进行比较。

仅供参考:git diff将在命令行中生成输出。如果您想在某些可视化工具中查看输出,请使用git difftool.

您也可以将所有git diff参数和选项传递给git difftool

于 2012-08-01T11:27:43.813 回答
1

Git 提交不会保留有关他们提交的“哪个分支”的信息。他们只会在树上给你一个点,你可以从那里走回来。一旦发生合并,您无法从合并提交中确定哪个父级来自您开始的分支。这将在此处详细讨论。

这是我的理解。如果我错了,我很乐意得到纠正。

于 2012-08-01T11:22:05.183 回答
0

你可以使用 git log --branches=mybranch

这将显示特定分支的日志

于 2012-08-01T11:09:50.517 回答
0

git log HEAD..branch 当你在 master 分支上时。

在此处查看更多详细信息:如何在 git 中获取分支上的更改

于 2012-08-01T11:30:26.417 回答