ChatGPT解决这个技术问题 Extra ChatGPT

在不同的 Git 分支中查看文件而不更改分支

是否可以在不签出该分支的情况下在 git 分支中打开文件?如何?

本质上,我希望能够在我的 github pages 分支中打开一个文件,而无需一直切换分支。我不想修改它,只想查看它。

所有答案都忽略了您需要使用 git show 指定文件的完整路径的事实:stackoverflow.com/questions/610208/…stackoverflow.com/questions/2364147/…
现在,您可以使用 git show a1b35:./file.txt 来使用相对路径。
@VonC - 谢天谢地分支感知选项卡完成:)
更有趣的可能是显示差异git diff <other_branch> <path>
上面带有“a1b35”的相关文件示例,即分支名称——所以当然要在其中放置您自己的分支名称。

C
Community

这应该有效:

git show branch:file

其中 branch 可以是任何 ref(branch、tag、HEAD、...),而 file 是文件的完整路径。要导出它,您可以使用

git show branch:file > exported_file

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

如何从 Git 中的特定修订中检索单个文件?

如何从另一个分支只获取一个文件

更新 2015-01-19:

现在您可以将相对路径与 git show a1b35:./file.txt 一起使用。


您也可以在 vim 中弹出打开的文件:git show branch:file | vim -(注意“|”管道,以及 vim 命令后的尾随破折号:vim -
@GregBurghardt 对我有用的是类似于 vim -c "set syntax=html" -
老实说,我希望我能不止一次地支持这个答案。
这仅显示本地分支,它不显示服务器上的所有分支
@FullDecent,我可以很好地使用 origin/my_remote_branch 。还是您的意思是实际的服务器版本?如果你想这样做,你只需要先git fetch
S
Stabledog
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

对于 Windows 用户:这是 git bash for Windows 不知道规范化大小写和路径分隔符的少数几个地方之一。即您必须完全匹配大小写并使用 / 而不是 \ - 即使 cmd 的完成会尝试告诉您相反的情况。
i
inger

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

它也在 git gui 的文件菜单中。大多数其他更高级的 GUI 包装器(Qgit、Egit 等)也提供浏览/打开文件。


此命令导致“git:'gui' 不是 git 命令。请参阅 'git --help'。我是新手;这是怎么回事?
它确实有效(令我惊讶),请参阅 git-scm.com/docs/git-gui - 我使用 git 版本 2.5.2.windows.1
这个答案很有帮助!谢谢。应该提到我在 Windows 上使用 git bash。
是否可以将 ranger 用作 git gui?
@ScottBiggs 您不是新手,您使用的是非标准设置。
l
legoscia

如果您使用 Emacs,您可以输入 C-x v ~M-x vc-revision-other-window 来查看您当前正在编辑的文件的不同版本(标签、分支和散列都有效)。


有没有办法在 Vim 中得到这个? (我对插件持开放态度。)
a
akuhn

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

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

然后试试这个

git cat BRANCHNAME FILEPATH

我个人更喜欢没有冒号的单独参数。为什么?这个选择反映了我经常使用的 checkout 命令的参数,因此我发现它比 show 命令的 bizarro 冒号分隔的参数更容易记住。


Bash 完成 在保存 .git/config 后立即使用 git 别名,例如保存配置并尝试 git cat ma[tab-tab] docke[tab-tab]。谢谢,@akuhn