difference between origin/branch_name and branch_name?
Asked Answered
R

4

33

for pushing to bitbucket.

If I do: git push origin origin/branch_name my commits are not pushed.

Total 0 (delta 0), reused 0 (delta 0)

If I do git push origin branch_name my commits are pushed:

Counting objects: 160, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (20/20), 2.10 KiB | 0 bytes/s, done.
Total 20 (delta 6), reused 0 (delta 0)

so what is the origin/ mean in front of the branch_name? And why does it matter?

Regalia answered 30/9, 2014 at 15:59 Comment(0)
B
48

You have to keep in mind that there are different types of branches:

  • (Purely) local branches, i.e. branches you commit to,
  • Branches that live in a remote repository, for lack of a better term. You may know the remote repository in question under a remote name, such as origin. From that repository's point of view, though, such a branch is local. Welcome to Distributed Version Control! :)
  • Remote-tracking branches. Also simply called remote branches, as in the Pro Git book, but I find this phrase confusing; remote-tracking branch is more accurate. They're special local branches whose sole purpose is to reflect the state of branches that live in a remote repository at the time of your last communication with the server. In particular, you can't commit to branches of this type.

Here, branch_name is a local branch, whereas origin/branch_name is a remote-tracking branch; it reflects the state of the corresponding branch that lives in origin.

Right after running

git fetch

the remote-tracking branch origin/master and the corresponding branch that live in origin should be perfectly in sync (modulo concurrent pushes to the remote server, of course). It shouldn't be a surprise, then, that

git push origin origin/branch_name

doesn't push anything: you're essentially attempting to push stuff that is already present in the ancestry of the corresponding branch that live in origin .

However, if your local branch, branch_name, is ahead by one or more commits,

enter image description here

then running

git push origin branch_name

will push the commits contained in branch_name to origin/branch_name:

enter image description here

Boorer answered 30/9, 2014 at 16:9 Comment(0)
B
4

using a graphical tree viewer (like gitk --all) will show you, that origin/mybranch and mybranch might differ.

origin is just the default name for a cloned remote, which (in your case) contains a branch mybranch (just like your local repository)

so when you ask to push origin/mybranch to origin, you are synchronizing the origin remote with itself, hence it doesn't do anything (luckily the remote is always in synch with itself).

the name origin is arbitrary, and could have been set with the --origin flag when cloning.

Barbitone answered 30/9, 2014 at 16:10 Comment(0)
S
3
  • origin/branch_name is a branch on the remote machine
  • just branch_name is a branch on the local machine
Sportive answered 30/9, 2014 at 16:1 Comment(1)
I disagree. origin/branch_name is on your local machine but tracks a branch on a remote machine.Remotion
D
1

origin is whats stored remotely on github

without origin is what is stored locally on your computer

when you commit 1st you are commit locally to your computer

when you push origin branch name you are pushing to github

Desiraedesire answered 30/9, 2014 at 16:0 Comment(3)
where does github come into this game? git allows for many remote servers and github is just one of them.Goraud
@Barbitone I think he used GitHub to reflect what the "remote" part means.Pectoral
@ItrysohardbutIcryharder I know, but it makes me cry so hard, if people just conflate github with git. also the question was tagged bitbucket (for no apparent reason except that the OP probably used bitbucket as their remote)Goraud

© 2022 - 2024 — McMap. All rights reserved.