如何将一个文件(比如pom.xml
)从主分支转换为Git中的任意旧版本?如何区分一个文件到Git中的任意版本?
回答
你可以这样做:
git diff master~20:pom.xml pom.xml
...比较当前的pom.xml
通过第一个父一个从master
20次年前修订。当然,您可以将master~20
替换为提交的对象名称(SHA1sum)或任何many other ways of specifying a revision。
请注意,这实际上是将旧的pom.xml
与工作树中的版本进行比较,而不是在master
中提交的版本。如果你想要的,那么你可以做以下代替:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
例如:
git diff b0d14a4 foobar.txt
不适用于版本1.7.11如果文件不在当前目录中。例如:'git diff f76d078 test/Config'产生“错误:无法访问'test/f76d078'” – simpleuser 2013-12-04 21:21:58
@ user1663987只传递一个相对于项目根目录的完整路径:'git diff
test/Config *是*相对于根目录(因为test是根目录的子目录)。但那么你的例子根/路径/文件似乎包含根? – simpleuser 2014-06-29 05:55:09
如果你想看到最后的区别提交一个文件,你可以这样做:
git log -p -1 filename
这会给你git中文件的差异,并不是比较你的本地文件。
这不会返回任何东西 – 2014-10-17 12:05:15
@AndreiCristianProdan然后你没有改变那里。您可以逐步增加'-1',直到获得更改。 – kaiser 2014-10-30 11:30:54
看看发生了什么在一个文件中改变了过去的承诺:
git diff HEAD~1 path/to/file.
您可以更改数字(约1)至第n个承诺要与把分差
这个答案实际上只是[这个更一般的答案](http://stackoverflow.com/a/5586434/456814)的一个特例,其中'HEAD〜1'代替了'
这不行! 致命:模糊论点'HEAD〜1':未知版本或路径不在工作树中。 使用' - '分隔修订版本的路径 – 2014-10-17 12:04:16
git的差异-w HEAD产地/主路径/到/文件
对于有意从GitHub做同样的人,看到comparing commits across time。
如果您需要diff的在例如一个存储一个文件,你可以做
git diff [email protected]{0} -- path/to/file
通用语法:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
名为“filename.xml中”所有文件的任何地方在你的回购。
公告之间的空间 “ - ” 和 “**”
回答你的问题:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
一如既往地与git的,你也可以用tag/SHA1 /“HEAD ^“来确认提交。
在Ubuntu上使用git 1.9.1进行测试。
如果你正在寻找一个特定的DIFF承诺,并要使用GitHub的用户界面,而不是命令行(说你要链接到其他人)的,你可以这样做:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
例如:
注意在右上角的上一页和下一页链接,让您通过在提交的所有文件浏览。
这只适用于特定的提交,但不适用于任何两个任意版本之间的比较。
git diff master~20 -- pom.xml
如果你不在主分支也可以工作。
如果没有提交你的脑袋,然后bash的括号扩展证明非常有用的,特别是如果你的文件名很长,上面的例子:
git diff master~20:pom.xml master:pom.xml
将成为
git diff {master~20,master}:pom.xml
更多Brace expansion与bash。
为了比较,以5提交到当前,无论在master
,只是简单地做:
git diff master~5:pom.xml master:pom.xml
你也可以参考提交哈希数字,例如,如果哈希号码是x110bd64
,你可以做这样看到的差异:
git diff x110bd64 pom.xml
- 1. 如何区分git中特定版本的文件?
- 2. 如何合并一个Git分支到多个版本分支
- 3. 如何将git文件恢复到其暂存区版本?
- 4. 在git分支中'固定'一个文件的特定版本
- 5. 如何拉取(签出)Git版本控制中的任何一组文件?
- 6. 如何一个git子模块的文件夹`.git`发送到父版本库git的`/模块/`文件夹?
- 7. Git版本分别控制版本库中的文件
- 8. 如何在过去的两个任意版本之间注入一个版本?
- 9. 对于一个文件,我该如何回到以前的Git版本?
- 10. 是否有可能使用Git找到两个任意文本文件之间的区别?
- 11. Git:将旧版本的文件应用到分支
- 12. 如何将旧版本合并到git中分支的头部?
- 13. 在git中,我如何找到创建分支的版本?
- 14. 如何将非版本控制的分支导入到git中?
- 15. 如何在一个版本中确定文件的文本块来自以前版本中的哪个文件?
- 16. SonarQube:我如何比较任意版本?
- 17. 如何比较任意版本号?
- 18. GIT版本库中的GIT分支版本
- 19. 在git仓库中创建一个文件的每个版本的副本
- 20. Vim分步说明:如何通过任意分隔符排列任意文本?
- 21. 如何将版本化文件手动移动到git(版本控制)?
- 22. Git命令切换到任意的git仓库/分支?
- 23. 如何合并一个文件从分支到主Git
- 24. 如何在使用git的Intellij创意中检出旧版本?
- 25. 如何区分文本文件?
- 26. 如何回到Git的最新版本?
- 27. 如何将一个文本区域拆分为两个文本区域?
- 28. 如何在NERDTree中区分git忽略的文件和目录
- 29. 分区中的一个文本文件运行总计
- 30. git是否支持Subversion等任意属性的版本控制?
请注意,这不仅适用于文件,它也适用于(子)目录,例如'git diff:foo/HEAD:foo /'。 –
2014-07-05 18:59:59
另请注意,如果您使用的是版本说明符,那么在Windows上您需要使用正斜杠作为目录,否则git会给出关于该版本中不存在的文件/目录的错误。 – 2014-11-21 13:38:11
@DylanNissley或它会给你没有错误,没有差异。这就是我所看到的。无论如何,感谢您使用正斜杠而不是反斜杠的提示。 – 2017-08-17 20:05:24