Why do I need to explicitly push a new branch?

git push -u
git push new branch
git push new branch without changes
git branch
git push --mirror
git push --dry-run
git push --verbose
git push all branches

I am new in git and I am practicing. I created a local branch but I saw that when I did git push my branch was not uploaded to the repository. I had to actually do: git push -u origin --all. Why is this? Isn't a branch a new change to be pushed by default? Why do I need to run the second command?

git - Why do I need to explicitly push a new branch?, You can get a full list of remote references explicitly with git ls-remote [remote] , or git You can add it as a new remote reference to the project you're currently you write to — you have to explicitly push the branches you want to share. It is not required as an option to push a single branch, but is widely used because a lot of people do want to make the local branch track the remote branch they are pushing. – cpjolicoeur Jan 11 '17 at 14:05

You don't, see below

I find this 'feature' rather annoying since I'm not trying to launch rockets to the moon, just push my damn branch. You probably do too or else you wouldn't be here!

Here is the fix: if you want it to implicitly push for the current branch regardless of if that branch exists on origin just issue this command once and you will never have to again anywhere:

git config --global push.default current

So if you make branches like this:

git checkout -b my-new-branch

and then make some commits and then do a

git push -u

to get them out to origin (being on that branch) and it will create said branch for you if it doesn't exist.

Note the -u bit makes sure they are linked if you were to pull later on from said branch. If you have no plans to pull the branch later (or are okay with another one liner if you do) -u is not necessary.

Remote Branches, If we have to pass git push the name of the branch, this means we'll need to type a So while prefer being explicit by running git push origin HEAD , you can often To simulate this, let's push the register branch to a new remote branch called� So I think the problem here is that we don't respect the push.default configuration since we explicitly specify the target branch. While it might seem like we could just do git push without an explicit target branch that wouldn't work in the majority of setups as the default configuration for push.default would lead to a fatal error.

Output of git push when pushing a new branch

> git checkout -b new_branch
Switched to a new branch 'new_branch'
> git push
fatal: The current branch new_branch has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin new_branch

A simple git push assumes that there already exists a remote branch that the current local branch is tracking. If no such remote branch exists, and you want to create it, you must specify that using the -u (short form of --set-upstream) flag.

Why this is so? I guess the implementers felt that creating a branch on the remote is such a major action that it should be hard to do it by mistake. git push is something you do all the time.

"Isn't a branch a new change to be pushed by default?" I would say that "a change" in Git is a commit. A branch is a pointer to a commit. To me it makes more sense to think of a push as something that pushes commits over to the other repositories. Which commits are pushed is determined by what branch you are on and the tracking relationship of that branch to branches on the remote.

You can read more about tracking branches in the Remote Branches chapter of the Pro Git book.

Learn Git - Master: git push, You can change which branches will be pushed when saying git push . manually do a git push origin my-branch to explicitly push only your current branch. what you want, it does not setup tracking between your local and remote branches. When you create a new branch and push it to origin , you won't be tracking it. View your repo's branches by selecting Repos, Branches while viewing your repo on the web.. Select the New branch button in the upper right corner of the page.. In the Create a branch dialog, enter a name for your new branch, select a branch to base the work off of, and associate any work items.

I couldn't find a rationale by the original developers this quickly, but I can give you an educated guess based on a few years of Git experience.

No, not every branch is something you want to push to the outside world. It might represent a private experiment.

Moreover, where should git push send all the branches? Git can work with multiple remotes and you may want to have different sets of branches on each. E.g. a central project GitHub repo may have release branches; a GitHub fork may have topic branches for review; and a local Git server may have branches containing local configuration. If git push would push all branches to the remote that the current branch tracks, this kind of scheme would be easy to screw up.

Git: How to configure git to push only your current branch , A local branch that you create on your machine is kept private to you until you explicitly decide to publish it. git checkout contact-form Switched to branch ' contact-form' $ git push -u origin contact-form Counting objects: 36, done. To file://Users/tobidobi/Desktop/GitCrashkurs/remote-test.git * [new branch] contact- form� A local branch that you create on your machine is kept private to you until you explicitly decide to publish it. This means that it's perfectly possible to keep some of your work private while sharing only certain other branches with the world.

HEAD is short for current branch so git push -u origin HEAD works. Now to avoid this typing everytime I use alias:

git config --global alias.pp 'push -u origin HEAD'

After this, everytime I want to push branch created via git -b branch I can push it using:

git pp

Hope this saves time for someone!

Publishing a Local Branch, Before pushing a branch to a remote repository it's best to make sure your You can decide for yourself which branches you want to push to a remote: by default, every local branch is private to you until you explicitly push it to a remote server. So, here comes the easiest Git branch definition you’re bound to come across: a branch in Git is just a named reference to a commit. That’s it. With that in mind, it becomes easier to understand why branching and merging are usually way easier in Git than in centralized tools.

Pushing to a Remote - Tower Help, Using the Git rename branch command will require you to add an -m option to your git push origin --delete old-name git push origin :old-name new-name It's designed specifically with performance, security, and flexibility in mind when it � Opening a new branch as an infill point within your current footprint will likely outperform a new branch in a new market that expands your bank’s footprint. Building a convenient new location in an existing market where you already operate, the number of existing customers will influence sales performance.

How to Rename a Local and Remote Git Branch – A Quick Guide, Feature branches should have descriptive names, like animated-menu-items or This checks out a branch called new-feature based on master , and the -b flag tells When ready, push your commits, updating the feature branch on Bitbucket. git push -u <remote_name> <local_branch_name> This command will push the local repo branch under <local_branc_name> to the remote repo at <remote_name>. For more in-depth look at git remote, see the Git remote page. In addition to configuring a remote repo URL, you may also need to set global Git configuration options such as username, or email.

Git Feature Branch Workflow, The current branch should be pushed to the remote repository, as if git checkout -b test-local origin/master Switched to a new branch While it might seem like we could just do git push without an explicit target branch that wouldn't create and push branches from the CLI, but Desktop is great if I need� Going forward, all your Git commands apply to the branch. When you push the changes to your remote Bitbucket repository, those changes apply to the repository's branch. Using Mercurial to checkout a branch on the command line. On your local system, make sure you have a local repository cloned from the remote repository. Then, do the following:

Comments
  • Note that this is configurable (setting push.default, see man git-config). If you do git config --add push.default current, then git push will automatically create the branch in the remote repo if necessary. Why this is not the default is explained in the answers.
  • @sleske I agree. For the other policies 'current' and 'upstream', see my older answer stackoverflow.com/a/13751847/6309.
  • Why not accept an answer?
  • After this point, the next git push also expects the branch to already exist?
  • Yes. It will push any updates to that branch to upstream repository.
  • @Cratylus yes, because of the new default push policy 'simple': push to any recorded upstream branch, if that upstream branch has the same name as the local one. A simple git push will be enough.
  • @ButtleButkus Thank you. I have restored the link.
  • For the questioner's more general case of a new branch 'new_branch', you would use git push --set-upstream origin new_branch or git push -u origin new_branch for short. The -all that the questioner used bypassed naming a specific new branch by including all branches. This is covered by +Klas Mellbourn in his answer.
  • When I do this, if I do a git pull, immediately after - the two branches aren't linked. :(
  • this is the only answer that fixed my problem.
  • To link them, use git push -u