在其他Git分支中查看文件而无需更改分支


620

是否可以在不检查分支的情况下在git分支中打开文件?怎么样?

本质上,我希望能够在github页面分支中打开文件而无需始终切换分支。我不想修改它,只想查看它。


15
所有答案都错过了您需要使用以下命令指定文件完整路径的事实git showstackoverflow.com/questions/610208/…stackoverflow.com/questions/2364147/…–
VonC

15
这些天来,您可以git show a1b35:./file.txt用来使用相对路径。
史蒂夫·贝内特

2
@VonC-谢谢分支感知选项卡的完成:)
路加福音

更有趣的,可以显示差异git diff <other_branch> <path>
斯瓦沃米尔Lenart

上面带有“ a1b35”的相对文件示例,即分支名称-因此,当然要在其中放置您自己的分支名称。
loneRanger

Answers:


876

这应该工作:

git show branch:file

其中branch可以是任何引用(分支,标签,HEAD等),而file文件的完整路径。要导出它,您可以使用

git show branch:file > exported_file

您还应该查看VonC对一些相关问题的回答:

2015年1月19日更新:

如今,您可以使用相对路径git show a1b35:./file.txt


22
您也可以在vim中打开文件:(git show branch:file | vim -注意“ |”管道,以及vim命令后的短划线:vim -
Greg Burghardt 2014年

3
@GregBurghardt什么对我的工作原理是类似的东西vim -c "set syntax=html" -
raphaëλ

2
我希望我能不止一次地赞成这个答案。
文森特·富蒙德(Finmond Fourmond),

2
这仅显示本地分支,不显示服务器上的所有分支
William Entriken

3
@FullDecent,我可以使用origin/my_remote_branch它。还是您指的是实际的服务器版本?如果需要,您只需git fetch要先。
rsmith54

53
git show somebranch:path/to/your/file

您还可以创建多个文件并将它们串联起来:

git show branchA~10:fileA branchB^^:fileB

您不必提供文件的完整路径,可以接受相对路径,例如:

git show branchA~10:../src/hello.c

如果要在本地目录中获取文件(仅还原一个文件),可以签出:

git checkout somebranch^^^ -- path/to/file

38

一种查看文件的简单,新手友好的方式: git gui browser <branch>它使您可以浏览任何文件的内容。

也位于的“文件”菜单中git gui。大多数其他更高级的GUI包装器(Qgit,Egit等)也提供浏览/打开文件的功能。


此命令的结果是“ git:'gui'不是git命令。请参阅'git --help'。我是新手;这是怎么回事?
Scott Biggs 2015年

2
它实际上有效(令我惊讶),请参阅git-scm.com/docs/git-gui-我使用git版本2.5.2.windows.1
anhoppe

这个答案很有帮助!谢谢。应该提到在Windows上使用git bash即时通讯。
合并

是否可以将Ranger用作git gui?
激进分子'18

1
@ScottBiggs您不是新手,您使用的是非标准设置。
Ashnur

20

如果您使用的是Emacs,则可以键入C-x v ~以查看当前正在编辑的文件的其他修订版本(标签,分支和哈希都可以使用)。


有没有办法在Vim中做到这一点?(我对插件开放。)
NHDaly,2016年

4

将以下内容添加到您的~/.gitconfig文件中

[alias]
  cat = "!git show \"$1:$2\" #"

然后试试这个

git cat BRANCHNAME FILEPATH

我个人更喜欢使用不带冒号的单独参数。为什么?这种选择反映了该checkout命令的参数,我倾向于经常使用它,因此我发现它比该show命令的二元冒号分隔的参数容易记住。


谢谢,那真是令人难忘。
旅行者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.