Say my current branch is myfeature. I want to get master up to date. Both git merge
git pull
always merge into the current branch, as far as I can tell.
Is there a way to merge changes from a remote branch (eg, origin/master) into a branch I'm not currently on (master)? I can think of one way:
git stash
git checkout master
git pull origin/master
git checkout myfeature
git stash apply
Is there a better one?
(It's possibly my whole question is wrong: would git fetch
automatically update master to match origin/master, if remote-tracking is enabled?)
You are correct that pull/merge only merges into the current branch.
You can, however, still use fetch. For instance (names below changed to protect the innocent but the hashes are real):
$ git branch | grep '^*'
* SOMEBRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
$ git fetch
7b9b8e5..1efca56 OTHER_BRANCH -> origin/OTHER_BRANCH
$ git rev-parse OTHER_BRANCH origin/OTHER_BRANCH
7b9b8e57cf19964b60ebda0f03a1d5da3de9e2fe
1efca56c08b7a0f511a3951195656a798c56aa62
In this case, fetch
updated a bunch of origin/ branches. None of the local branches were updated (git rev-parse
output for those remains the same) but the new commits are now in the repo and can be viewed (git log origin/OTHER_BRANCH
, gitk --all
, etc).
Depending on your needs, this might be sufficient. In particular you can see what needs to be applied from origin/master
onto master
, all without leaving your current branch.
git fetch -u origin master:master
Merge, update, and pull Git branches without using checkouts
git fetch -u <remote> <remoteBranch>:<localBranch>
The -u
ensures that the command still works even if you have the given branch checked out.
I've begun using github's hub sync
helper to automate this process, rather than relying on fetching individual branches that change between the various repos you're working on:
hub is an extension to command-line git that helps you do everyday GitHub tasks without ever leaving the terminal. https://hub.github.com/
$ hub sync
- If the local branch is outdated, fast-forward it;
- If the local branch contains unpushed work, warn about it;
- If the branch seems merged and its upstream branch was deleted, delete it.
来源:https://stackoverflow.com/questions/9747718/how-to-pull-into-not-the-current-branch