I would use git restore (available since Git 2.23):
git restore --source otherbranch path/to/myfile.txt
Why is better than other options?
- by default
git restore modify files only in working directory.
git checkout otherbranch -- path/to/myfile.txt copy file to working directory (your files on disk) but also to staging area. It's similar effect as if you would copy this file manually and executed git add on it. git restore by default change only working directory.
To get the same result as for git checkout otherbranch -- path/to/myfile.txt you can write git restore --source otherbranch --staged --worktree path/to/myfile.txt
- by default
git restore deletes files from working directory when they are missing in other branch
git restore can be used to restore the whole folder with git restore --source otherbranch path/to/dir. You can do similar operation with git checkout but git restore by default will delete files that are missing on otherbranch. To get git checkout behaviour use --overlay option.
For example, if there are fewer files on otherbranch than in the current working directory (and these files are tracked) without --overlay option git restore will delete them. But this is good default behaviour, you most likely want the state of directory to be "the same like in otherbranch", not "the same like in otherbranch but with additional files from my current branch".
To get the same result as for git checkout otherbranch -- path/to/dir you can write git restore --source otherbranch --staged --worktree --overlay path/to/dir
git restore doesn't use shell redirection to create file (Powershell only problem)
git show otherbranch:path/to/myfile.txt > path/to/myfile.txt uses standard shell redirection. If you use PowerShell then there might be problem with text encoding or you could get broken file if it's binary. With git restore changing files is done all by the git executable.