"simple" vs "current" push.default in git for decentralized workflow

Functionally speaking, in a decentralized workflow, I don't see the difference between simple and current options for push.default config setting.

current will push the current branch to an identically named branch on the specified remote. simple will effectively do the same thing as well for both the tracked and any untracked remotes for the current branch (it enforces identical branch names in both cases).

Can someone explain any important differences between the two for decentralized workflows that I am missing?


The difference is that with simple , git push (without passing a refspec) will fail if the current branch isn't tracking a remote upstream branch (even if a branch with the same name exists on the remote):

$ git checkout -b foo
Switched to a new branch 'foo'

$ git config push.default simple
$ git push
fatal: The current branch foo has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin foo

On the other hand, current doesn't care about whether or not the current branch tracks an upstream, it just wants to push to any branch that has the same name:

$ git config push.default current
$ git push
Total 0 (delta 0), reused 0 (delta 0)
To /Documents/GitHub/bare
 * [new branch]      foo-> foo

The Documentation

From the Git configuration documentation:

  • upstream - push the current branch to its upstream branch...

  • simple - like upstream, but refuses to push if the upstream branch's name is different from the local one...

  • current - push the current branch to a branch of the same name.


  • 不同之处在于,如果simple的追踪分支具有相同的名称,则simple推送到它的追踪分支,而current将不管任何追踪分支都推送到具有相同名称的分支:

    $ git branch -vvv
      master 58d9fdc [origin/master: ahead 1] t1 bobo
    * new    37132d3 [origin/save: ahead 1] t1 bibi   # <- tracking branch 'save'
    
    $ git -c push.default=current push                # <- set `push.default=current`
    Counting objects: 3, done.
    Writing objects: 100% (3/3), 234 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To /home/jthill/sandbox/20/t1
     * [new branch]      new -> new                   # <- and push creates `new` 
    
    链接地址: http://www.djcxy.com/p/26810.html

    上一篇: 警告:push.default未设置; 其隐含价值在Git 2.0中正在发生变化

    下一篇: “简单”vs“当前”push.default在分散工作流的git中