Git pull origin <branch> overwrites master?

Jeff picture Jeff · May 10, 2013 · Viewed 64k times · Source

I have a repository on Github, aav1

On my laptop I have two branches, one called master and one called vs12up The master branch was when the software was Visual Studio 2008, vs12up is converted to Visual Studio 2012.

On my laptop everything seems fine and I pushed the new branch to github, appears correct.

On my desktop I tried to pull the remote branch:

git pull origin vs12up

It wrote the changes to my master branch on the desktop, git log shows the commits made on the vs12up branch, but git branch only shows master, which is the current branch.

How can I revert the changes to the master branch and pull the vs12up branch on my desktop to match the repository on my laptop?

Answer

earl picture earl · May 10, 2013

If you do a git pull with a remote branch name, it will fetch the remote branch and then merge it into your current local branch. So to undo that, you will first have to reset your local branch to the remote master, then create a new local vs12up branch from the corresponding remote branch.

  1. Reset your local master to match the remote repository's master (WARNING: be sure that you don't have any uncommitted changes you want to keep before issuing the following command):

    git reset --hard origin/master
    
  2. Fetch all remote branches into your local repository:

    git fetch origin
    
  3. Create a new local vsup12 branch from the remote vsup12 branch, and switch to this new local branch:

    git checkout -b vsup12 origin/vsup12
    

Note that when you subsequently just do a git pull while switched to the vsup12 branch, you'll fetch and merge the latest changes from the vsup12 branch on Github into your local vsup12