ChatGPT解决这个技术问题 Extra ChatGPT

View a file in a different Git branch without changing branches

Is it possible to open a file in a git branch without checking out that branch? How?

Essentially I want to be able to open a file in my github pages branch without switching branches all the time. I don't want to modify it, just want to view it.

All the answers missed the fact you need to specify the full path of the file with git show: stackoverflow.com/questions/610208/… and stackoverflow.com/questions/2364147/…
These days, you can use git show a1b35:./file.txt to use relative paths.
@VonC - thank goodness for branch-aware tab completion :)
more interesting could be showing differences git diff <other_branch> <path>
The relative file example above with "a1b35", that is the branch name -- so of course put your own branch name there.

C
Community

This should work:

git show branch:file

Where branch can be any ref (branch, tag, HEAD, ...) and file is the full path of the file. To export it you could use

git show branch:file > exported_file

You should also look at VonC's answers to some related questions:

How to retrieve a single file from specific revision in Git?

How to get just one file from another branch

UPDATE 2015-01-19:

Nowadays you can use relative paths with git show a1b35:./file.txt.


And you can pop the file open in vim as well: git show branch:file | vim - (Notice the "|" pipe, and the trailing dash after the vim command: vim -
@GregBurghardt what works for me is something similar to vim -c "set syntax=html" -
I wish I could upvote this answer more than once, honestly.
This ONLY shows local branches, it does NOT show all branches on server
@FullDecent, I was able to use origin/my_remote_branch fine with this. Or do you mean the actual server version? If you want that, you just need to git fetch first.
S
Stabledog
git show somebranch:path/to/your/file

you can also do multiple files and have them concatenated:

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

You do not have to provide the full path to the file, relative paths are acceptable e.g.:

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

If you want to get the file in the local directory (revert just one file) you can checkout:

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

For Windows users: This is one of the few places where git bash for Windows doesn't know to normalise case and path separators. i.e. You must match the case exactly and use / instead of \ - even though cmd's completion will try to tell you the opposite.
i
inger

A simple, newbie friendly way for looking into a file: git gui browser <branch> which lets you explore the contents of any file.

It's also there in the File menu of git gui. Most other -more advanced- GUI wrappers (Qgit, Egit, etc..) offer browsing/opening files as well.


This command results "git: 'gui' is not a git command. See 'git --help'. I'm a newbie; what's going on?
It actually works (to my surprise), see git-scm.com/docs/git-gui - I use git version 2.5.2.windows.1
This answer was very helpful! Thanks. Should mention that im using git bash on windows.
Is it possible to use ranger as git gui?
@ScottBiggs you are not a newbie, you are using a nonstandard setup.
l
legoscia

If you're using Emacs, you can type C-x v ~ or M-x vc-revision-other-window to see a different revision of the file you're currently editing (tags, branches and hashes all work).


Is there a way to get this in Vim? (I'm open to plug-ins.)
a
akuhn

Add the following to your ~/.gitconfig file

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

And then try this

git cat BRANCHNAME FILEPATH

Personally I prefer separate parameters without a colon. Why? This choice mirrors the parameters of the checkout command, which I tend to use rather frequently and I find it thus much easier to remember than the bizarro colon-separated parameter of the show command.


Bash completions works with git aliases immediately after .git/config was saved, e.g. save config and try git cat ma[tab-tab] docke[tab-tab]. Thx, @akuhn