'Su sucursal está por delante de' origin / master 'mediante 1 commit' en push explícito

Soy nuevo en git, y no puedo entender el siguiente comportamiento:

Tengo un repository bitbucket que clono localmente, luego modifico y me comprometo localmente, luego presiono para el repository remoto. Si hago un push implícito, o 'push origen', no hay problema. Si presiono usando la URL remota explícita, obtengo el post de estado 'Su bifurcación está por delante de' origen / máster 'en 1 commit'.

Parece que git no reconoce que la dirección explícita es lo mismo que el origen, entonces, ¿qué está pasando exactamente? Si hago otro esfuerzo implícito, no hace nada, pero borra dicho post.

Aquí hay una session de muestra:

baz@bhost:/more/coding/git-tests/ask1$ git --version git version 1.7.2.5 baz@bhost:/more/coding/git-tests$ git clone https://shishani@bitbucket.org/shishani/dirasi.git ask1 Cloning into ask1... Password: remote: Counting objects: 24054, done. remote: Compressing objects: 100% (6300/6300), done. remote: Total 24054 (delta 17124), reused 24024 (delta 17106) Receiving objects: 100% (24054/24054), 11.83 MiB | 251 KiB/s, done. Resolving deltas: 100% (17124/17124), done. baz@bhost:/more/coding/git-tests$ cd ask1 baz@bhost:/more/coding/git-tests/ask1$ jed setup.py baz@bhost:/more/coding/git-tests/ask1$ git commit -a [master a053f28] modified: setup.py 1 files changed, 1 insertions(+), 0 deletions(-) baz@bhost:/more/coding/git-tests/ask1$ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) baz@bhost:/more/coding/git-tests/ask1$ git remote show origin Password: * remote origin Fetch URL: https://shishani@bitbucket.org/shishani/dirasi.git Push URL: https://shishani@bitbucket.org/shishani/dirasi.git HEAD branch: master Remote branch: master tracked Local branch configunetworking for 'git pull': master merges with remote master Local ref configunetworking for 'git push': master pushes to master (fast-forwardable) baz@bhost:/more/coding/git-tests/ask1$ git push Password: Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 314 bytes, done. Total 3 (delta 2), reused 0 (delta 0) remote: bb/acl: shishani is allowed. accepted payload. To https://shishani@bitbucket.org/shishani/dirasi.git 5e9ffd1..a053f28 master -> master baz@bhost:/more/coding/git-tests/ask1$ git status # On branch master nothing to commit (working directory clean) baz@bhost:/more/coding/git-tests/ask1$ jed setup.py baz@bhost:/more/coding/git-tests/ask1$ git commit -a [master 6d0e236] modified: setup.py 1 files changed, 1 insertions(+), 0 deletions(-) baz@bhost:/more/coding/git-tests/ask1$ git push https://shishani@bitbucket.org/shishani/dirasi.git master Password: Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 298 bytes, done. Total 3 (delta 2), reused 0 (delta 0) remote: bb/acl: shishani is allowed. accepted payload. To https://shishani@bitbucket.org/shishani/dirasi.git a053f28..6d0e236 master -> master baz@bhost:/more/coding/git-tests/ask1$ git status # On branch master **# Your branch is ahead of 'origin/master' by 1 commit.** <-- this does not reflect current state # nothing to commit (working directory clean) baz@bhost:/more/coding/git-tests/ask1$ git push Password: Everything up-to-date baz@bhost:/more/coding/git-tests/ask1$ git status # On branch master nothing to commit (working directory clean) 

Creo que debes volver a colocar el cambio antes de que git se dé count de que el extremo remoto se ha actualizado. Puede hacer esto mediante un git pull rápido (o, como muestra en su ejemplo, un git push al origen rastreado).

También puede cambiar manualmente la confirmación a la que refs/remotes/origin puntos de refs/remotes/origin .

No es justo esperar que el rastreador de contenido reconozca sinónimos remotos arbitrarios para repositorys; imagina si tuvieras cinco URL diferentes que fueran el mismo repository del lado del server. Cuando presionas para repo A, ¿eso significa que tus cambios se han comprometido con el repository B (el origen de tu sucursal)? git no tiene forma de saberlo. En cambio, solo actualiza la reference de la cabeza remota en dos casos: un tirón y un empuje al destino pnetworkingeterminado.

Cuando el estado dice que Your branch is ahead of 'origin/master' by 1 commit , realmente significa origin/master . Es decir, hay un puntero llamado origin/master en tu repo que apunta al commit que es el HEAD de esa remote branch , y tu master está por delante de este commit.

Para todos los controles remotos que su repo reconoce, crea un puntero <remote>/<branchname> en el repository, si tira / empuja / recupera. Es solo un puntero a la confirmación, y si intentas checkout esa twig, solo estarías desconectado.

Aparentemente, este puntero se actualiza cuando haces git push o git push origin master , pero presionar explícitamente una url no actualizaría ese puntero, y por lo tanto el estado.

Si simplemente haces que git fetch o git pull después de presionar a la url, el post de estado también desaparecerá en ese caso.

NOTA: si tiene múltiples controles remotos y configura su bifurcación para rastrear alguna otra bifurcación remota, como por ejemplo, upstream master , su post de estado será en este caso, por ejemplo, Your branch is ahead of 'upstream/master' by 1 commit . Entonces, solo se realiza la comparación en la twig remota rastreada. Vea git config para ver qué twig remota está rastreando su twig actual.

Sí, tendrás que hacer una git fetch git fetch origin o un git fetch origin en ese caso. A Git no le importa dónde presiona, solo lo remoto es el control remoto (y las sucursales de seguimiento remoto) cuando informa el estado de la cantidad de compromisos que tiene por delante, etc.

Tenga en count que, desde git1.8.1rc1 (diciembre de 2012), Git includeá posts de sugerencia :

 if (advice_status_hints) + strbuf_addf(sb, + _(" (use \"git push\" to publish your local commits)\n")); 

Cuando " git checkout " comtesting una twig, le dice al usuario qué tan atrás (o más adelante) la nueva twig está relacionada con la twig de seguimiento remoto sobre la que se basa.
El post ahora también aconseja cómo sincronizarlos empujando o tirando.

Esto se puede deshabilitar con la variable de configuration advice.statusHints .