当我运行“git pull”时,我经常想知道文件的最后一个版本和新文件之间发生了什么变化。假设我想知道其他人对特定文件的承诺。
这是怎么做到的?
我假设它是“git diff”,其中包含commit x与commit y的一些参数,但我似乎无法获得语法。我还发现“git log”有点令人困惑,我不知道从哪里获取我最新版本文件的提交ID与新文件的提交ID。
答案 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