ver pendientes modificados log example ejemplo commits comandos cambios archivos archivo git git-diff git-log

pendientes - Viendo los compromisos de Git sin apilar



git ver commits pendientes (24)

¿Cómo puedo ver las confirmaciones locales que hice y que aún no se han enviado al repositorio remoto? De vez en cuando, el git status imprimirá que mi sucursal es X confirma antes del origin/master , pero no siempre.

¿Es esto un error con mi instalación de Git, o me falta algo?


Aquí está mi solución portátil (shell script que también funciona en Windows sin instalación adicional) que muestra las diferencias con el origen de todas las sucursales: git-fetch-log

Un ejemplo de salida:

==== branch [behind 1] > commit 652b883 (origin/branch) | Author: BimbaLaszlo <[email protected]> | Date: 2016-03-10 09:11:11 +0100 | | Commit on remote | o commit 2304667 (branch) Author: BimbaLaszlo <[email protected]> Date: 2015-08-28 13:21:13 +0200 Commit on local ==== master [ahead 1] < commit 280ccf8 (master) | Author: BimbaLaszlo <[email protected]> | Date: 2016-03-25 21:42:55 +0100 | | Commit on local | o commit 2369465 (origin/master, origin/HEAD) Author: BimbaLaszlo <[email protected]> Date: 2016-03-10 09:02:52 +0100 Commit on remote ==== test [ahead 1, behind 1] < commit 83a3161 (test) | Author: BimbaLaszlo <[email protected]> | Date: 2016-03-25 22:50:00 +0100 | | Diverged from remote | | > commit 4aafec7 (origin/test) |/ Author: BimbaLaszlo <[email protected]> | Date: 2016-03-14 10:34:28 +0100 | | Pushed remote | o commit 0fccef3 Author: BimbaLaszlo <[email protected]> Date: 2015-09-03 10:33:39 +0200 Last common commit

Los parámetros pasados ​​para el registro, por ejemplo, --oneline o --patch se pueden usar.


Creo que la forma más típica de hacer esto es ejecutar algo como:

git cherry --abbrev=7 -v @{upstream}

Sin embargo, personalmente prefiero correr:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

que muestra las confirmaciones de todas las ramas que no están fusionadas en sentido ascendente, más la última confirmación en sentido ascendente (que aparece como un nodo raíz para todas las demás confirmaciones). Lo uso tan a menudo que he creado alias noup para él.

git config --global alias.noup / ''log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..''


Esto funcionó mejor para mí:

git log --oneline @{upstream}..

o:

git log --oneline origin/(remotebranch)..



Existe una herramienta llamada no unpushed que escanea todos los repositorios de Git, Mercurial y Subversion en el directorio de trabajo especificado y muestra la lista de archivos compartidos y las confirmaciones no presionadas. La instalación es simple bajo Linux:

$ easy_install --user unpushed

o

$ sudo easy_install unpushed

para instalar todo el sistema.

El uso es simple también:

$ unpushed ~/workspace * /home/nailgun/workspace/unpushed uncommitted (Git) * /home/nailgun/workspace/unpushed:master unpushed (Git) * /home/nailgun/workspace/python:new-syntax unpushed (Git)

Para unpushed --help más información, consulte: - unpushed --help o unpushed unpushed --help . También cuenta con una secuencia de comandos cronjob no unpushed-notify para la unpushed-notify en pantalla de cambios no confirmados y no procesados.


Handy git alias para buscar confirmaciones no presionadas en la rama actual :

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

Lo que básicamente esto hace:

git log origin/branch..branch

pero también determina el nombre de la rama actual.


Le sugiero que vaya a ver el script https://github.com/badele/gitcheck , he codificado este script para verificar en una sola pasada todos sus repositorios de git, y muestra quién no se ha comprometido y quién no ha presionado / tirado.

Aquí un resultado de muestra


No es un error. Lo que probablemente está viendo es el estado de git después de una fusión automática fallida donde los cambios desde el control remoto se recuperan pero aún no se han fusionado.

Para ver las confirmaciones entre el repositorio local y el remoto, haga lo siguiente:

git fetch

Esto es 100% seguro y no se burlará de su copia de trabajo. Si hubo cambios, el git status mostrará X commits ahead of origin/master .

Ahora puede mostrar el registro de confirmaciones que están en el control remoto pero no en el local:

git log HEAD..origin


Para enumerar fácilmente todas las confirmaciones no presionadas en todas las ramas , puede usar este comando:

git log --branches @{u}..


Puede mostrar todas las confirmaciones que tenga localmente pero no en sentido ascendente con

git log @{u}..

@{u} o @{upstream} significa la rama en sentido ascendente de la rama actual (consulte git rev-parse --help o git help revisions para obtener más información).


Puedes hacer esto con git log :

git log origin..

Suponiendo que el origin es el nombre de su cadena ascendente, omitiendo cualquier nombre de revisión después de .. implica HEAD , que enumera las nuevas confirmaciones que no se han enviado.


Si desea ver todas las confirmaciones en todas las ramas que aún no se han enviado, puede que esté buscando algo como esto:

git log --branches --not --remotes

Y si solo desea ver la confirmación más reciente en cada rama, y ​​los nombres de las ramas, esto:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline


Si el número de confirmaciones que no se han expulsado es un número de un solo dígito, que a menudo lo es, la forma más fácil es:

$ git checkout

git responde diciéndole que está "adelante" con respecto a su origen. Así que ahora solo tenga en cuenta ese número al ver los registros. Si está "adelantado por 3 confirmaciones", las 3 confirmaciones principales en la historia aún son privadas.


Similar: Para ver ramas no unidas:

git branch --all --no-merged

Esos pueden ser sospechosos pero recomiendo la respuesta por cxreg.


Todas las demás respuestas hablan de "corriente arriba" (la rama de la que arrancas).
Pero una rama local puede empujar a una rama diferente de la que saca.

master posible que el master no empuje a la rama de seguimiento remoto " origin/master ".
La rama ascendente para master podría ser origin/master , pero podría anotherUpstreamRepo/yyy origin/xxx rama de seguimiento remoto origin/xxx o incluso a otra anotherUpstreamRepo/yyy .
Estos se establecen por branch.*.pushremote para la rama actual junto con el valor global remote.pushDefault .

Es esa rama de seguimiento remoto la que cuenta cuando se buscan confirmaciones no presionadas: la que rastrea la branch at the remote donde se empujaría la rama local .
La branch at the remote puede ser, de nuevo, origin/xxx o incluso anotherUpstreamRepo/yyy .

Git 2.5+ (Q2 2015) introduce un nuevo acceso directo para eso: <branch>@{push}

Ver commit 29bc885 , commit 3dbe9db , commit adfe5d0 , commit 48c5847 , commit a1ad0eb , commit e291c75 , commit 979cb24 , commit 1ca41a1 , commit 3a429d0 , commit a9f9cccn de las personas a la que se dedica . 2015], y cometer e41bf35 [01 de mayo de 2015] por Jeff King ( peff ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit c4a8354 , 05 jun 2015)

Cometer adfe5d0 explica:

sha1_name : implementa @{push} taquigrafía

En un flujo de trabajo triangular, cada rama puede tener dos puntos de interés distintos: el @{upstream} que normalmente extraes y el destino al que normalmente presionas. No hay una taquigrafía para este último, pero es útil tenerlo.

Por ejemplo, es posible que desee saber qué compromisos aún no ha empujado :

git log @{push}..

O como un ejemplo más complicado, imagine que normalmente extrae los cambios desde el origin/master (que estableció como @{upstream} ) y los cambios a su propia bifurcación personal (por ejemplo, como myfork/topic ).
Puede enviar a su bifurcación desde múltiples máquinas, lo que requiere que integre los cambios desde el destino de inserción, en lugar de hacia el origen .
Con este parche, simplemente puedes hacer:

git rebase @{push}

en lugar de escribir el nombre completo.

Commit 29bc885 agrega:

for-each-ref : acepta el formato " %(push) "

Al igual que tenemos " %(upstream) " para informar el " @{upstream} " para cada referencia, este parche agrega " %(push) " para que coincida con " @{push} ".
Es compatible con los mismos modificadores de formato de seguimiento que en el sentido ascendente (porque es posible que desee saber, por ejemplo, qué ramas se comprometen a empujar ).

Si desea ver cuántos de sus sucursales locales están adelantadas / atrasadas en comparación con la sucursal a la que está presionando:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads


Tu podrías intentar....

gitk

Sé que no es una opción de línea de comando pura, pero si la tiene instalada y está en un sistema GUI, es una excelente manera de ver exactamente lo que está buscando y mucho más.

(Estoy realmente sorprendido de que nadie lo haya mencionado hasta ahora).


Tuve un compromiso hecho previamente, no empujado a ninguna rama, ni remoto ni local. Sólo el compromiso. Nada de otras respuestas funcionó para mí, pero con:

git reflog

Allí encontré mi compromiso.


Uso el siguiente alias para obtener solo la lista de archivos (y el estado) que se han confirmado pero que no se han enviado (para la rama actual)

git config --global alias.unpushed / "diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

entonces solo haz

git unpushed


una forma de hacer las cosas es enumerar las confirmaciones que están disponibles en una rama pero no en otra.

git log ^origin/master master


git branch -v mostrará, para cada sucursal local, si está "adelante" o no.


git cherry -v

Esto mostrará una lista de su historial de comentarios local (aún no enviado) con el mensaje correspondiente


git diff origin

Suponiendo que su sucursal está configurada para rastrear el origen, entonces eso debería mostrarle las diferencias.

git log origin

Te daré un resumen de los compromisos.


git log origin/master..HEAD

También puede ver el diff usando la misma sintaxis.

git diff origin/master..HEAD


git show

Mostrará todas las diferencias en tus compromisos locales.

git show --name-only

mostrará el ID de confirmación local y el nombre de confirmación.