Push.default "simple" versus "actual" en git para flujo de trabajo descentralizado

Desde un punto de vista funcional, en un flujo de trabajo descentralizado, no veo la diferencia entre current opciones simple y las current para la push.default config push.default .

current empujará la twig actual a una twig con nombre idéntico en el control remoto especificado. simple hará efectivamente lo mismo tanto para los controles remotos como para los controles remotos sin seguimiento para la bifurcación actual (impone nombres de bifurcaciones idénticos en ambos casos).

¿Alguien puede explicar alguna diferencia importante entre los dos para los flujos de trabajo descentralizados que me falta?

La diferencia es que con simple , git push (sin pasar un refspec) fallará si la twig actual no está rastreando una twig ascendente remota (incluso si existe una twig con el mismo nombre en el control remoto):

 $ 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 

Por otro lado, a la current no le importa si la twig actual rastrea una stream ascendente o no, solo quiere enviarla a cualquier twig que tenga el mismo nombre:

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

La documentation

De la documentation de configuration de Git :

  • upstream : empujar la twig actual a su twig ascendente …

  • simple , como en sentido ascendente, pero se niega a presionar si el nombre de la twig ascendente es diferente del local …

  • current : empuje la twig actual a una twig del mismo nombre.

La diferencia es que empuja simple a su twig de seguimiento si tiene el mismo nombre, mientras que la current empujará a una twig del mismo nombre independientemente de cualquier twig de seguimiento:

 $ 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`