Git 提取后的细节更改

在 Git 提取之后,它的输出会给出变更量的总结。

How can I see each or some of the files detailed changes?

好了,我要问杰弗米一个问题:

  1. 我怎么知道我是不是在拉主人? 我所做的就是“ Git pull”。

  2. Master 指向什么? master 和 HEAD (Git 的两个默认头部)之间的区别是什么?

  3. 如何查看特定文件中的详细更改?

  4. 如何再次看到最后一个 git pull在汇总输出中的变化?

  5. git diffgit whatchanged有什么不同?

51923 次浏览

假设你在向主人拉。您可以通过 master@{1}(或者甚至是 master@{10.minutes.ago}; 参见 Git-rev-parse 手册页的指定修订部分)引用 master的前一个位置,这样您就可以执行以下操作

  • 查看所有更改: git diff master@{1} master

  • 查看给定文件的更改: git diff master@{1} master <file>

  • 查看给定目录中的所有更改: git diff master@{1} master <dir>

  • 再次查看更改摘要: git diff --stat master@{1} master

至于您的问题“如何知道我是否在 master”... ... 好吧,使用分支是 Git 工作流的一个重要部分。您应该始终知道您在哪个分支上-如果您拉动了更改,您希望将它们拉到正确的分支上!您可以通过命令 git branch看到所有分支的列表,其中当前签出的分支带有星号。当前分支名称也与 git status的输出一起打印出来。我强烈建议浏览命令的手册页来使用——这是一个慢慢学习一些知识的好方法。

最后一个问题: HEAD是当前签出分支的名称。您确实可以在这个上下文中使用 HEADHEAD@{1},但是使用分支会更加健壮一些,因为如果您去检查另一个分支的话。HEAD现在是第二个分支,而 HEAD@{1}现在是 master-不是你想要的!

为了避免问很多像这样的小问题,您可能应该看一下 Git 教程。例如,网络上有100万人:

假设你像这样拉一下:

$ 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 git@dev.example.com: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

这种方法有点古怪,但是它允许你使用图形化工具,比如 gitkgitg或者 git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

升级最多的答案给出了使用 git 工具的最佳方法,但我使用这种方法是因为我可以利用 GUI 工具来查看更改: P

然后我会有一个额外的步骤,做一个 git checkout .,然后再做一个 git pull,以便我正确地拉和合并,但我重视的能力,检查差异的 GUI 足以处理额外的两个步骤。

我怎么知道我是不是在拉主人呢? 我所做的就是“ 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://git@git.example.com:12345/username/somerepo.git
Push  URL: ssh://git@git.example.com: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 拉取时汇总输出的变化?

最简单的和 最优雅的方式(imo)是:

git diff --stat master@{1}..master --dirstat=cumulative,files

这将为您提供关于上次拉动与当前工作状态之间的更改的两个信息块。示例输出(我在 --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/