2012-08-01 80 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