git:如何比较以前的版本更改后的文件拉?

当我运行“git pull”时,我经常想知道文件的最后一个版本和新文件之间的变化。 假设我想知道别人对某个文件的承诺。

这是怎么做的?

我假设它是“git diff”与提交x与提交y的一些参数,但我似乎无法获得语法。 我也发现“混帐日志”混淆了一下,不知道在哪里得到我的最新版本的文件的提交ID与新的。

有各种各样美妙的方式来指定提交 – 请参阅man git-rev-parse的指定修订部分以获取更多详细信息。 在这种情况下,你可能想要:

 git diff HEAD@{1} 

@{1}意思是“我指定的引用的前一个位置”,以便评估您之前签出的内容 – 就在拉之前。 如果你的工作树也有一些变化,你不想看到它们的差异,那么你可以在那里结束HEAD

我不确定你要求什么“我的最新版本的文件的提交ID” – 提交“ID”(SHA1哈希)是在输出的每个条目的顶部的40个字符的hex右边的git日志。 它是整个提交的散列,而不是给定的文件。 你真的不需要更多的 – 如果你想跨越拉只差一个文件,那么做

 git diff HEAD@{1} filename 

这是一个普遍的事情 – 如果你想知道在一个给定的提交文件的状态,你指定提交和文件,而不是一个特定于该文件的ID /散列。

我喜欢用:

 git diff HEAD^ 

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

 git diff HEAD^ -- /foo/bar/baz.txt 

如果你做了一个直接的git pull那么你将被“快速转发”或合并来自远程存储库的未知数量的提交。 这只是一个动作,所以最后一次提交是在pull之前的最后一个提交,并且可以作为HEAD@{1}访问。 这意味着你可以这样做:

 git diff HEAD@{1} 

不过,我强烈build议,如果这是你发现自己做了很多,那么你应该考虑只是做一个git fetch和检查手动合并或重新绑定之前获取分支。 例如,如果你是主人,并打算拉起原产地/主人:

 git fetch git log HEAD..origin/master # looks good, lets merge git merge origin/master