How do I copy a version of a single file from one git branch to another?
I've got two branches that are fully merged together.
However, after the merge is done, I realise that one file has been messed up by the merge (someone else did an auto-format, gah), and it would just be easier to change to the new version in the other branch, and then re-insert my one line change after bringing it over into my branch.
So what's the easiest way in git to do this?
Run this from the branch where you want the file to end up:
git checkout otherbranch myfile.txt
git checkout <commit_hash> <relative_path_to_file_or_dir> git checkout <remote_name>/<branch_name> <file_or_dir>
Some notes (from comments):
- Using the commit hash you can pull files from any commit
- This works for files and directories
- overwrites the file myfile.txt and mydir
- Wildcards don't work, but relative paths do
- Multiple paths can be specified
git show commit_id:path/to/file > path/to/file
I ended up at this question on a similar search. In my case I was looking to extract a file from another branch into current working directory that was different from the file's original location. Answer:
git show TREEISH:path/to/file >path/to/local/file
What about using checkout command :
git diff --stat "$branch" git checkout --merge "$branch" "$file" git diff --stat "$branch"
Following madlep's answer you can also just copy one directory from another branch with the directory blob.
git checkout other-branch app/**
As to the op's question if you've only changed one file in there this will work fine ^_^
1) Ensure you're in branch where you need a copy of the file. for eg: i want sub branch file in master so you need to checkout or should be in master git checkout master
2) Now checkout specific file alone you want from sub branch into master,
git checkout sub_branch file_path/my_file.ext
here sub_branch means where you have that file followed by filename you need to copy.