2012-08-01 37 views
8

一位同事从主人创建了一个本地分支('branchA'),完成了一些工作,推送了它,合并到主分支中,完成了一些工作并再次推送。同时,其他同事一直在研究其他分支,并将它们合并为主。git:如何查看对单个分支的提交

现在我需要拉branchA来检查它。所以我做了git pullgit checkout -b branchA origin/branchA这很好。但所有的命令(git diff/log/show)都显示了对仓库中所有分支进行的提交。

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

另外我怎样才能git diff branchA针对当前HEAD的master,但只查看在branchA内改变的文件?

回答

10

以下适用于你的第二个问题,如何找到branchA之间的差异和当地的当前版本的master。您想在git log上使用'double dot'语法来查看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). 

如果你想看到在任一masterbranchA提交,但不同时,你可以使用“三联点”语法:

git log master...branchA 

最后,您可以使用完全相同的语法与git diff,即git diff master..branchAgit diff master...branchA,respectivel年。

另外,如果您有branchA已签出,则甚至不需要将其指定为<until>。 Git会承担HEAD如果它不指定,所以这两个命令集是等价的:

git checkout branchA 
git log master.. 

git log master..branchA 
0

可以使用 git的日志--branches = mybranch

这将显示日志特定的分支

+0

这不起作用。也许是因为我已经融入了主人,但我看到其他人所做的更改。 – user1491250 2012-08-01 11:12:22

0

Git修订不会保留有关他们承诺的“哪个分支”的信息。他们只能给你一个点,你可以走回来的树。合并发生后,您无法从合并提交中确定哪个父项来自您开始的分支。这在一些细节over here中进行了讨论。

这是我的理解。如果我错了,我很想纠正。

2
  1. git diff master..brnachA:将比较master和branchA的HEAD之间的所有修改文件。
  2. git diff master...brnachA:将比较branchA与创建它的主版本。

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

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

+0

-2-不完全正确。它会在'master'或'branchA'中返回提交,但不能同时提交。如果'master'提前50次提交,但'branchA'完全合并,它将返回主文件中的50次提交。那不会比较'branchA'和它在master中的合并基础,这似乎是第一个问题? – Christopher 2012-08-01 11:30:21