当我运行"git pull“时,我经常想知道文件的上一个版本和新版本之间发生了什么变化。比方说,我想知道其他人提交给某个特定文件的内容。
这是怎么做到的呢?
我假设它是"git diff“,带有提交x和提交y的一些参数,但我似乎无法获得语法。我还发现"git log“有点混乱,并且不确定从哪里获得我的最新版本文件的提交ID与新版本的提交ID。
发布于 2010-03-12 04:14:07
有各种奇妙的方法可以指定提交-更多详细信息,请参阅man git-rev-parse
的specifying revisions部分。在这种情况下,您可能需要:
git diff HEAD@{1}
@{1}
的意思是“我指定的ref的前一个位置”,所以它的计算结果是您之前检出的内容-就在pull之前。如果您的工作树中也有一些更改,并且您不想看到它们之间的差异,那么您可以在末尾添加HEAD
。
我不知道你问的“我最新版本文件的提交ID”是什么--提交"ID“(SHA1散列)是在git log输出中每个条目的顶部有40个字符的十六进制。它是整个提交的散列,而不是给定文件的散列。你并不真的需要更多-如果你想在整个过程中只需要一个文件,那么
git diff HEAD@{1} filename
这是一件很普遍的事情--如果您想要了解给定提交中文件的状态,只需指定提交和文件,而不是指定特定于该文件的ID/散列。
发布于 2012-04-23 14:09:37
我喜欢使用:
git diff HEAD^
或者如果我只想比较一个特定的文件:
git diff HEAD^ -- /foo/bar/baz.txt
发布于 2010-03-12 04:14:52
如果你直接执行git pull
,那么你要么“快进”,要么合并来自远程存储库的未知数量的提交。但是,这是作为一个操作发生的,所以在拉取之前的最后一次提交将是引用日志中的最后一个条目,并且可以作为HEAD@{1}
进行访问。这意味着您可以执行以下操作:
git diff HEAD@{1}
然而,我强烈建议,如果你发现自己做了很多事情,那么你应该考虑只做一个git fetch
,并在手动合并或重新建立基础之前检查所获取的分支。例如,如果你在master上,并且我们要拉入/master:
git fetch
git log HEAD..origin/master
# looks good, lets merge
git merge origin/master
https://stackoverflow.com/questions/2428270
复制相似问题