2009-09-01 226 views
78

Git pull後,其輸出會提供有關更改量的摘要。Git pull後的詳細信息更改

如何查看每個或某些文件的詳細更改?

好吧,這裏是我的問題Jefromi:

  1. 我怎麼知道,如果我是拉掌握?我所做的只是「git pull」。

  2. Master和GAD的兩個默認頭部master和HEAD有什麼不同?

  3. 如何查看特定文件中的詳細更改?

  4. 如何在最近的git pull中再次看到彙總輸出的變化?

  5. git diffgit whatchanged有何區別?

+3

好的,這重複通過修改添加的新的問題是不完全的系統的目的是要使用的方式。您還可以通過查看手冊頁或僅嘗試一些事情,輕鬆回答很多問題。例如,'git diff'明確輸出diff,而'git whatchanged'明確輸出提交信息列表,每個提交信息都包含哪些文件已更改的列表。 – Cascabel 2009-09-01 15:36:23

+0

可能是因爲你的低代表。 – 2009-09-01 15:47:40

+0

@ T.E.D。只需要50個代表發表評論,15個代表點贊。 – Cascabel 2009-09-01 15:52:48

回答

128

假設你正在拉高手。你可以參考的master以前的位置由[email protected]{1}(甚至[email protected]{10.minutes.ago};看到git-rev-parse man page的指定修訂部分),這樣就可以像

至於你的問題:「我怎麼知道,如果我在主」 ......嗯,用樹枝是Git的工作流程的重要組成部分。你應該時刻注意你所在的分支 - 如果你拉動了變化,你想把它們拉到正確的分支!您可以看到所有分支的列表,其中當前簽出的分支爲星號,命令爲git branch。當前分支名稱也與git status的輸出一起打印。我強烈建議瀏覽要使用的命令頁面 - 這是慢慢提取一些知識的好方法。

而最後一個問題:HEAD是當前簽出分支的名稱。在這種情況下,你確實可以使用HEAD[email protected]{1},但使用分支會更健壯一些,因爲如果你去看看另一個分支。 HEAD現在是第二個分支,而[email protected]{1}現在是master - 不是你想要的!

爲了節省不少問題,請閱讀Git教程。有100萬在網絡上,例如:

+4

這比我的解決方案好:) – 2009-09-01 15:14:55

+1

Git可以做到嗎?! – Septagram 2014-01-11 17:49:53

+1

我知道這是舊的,但是......它應該是相反的:'git diff master @ {1} master',否則更改顯示爲「向後」,即插入成爲刪除等。 – ultracrepidarian 2014-03-11 16:46:47

34

說你做一個git拉像這樣:

$ git pull 
remote: Counting objects: 10, done. 
remote: Compressing objects: 100% (6/6), done. 
remote: Total 6 (delta 4), reused 0 (delta 0) 
Unpacking objects: 100% (6/6), done. 
From [email protected]:reponame 
    a407564..9f52bed branchname -> origin/branchname 
Updating a407564..9f52bed 
Fast forward 
.../folder/filename   | 209 ++++++++----- 
.../folder2/filename2  | 120 +++++++++++--------- 
2 files changed, 210 insertions(+), 119 deletions(-) 

你可以看到使用版本號改變了什麼的差異:

$ git diff a407564..9f52bed 
+4

你可以使用''git diff --stat a407564..9f52bed'獲得摘要「或者只是一個總結''git diff --summary a407564..9f52bed'」 – 2009-09-01 17:13:32

+13

對於新版本的git,git pull不再輸出已更改的文件列表。要做到這一點,你需要做'git pull --stat' – user10 2011-02-14 14:49:12

2

這樣的一種哈克,但它會允許你使用圖形化的工具,如gitkgitggit-gui

git pull 
git reset [email protected]{1} 
gitg (or gitk or whatever tool you like) 

最upvotes答案給出了使用Git的最好方式工具,但我使用這種方法,因爲我可以使用GUI的工具來查看更改:P

然後我會再做一個git checkout .,然後再做git pull,在我適當地拉和合並,但我重視能夠檢查GUI中的差異足以處理額外的兩個步驟。

5

1.我怎麼知道我是否要拉高手?我所做的只是「git pull」。

命令本身的工作原理是這樣的:

git pull [options] [<repository> [<refspec>…]] 

和每默認是指當前分支。您可以通過使用

git branch -a 

檢查你的分支將列出本地和遠程分支機構像如這樣(由一個---爲本地和遠程之間的分隔,以使其更清晰)

*master 
foo 
bar 
baz 
--- 
origin/HEAD -> origin/master 
origin/deploy 
origin/foo 
origin/master 
origin/bar 
remote2/foo 
remote2/baz 

當然後你看看一個遠程回購,你會看到你指的是什麼:

git remote show origin 

將列出如下所示:

* remote origin 
    Fetch URL: ssh://[email protected]:12345/username/somerepo.git 
    Push URL: ssh://[email protected]:12345/username/somerepo.git 
    HEAD branch: master 
    Remote branches: 
    foo tracked 
    master tracked 
    Local refs configured for 'git push': 
    foo pushes to foo (up to date) 
    master pushes to master (fast-forwardable) 

所以很容易確定從哪裏拔出來並推送到哪裏。

3.如何查看特定文件中的細節更改?

4.如何通過上次git pull再次看到彙總輸出的變化?

最簡單和最優雅的方式(IMO)是:

git diff --stat [email protected]{1}..master --dirstat=cumulative,files 

這會給你兩個信息塊了最近的變化拉工作的當前狀態。示例輸出(I加入---作爲分頻器--stat--dirstat輸出之間,以使之更加清楚):

mu-plugins/media_att_count.php      | 0 
mu-plugins/phpinfo.php        | 0 
mu-plugins/template_debug.php      | 0 
themes/dev/archive.php        | 0 
themes/dev/category.php       | 42 ++++++++++++++++++ 
.../page_templates/foo_template.php    | 0 
themes/dev/style.css        | 0 
themes/dev/tag.php         | 44 +++++++++++++++++++ 
themes/dev/taxonomy-post_format.php    | 41 +++++++++++++++++ 
themes/dev/template_parts/bar_template.php   | 0 
themes/someproject/template_wrappers/loop_foo.php | 51 ++++++++++++++++++++++ 
--- 
11 files changed, 178 insertions(+) 
    71.3% themes/dev/ 
    28.6% themes/someproject/template_wrappers/ 
100.0% themes/ 
    27.2% mu-plugins/ 
    9.0% themes/dev/page_templates/ 
    9.0% themes/dev/template_parts/ 
    63.6% themes/dev/ 
    9.0% themes/someproject/template_wrappers/ 
    72.7% themes/