I'm apparently terrible at using git, despite my best attempts to understand it.
From kernel.org for git push
:
-u --set-upstream For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument-less git-pull(1) and other commands. For more information, see branch.
Here's branch.<name>.merge
from git config
:
branch.
I successfully set up a remote repository with github, and I successfully pushed my first commit to it with:
git push -u origin master
Then, I unwittingly successfully pushed my second commit to my remote repository using:
git commit -m '[...]'
However, incorrectly thinking I would have to push again to origin
from master
, I ran:
# note: no -u
git push origin master
What did that do? It didn't seem to have any effect at all. Did I "undo" git push -u origin master
?
I'm apparently terrible at using git, despite my best attempts to understand it.
- I've never had somebody recreate me so well.
The key is "argument-less git-pull". When you do a git pull
from a branch, without specifying a source remote or branch, git looks at the branch.<name>.merge
setting to know where to pull from. git push -u
sets this information for the branch you're pushing.
To see the difference, let's use a new empty branch:
$ git checkout -b test
First, we push without -u
:
$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "test"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Now if we add -u
:
$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.
Note that tracking information has been set up so that git pull
works as expected without specifying the remote or branch.
Update: Bonus tips:
As Mark mentions in a comment, in addition to git pull this setting also affects default behavior of git push. If you get in the habit of using -u to capture the remote branch you intend to track, I recommend setting your push.default config value to upstream.
git push -u
git push -u origin master
… is the same as:
git push origin master ; git branch --set-upstream master origin/master
Do the last statement, if you forget the -u
!
Or you could force it:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
If you let the command do it for you, it will pick your mistakes like if you typed a non-existent branch or you didn't git remote add
; though that might be what you want. :)
master
is just an example :)
git branch master -u origin/master
details @ stackoverflow.com/a/2286030/790359
-u
option, type git push -u
immediately will be OK.
--setup-upstream
will be deprecated: The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
git branch --set-upstream-to=origin/master master
In more simple terms:
Technically, the -u
flag adds a tracking reference to the upstream server you are pushing to.
What is important here is that this lets you do a git pull
without supplying any more arguments. For example, once you do a git push -u origin master
, you can later call git pull
and git will know that you actually meant git pull origin master
.
Otherwise, you'd have to type in the whole command.
-u
flag to orgin master
every next pull will refer to it. And if I want to change the git pull
behavior I should run git push -u origin some_other_branch
and git pull
now will refer to some_other_branch
? Thank you!
git push -u origin master
All necessary git bash commands to push and pull into Github:
git status
git pull
git add filefullpath
git commit -m "comments for checkin file"
git push origin branch/master
git remote -v
git log -2
If you want to edit a file then:
edit filename.*
To see all branches and their commits:
git show-branch
Success story sharing
git push <remote> <branch>
makes things unambiguous. If you leave off the remote or branch git falls back on the branch config settings, which are set for you withgit push -u
.git push origin test
(which doesn't have-u
). You then showed thatgit push -u origin test
removes the ambiguity. Is there a typo, or am I just being dense again?git push <remote> <branch>
is unambiguous, I mean that relative togit push
which relies on the branch config. Similarly,git pull <remote> <branch>
is unambiguous andgit pull
relies on the branch config. Once you've pushed with-u
, bothgit push
andgit pull
will work as expected.git push
- unless you setpush.default
yourself,git push
only uses the upstream branch configuration to decide which remote to push to, not the remote branch to update.git push origin master
and the same to other side IE.git pull origin master
.. So If suppose branch change then you cangit push origin branch_name
and the same to other side IE.git pull origin branch_name