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

时间:2010-03-11 20:05:51

标签: git

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

这是怎么做到的?

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

3 个答案:

答案 0 :(得分:137)

有多种指定提交的精彩方法 - 有关详情,请参阅man git-rev-parse的{​​{3}}部分。在这种情况下,您可能需要:

git diff HEAD@{1}

@{1}表示“我指定的参考号的前一个位置”,以便评估您之前检出的内容 - 就在拉动之前。如果您的工作树中也有一些更改,并且您不希望看到它们的差异,则可以在那里添加HEAD

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

git diff HEAD@{1} filename

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

答案 1 :(得分:52)

我喜欢使用:

git diff HEAD^

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

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

答案 2 :(得分:13)

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

git diff HEAD@{1}

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

git fetch

git log HEAD..origin/master

 # looks good, lets merge

git merge origin/master