How to create a local branch from an existing remote branch?

GitGit Branch

Git Problem Overview


I want to create a branch from an existing remote branch (let's say remote-A) and then commit the changes to the repository.

I have used the below commands to create a local branch from the existing remote-A

$git checkout remote-A

git branch
master
* remote-A

Now I have created local-B from Remote A using the below commands

git branch local-B
git checkout local-B

How do I make sure the changes I have on local-B are on top of remote-A so that when I push local-B to the remote repo, the changes are on top of remote-A?

Git Solutions


Solution 1 - Git

Old post, still I'd like to add what I do.

1. git remote add <remote_name> <repo_url>
2. git fetch <remote_name>
3. git checkout -b <new_branch_name> <remote_name>/<remote_branch_name>

This series of commands will

  1. create a new remote,
  2. fetch it into your local so your local git knows about its branches and all,
  3. create a new branch from the remote branch and checkout to that.

Now if you want to publish this new local branch to your remote and set the upstream url also

git push origin +<new_branch_name>

Also, if only taking in remote changes was your requirement and remote already exists in your local, you could have done, instead of step 2 and 3,

git pull --rebase <remote_name> <remote_branch_name>

and then opted for git mergetool (needs configurations separately) in case of any conflicts, and follow console instructions from git.

Solution 2 - Git

This should work:

git checkout --track origin/<REMOTE_BRANCH_NAE>

Solution 3 - Git

you want to create branch on base of remote-A, make changes on it and then push them on remote-A?

git checkout -b remote-A
git pull origin remote-A
git checkout -b remote-B

make changes on remote-B

 git commit -a -m 'describe changes on remote-B branch'

 git checkout remote-A  
 git merge remote-B  
 git push origin remote-A

Solution 4 - Git

I wanted to create a new local tracking branch from a remote git branch with a different name.

So I used this command:

git checkout -b <new_branch_name> --track <remote_name>/<remote_branch_name>

Example:

git checkout -b local-A --track origin/remote-A

I saw it in multiple comments to the above answers, but it's good to have it in the first sight.

Tracking branches are local branches that have a direct relationship to a remote branch. If you're on a tracking branch and type git pull, Git automatically knows which server to fetch from and which branch to merge in.

Solution 5 - Git

First we need to fetch the remote branch using

git fetch origin <remote-branch>

Then just create a new local branch to track the remote branch

git checkout -b <local-branch> origin/<remote-branch>

Replace origin with your remote name.

Solution 6 - Git

To make sure your changes are on top, you must not pull from remote. you must fetch and rebase. il will be something like this:

fetch->stash->rebase->stash pop->commit->push

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
QuestiontempuserView Question on Stackoverflow
Solution 1 - GitxplorerajView Answer on Stackoverflow
Solution 2 - Gitali jafargholiView Answer on Stackoverflow
Solution 3 - GitVladimir DimitrovView Answer on Stackoverflow
Solution 4 - GitOM BharatiyaView Answer on Stackoverflow
Solution 5 - Gityash1709View Answer on Stackoverflow
Solution 6 - GitionutioioView Answer on Stackoverflow