Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 384
Steve Bennett Avatar asked Mar 17 '12 06:03

Steve Bennett


People also ask

How do I pull from a specific branch remote?

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.

Can we take pull from one branch to another?

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.


2 Answers

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

like image 182
pkamb Avatar answered Oct 11 '22 15:10

pkamb


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.

like image 32
torek Avatar answered Oct 11 '22 15:10

torek