git:拉动后如何区分更改的文件与以前的版本?

dou*_*oug 112 git

当我运行"git pull"时,我经常想知道文件的最后一个版本和新文件之间发生了什么变化.假设我想知道其他人对特定文件的承诺.

怎么做的?

我假设它是"git diff",其中包含commit x与commit y的一些参数,但我似乎无法获得语法.我还发现"git log"有点令人困惑,我不知道在哪里可以获得我最新版本文件的提交ID与新文件的提交ID.

Cas*_*bel 146

有各种很好的方法可以指定提交 - 有关详细信息,请参阅指定修订部分man git-rev-parse.在这种情况下,您可能想要:

git diff HEAD@{1}
Run Code Online (Sandbox Code Playgroud)

@{1}意思是"我指定裁判的前面位置",这样评价到先前查了一下出来-只是前拉.HEAD如果您的工作树中也有一些更改,并且您不希望看到它们的差异,那么您可以在那里结束.

我不确定你要求的是"我最新版本文件的提交ID" - 提交"ID"(SHA1哈希)是输出中每个条目顶部的40个字符的十六进制git日志.它是整个提交的哈希值,而不是给定文件的哈希值.你真的不需要更多 - 如果你想在拉动中只差异一个文件,那么

git diff HEAD@{1} filename
Run Code Online (Sandbox Code Playgroud)

这是一般性的 - 如果您想了解给定提交中文件的状态,请指定提交和文件,而不是特定于文件的ID /哈希.


小智 56

我喜欢用:

git diff HEAD^
Run Code Online (Sandbox Code Playgroud)

或者,如果我只想区分特定文件:

git diff HEAD^ -- /foo/bar/baz.txt
Run Code Online (Sandbox Code Playgroud)

  • -1:`HEAD ^`是父提交,而不是`pull`之前的提交 (5认同)
  • @MichaelWild它可能不是提问者所要求的,但是当我找到它时,它就是我所寻找的.这对我很有用.Upvoting. (3认同)

CB *_*ley 14

如果您直接执行,git pull那么您将"快进"或从远程存储库合并未知数量的提交.这可以作为一个动作发生,因此您在拉动之前的最后一次提交将是reflog中的最后一个条目,并且可以作为HEAD@{1}.这意味着您可以:

git diff HEAD@{1}
Run Code Online (Sandbox Code Playgroud)

但是,我强烈建议如果这是你发现自己做了很多事情,那么git fetch在手动合并或重新定位之前你应该考虑做一个并检查获取的分支.例如,如果你是主人并且想要拉入原点/主人:

git fetch

git log HEAD..origin/master

 # looks good, lets merge

git merge origin/master
Run Code Online (Sandbox Code Playgroud)