How to git fetch and checkout without creating a remote branch locally?
-
01-06-2021 - |
Question
Use Case: I have some repo on GitHub, someone forked it and added new feature and initiated pull request. I can't automatically merge it because there are some minor problems I would like to fix first.
It's one-time activity I'll never need this remote repository, so I don't want to create local remote
branch.
Basically I would like to do:
- copy files from remote repository and rewrite my own (without any git-related information).
- see difference with my current head.
- fix something and commit it.
How to do that?
git checkout git://github.com/xxx/xxx.git
doesn't works at all (fail with error)
git fetch git://github.com/xxx/xxx.git
works but doesn't update anything
Solution
You want to use FETCH_HEAD
.
whenever you run git fetch ...
a magic reference called FETCH_HEAD
is created.
Try for example:
git fetch git://github.com/xxx/xxx.git branch_name && git merge FETCH_HEAD
OTHER TIPS
For any Git server:
git fetch git://host.com/path/to/repo.git remote-branch-name:local-branch-name
git checkout local-branch-name
Another neat method (at least on/from Github) is fetching like this:
git fetch repo pull/7324/head:pr-7324
Where:
repo
points to the remote repo, e.g. git://github.com/xxx/xxx.git
.
pull/7324/head
is the remote pull request.
pr-7324
is the local pull-request branch.
Then you can use the local PR branch to do whatever you want with it.
Source: adapted from this discussion.