How to pull into not-the-current-branch?

GitGit PullGit CheckoutGit Stash

Git Problem Overview


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?)

Git Solutions


Solution 1 - Git

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

Solution 2 - Git

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.

Solution 3 - Git

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.

Running hub sync safely updates all of your local branches to the version on the remote.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSteve BennettView Question on Stackoverflow
Solution 1 - GitpkambView Answer on Stackoverflow
Solution 2 - GittorekView Answer on Stackoverflow
Solution 3 - GitpkambView Answer on Stackoverflow