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?)
If you have a single remote repository, then you can omit all arguments. just need to run git fetch , which will retrieve all branches and updates, and after that, run git checkout <branch> which will create a local copy of the branch because all branches are already loaded in your system.
Please make sure you have the correct access rights and the repository exists. You can only use pull if you want to merge another branch into the already checked out branch or if you want to update an already checked out branch.
git fetch -u origin master:master
Merge, update, and pull Git branches without using checkouts
git fetch -u <remote> <remoteBranch>:<localBranch>
The -u
or --update-head-ok
ensures that the command still works even if you have the given branch checked out, which otherwise gives the error:
fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With