Git拉动后的细节变化


130

拉动Git后,其输出将给出变化量的摘要。

如何查看每个或某些文件的详细更改?

好的,这是我对Jefromi的问题:

  1. 我怎么知道我是否正在掌握?我所做的就是“ git pull”。

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

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

  4. 如何git pull再次查看摘要输出中的更改?

  5. git diff和之间有什么区别git whatchanged


4
好的,通过编辑重复添加新问题的方式与使用系统的方式不完全相同。您也可以通过查看手册页或尝试一些方法来轻松地回答很多问题。例如,git diff清楚地输出一个diff,而git whatchanged清楚地输出一个提交信息列表,每个列表都包含更改文件的列表。
卡斯卡贝尔2009年

可能是因为您的代表人数较少。
TED

@TED仅需50个代表即可发表评论,而仅需15个代表即可发表评论。
卡斯卡贝尔2009年

在装有Ubuntu的笔记本电脑上,有时无法正常工作。我暂时在Centos上找到了另一台计算机,并对此发表评论。在两台计算机上,我都使用Firefox。
蒂姆(Tim)

很奇怪。您可能想要转到meta,看看是否是已知问题/报告它。
卡斯卡贝尔

Answers:


204

假设您要掌握。您可以参考masterby 的前一个位置master@{1}(或什至master@{10.minutes.ago};请参阅git-rev-parse手册页的指定修订版部分),以便您可以执行以下操作

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

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

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

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

至于您的“我如何知道自己是否掌握”的问题……那么,使用分支是Git工作流程的重要组成部分。您应该始终知道您在哪个分支上-如果您撤消更改,则想将它们拖到正确的分支!您可以使用命令查看所有分支的列表,其中当前已检出的分支带有星号git branch。当前分支名称也会与输出一起输出git status。我强烈建议略读要使用的命令的手册页-这是慢慢学习一些知识的好方法。

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

为了省去问很多类似这样的小问题,您可能应该看看Git教程。例如,网络上有一百万:


5
这比我的解决方案要好:)
Christian Oudard

2
我知道这是旧的,但...这应该是周围的其他方法:git diff master@{1} master,否则显示的变化“倒退”,即插入成为缺失等
ultracrepidarian

2
git diff master@{1} master没有为我工作,而是git diff master~1 master为我工作。
unrealsoul007

5
@ unrealsoul007然后您的情况有所不同。master〜1是一个主机当前指向的父提交;您将仅看到该提交的差异。master @ {1}是先前指向的提交主机;例如,如果您刚拉,那将是此处拉动之前的主控位置。如果它没有做到这一点,那么自从您退出以来,您可能已经做了其他一些事情要掌握。尝试git reflog master了解什么。
卡斯卡贝尔

@Jefromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.我一直收到此错误。尽管git reflog firstDesign具有此输出
unrealsoul007

52

假设您像这样进行git pull:

$ 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

5
您可以使用“ git diff --stat a407564..9f52bed”或仅用于摘要“ git diff --summary a407564..9f52bed” 来获得摘要
JakubNarębski09年

14
对于较新版本的git,git pull不再输出已更改文件的列表。为此,您需要执行“ git pull --stat”
user10 2011年

6

1.我怎么知道我是否正在掌握?我所做的就是“ git pull”。

该命令本身如下所示:

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

并且默认情况下是指当前分支。您可以使用来检查分支机构

git branch -a

这将列出您的本地和远程分支,例如这样(--- 在本地和远程之间添加了as分隔符,以使其更加清晰)

*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 pull再次产生的摘要输出变化?

最简单,最优雅的方法(imo)是:

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

这将为您提供有关上一次拉动和当前工作状态之间的更改的两段信息。输出示例(我-----stat--dirstat输出之间添加了as分隔符,以使其更加清晰):

 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/

2

这种方式有点骇人听闻,但可让您使用诸如gitkor gitg或or的图形工具git-gui

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

投票最多的答案提供了使用git工具的最佳方法,但我使用了此方法,因为这样我便可以使用带有GUI的工具来查看更改了:P

然后,我将执行额外的步骤,git checkout .然后再进行git pull一次操作,以使我正确地进行合并和合并,但是我非常重视能够检查GUI中的差异以应对额外的两个步骤的能力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.