2009-09-01 173 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/