如何在Git中将一个文件区分为任意版本?

Chr*_*s K 304 git

我怎样才能将文件pom.xml从主分支区分到Git中的任意旧版本?

Mar*_*air 322

你可以做:

git diff master~20:pom.xml pom.xml
Run Code Online (Sandbox Code Playgroud)

...比较您当前pom.xmlmaster20个修订版之前通过第一个父级的那个.master~20当然,您可以使用提交的对象名称(SHA1sum)或指定修订许多其他方法中的任何一种来替换.

请注意,这实际上是将旧pom.xml版本与工作树中的版本进行比较,而不是提交的版本master.如果你想要,那么你可以改为:

git diff master~20:pom.xml master:pom.xml
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不仅适用于文件,它也适用于(子)目录,例如`git diff <revision>:foo/HEAD:foo /`. (12认同)
  • 另请注意,在Windows上,如果使用修订说明符,则需要对目录使用正斜杠,否则git会给出有关该修订中不存在的文件/目录的错误. (2认同)

Ben*_*ack 134

git diff <revision> <path>
Run Code Online (Sandbox Code Playgroud)

例如:

git diff b0d14a4 foobar.txt
Run Code Online (Sandbox Code Playgroud)

  • @user1663987 只传递相对于项目根目录的完整路径:`git diff &lt;revision&gt; root/path/file`。 (2认同)

Ger*_*rdo 38

如果您想查看单个文件的最后一次提交之间的区别,您可以执行以下操作:

git log -p -1 filename
Run Code Online (Sandbox Code Playgroud)

这将为您提供git中文件的差异,而不是比较您的本地文件.

  • 这没有返回任何东西 (2认同)

Jua*_* NR 18

要查看上次提交中文件中的更改内容:

git diff HEAD~1 path/to/file.
Run Code Online (Sandbox Code Playgroud)

您可以将数字(~1)更改为要与其进行区分的第n次提交.

  • 这不行!致命:不明确的参数“HEAD~1”:未知修订版或路径不在工作树中。使用“--”分隔路径和修订版本 (2认同)

Ali*_*eza 7

为了与当前的 5 次提交进行比较,两者都在master,只需执行以下操作:

git diff master~5:pom.xml master:pom.xml
Run Code Online (Sandbox Code Playgroud)

您也可以参考提交散列号,例如,如果散列号是x110bd64,您可以执行以下操作以查看差异:

git diff x110bd64 pom.xml
Run Code Online (Sandbox Code Playgroud)


小智 6

通用语法:

$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
Run Code Online (Sandbox Code Playgroud)

对于您的仓库中任何位置名为"FileName.xml"的所有文件.

注意" - "和"**"之间的空格

回答你的问题:

$git checkout master
$git diff oldCommit..HEAD -- **pom.xml 
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml 
Run Code Online (Sandbox Code Playgroud)

和git一样,你可以使用标签/ sha1 /"HEAD ^"来识别提交.

在Ubuntu上使用git 1.9.1进行测试.


rob*_*uck 6

如果提交都不是你的HEAD那么bash的大括号扩展证明非常有用,特别是如果你的文件名很长,上面的例子:

git diff master~20:pom.xml master:pom.xml
Run Code Online (Sandbox Code Playgroud)

会成为

git diff {master~20,master}:pom.xml
Run Code Online (Sandbox Code Playgroud)

更多关于使用bash 进行Brace扩展.


Cat*_*rta 5

git diff -w HEAD 原点/主路径/到/文件