¿Cómo puedo ver las confirmaciones locales que he realizado y que aún no se han enviado al repositorio remoto? Ocasionalmente, git statusimprimirá que mi rama es X confirma antes origin/master, pero no siempre.
¿Es esto un error con mi instalación de Git o me falta algo?

git log @{push}... Vea ese nuevo acceso directo@{push}(haciendo referencia a la rama de seguimiento remoto que está presionando) en mi respuesta a continuacióngit status --alldebería haber aparecido en 2010; ogit status -vdebería proporcionar el resultado detallado que incluye la información adicional.Respuestas:
También puede ver la diferencia usando la misma sintaxis
fuente
git config --global alias.ahead "log origin/master..HEAD --oneline"para poder averiguar rápidamente dónde estoy. Aún más dulces:for i in *; do echo $i && git ahead 2>/dev/null; donegit log --stat origin/master..HEADpor un poco de asombro extra@{u}sintaxis aún no estaba disponible, solo estuvo disponible el 12 de febrero de 2010 . Además,@{u}no funcionará si la rama local no está configurada con un flujo ascendente. Finalmente,@{u}actualmente no tiene soporte para completar pestañas,<remote>/<branch>con la finalización de pestañas sigue siendo una de las formas más rápidas de obtener esta información, y funcionará si se configura un flujo ascendente o no.Si desea ver todas las confirmaciones en todas las ramas que aún no se han enviado, es posible que esté buscando algo como esto:
Y si solo desea ver la confirmación más reciente en cada rama, y los nombres de las ramas, esto:
fuente
git log master..HEADno funcionaría ya que había múltiples upstreams. Esta publicación me llevógit log MyBranch --not --remotesa mostrar todas las confirmaciones que no se han enviado a ninguna cadena en una sola rama.--decoratemuestra las ramas también.--graphlo hace aún más obvio.Puede mostrar todas las confirmaciones que tiene localmente pero no en sentido ascendente con
@{u}o@{upstream}significa la rama ascendente de la rama actual (vergit rev-parse --helpogit help revisionspara más detalles).fuente
git log @{u}.. -pUna de las opciones más útiles es -p , que muestra las diferencias introducidas en cada confirmación.Esto funcionó para mí:
Como se indica en Git: vea todas las confirmaciones no confirmadas o confirmaciones que no están en otra rama .
fuente
Puedes hacer esto con
git log:Asumiendo que ese
origines el nombre de su flujo ascendente, omita cualquier nombre de revisión después de..implicaHEAD, que enumera las nuevas confirmaciones que no se han enviado.fuente
git logy "2-dots-not-3", siempre me recuerda a stackoverflow.com/questions/53569/… ;)git branch --set-upstream master origin/<branch>para configurar en sentido ascendente si está dispuesto a usar este comando para ver las confirmaciones que se organizan por etapas.Todas las otras respuestas hablan de "aguas arriba" (la rama de la que extrae).
Pero una rama local puede empujar a una rama diferente de la que extrae.
masterpodría no empujar a la rama de seguimiento remoto "origin/master".La rama ascendente
masterpodría serorigin/master, pero podría empujar a la rama de seguimiento remotoorigin/xxxo inclusoanotherUpstreamRepo/yyy.Estos se establecen
branch.*.pushremotepara la rama actual junto con elglobal remote.pushDefaultvalor.Es esa rama de seguimiento remoto la que cuenta cuando se buscan confirmaciones no apresuradas: la que rastrea el lugar
branch at the remotedonde se empujaría la rama local .El
branch at the remotepuede ser, de nuevo,origin/xxxo inclusoanotherUpstreamRepo/yyy.Git 2.5+ (Q2 2015) presenta un nuevo atajo para eso:
<branch>@{push}Ver cometer 29bc885 , comprometerse 3dbe9db , cometen adfe5d0 , comprometerse 48c5847 , comprometerse a1ad0eb , comprometerse e291c75 , comprometerse 979cb24 , comprometerse 1ca41a1 , comprometerse 3a429d0 , comprometerse a9f9f8c , comprometerse 8770e6f , comprometerse da66b27 , comprometerse f052154 , comprometerse 9e3751d , comprometerse ee2499f [todos del 21 de mayo 2015], y cometer e41bf35 [01 de mayo de 2015] por Jeff King (
peff) .(Fusionada por Junio C Hamano -
gitster-en commit c4a8354 , 05 jun 2015)Comprometer adfe5d0 explica:
Commit 29bc885 agrega:
Si desea ver cuántos compromisos sus sucursales locales están adelante / atrás en comparación con la sucursal a la que está presionando:
fuente
Práctico alias de git para buscar confirmaciones sin empujar en la rama actual :
Lo que esto básicamente hace:
pero también determina el nombre actual de la sucursal.
fuente
git alias <alias-name> <command>en este caso, el comando debe estar rodeado de comillas simples, para escapar de caracteres especiales del shell.git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'Tu podrías intentar....
Sé que no es una opción de línea de comandos 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.
(De hecho, estoy un poco sorprendido de que nadie lo haya mencionado hasta ahora).
fuente
gitk --allpara ver todas las ramas.tigEs la alternativa ncurses.gitkes genial! ¡Nunca supe que esto existe! Práctico para navegar a través de los cambios en una interfaz de usuario agradable.tiges más útil en una situación de 'solo terminal', en la que no obtiene acceso a la GUI de escritorio. ¡Aprendiendo sobre esto por primera vez! INTERESANTE:tiges al revés degit!git branch -vmostrará, para cada sucursal local, si está "adelantado" o no.fuente
devel, la línea correspondiente será* devel 8a12fc0 [ahead 1] commit msg(*solo estará en la línea correspondiente a la rama desprotegida).ahead 1significa "adelante por un compromiso", es decir, hay un compromiso no apresurado.git branch -vv? Cf. docs: "Si se da dos veces, imprima el nombre de la rama ascendente también (vea también git remote show <remote>)".behindy / oaheadpara cada rama local, lo cual es suficiente para resolver el problema de OP (detectar confirmaciones no enviadas).git branch -ves suficiente para eso, acabo de probar nuevamente con Git 2.16.2 :)Tuve una confirmación realizada anteriormente, no empujada a ninguna rama, ni remota ni local. Solo el compromiso. Nada de otras respuestas funcionó para mí, pero con:
Allí encontré mi compromiso.
fuente
Utilizo el siguiente alias para obtener solo la lista de archivos (y el estado) que se han confirmado pero no se han enviado (para la rama actual)
entonces solo haz:
fuente
Creo que la forma más típica de hacer esto es ejecutar algo como:
Sin embargo, personalmente prefiero ejecutar:
que muestra los commits de todas las ramas que no están fusionadas en sentido ascendente, más el último commit en sentido ascendente (que se muestra como un nodo raíz para todos los otros commits). Lo uso con tanta frecuencia que he creado un alias
nouppara él.fuente
Le sugiero que vaya a ver el script https://github.com/badele/gitcheck , he codificado este script para verificar de una sola vez todos sus repositorios git, y muestra quién no se ha comprometido y quién no ha empujado / tirado.
Aquí un resultado de muestra
fuente
Esto enumerará su historial de comentarios local (aún no enviado) con el mensaje correspondiente
fuente
No es un error Lo que probablemente esté viendo es el estado de git después de una fusión automática fallida donde se recuperan los cambios desde el control remoto pero aún no se fusionan.
Para ver las confirmaciones entre el repositorio local y el remoto, haga esto:
Esto es 100% seguro y no imitará su copia de trabajo. Si hubo cambios se
git statusmostraráX commits ahead of origin/master.Ahora puede mostrar el registro de confirmaciones que están en el remoto pero no en el local:
fuente
Esto funcionó mejor para mí:
o:
fuente
@{upstream}es literal (upstreames una palabra mágica), mientras queremotebranches solo el nombre de su rama.Hay una herramienta llamada no apresurada que escanea todos los repositorios de Git, Mercurial y Subversion en el directorio de trabajo especificado y muestra la lista de archivos comprometidos y confirmaciones no apresuradas. La instalación es simple bajo Linux:
o
para instalar en todo el sistema.
El uso también es simple:
Ver
unpushed --helpo descripción oficial para más información. También tiene un script cronjobunpushed-notifypara la notificación en pantalla de cambios no confirmados y no confirmados.fuente
Para enumerar fácilmente todas las confirmaciones sin empujar en todas las ramas , puede usar este comando:
fuente
Similar: para ver ramas no fusionadas:
Esos pueden ser sospechosos, pero recomiendo la respuesta de cxreg
fuente
Si el número de confirmaciones que no se han eliminado es un número de un solo dígito, que a menudo es, la forma más fácil es:
git responde diciéndole que está "adelantado N commits" en relación con su origen. Así que ahora solo tenga en cuenta ese número cuando vea los registros. Si está "adelantado por 3 confirmaciones", las 3 confirmaciones más importantes de la historia siguen siendo privadas.
fuente
Una forma de hacer las cosas es enumerar los commits que están disponibles en una rama pero no en otra.
fuente
Como se dijo anteriormente:
git diff origin / master..HEAD
Pero si estás usando git gui
Después de abrir la interfaz gui, seleccione "Repositorio" -> debajo de " Visualizar historial "
Nota: A algunas personas les gusta usar CMD Prompt / Terminal mientras que a otras les gusta usar Git GUI (por simplicidad)
fuente
Aquí está mi solución portátil (script de shell que también funciona en Windows sin instalación adicional) que muestra las diferencias de origen para todas las ramas: git-fetch-log
Un ejemplo de salida:
Parámetros pasados para el registro, por ejemplo,
--onelineo--patchse pueden usar.fuente
mostrará todas las diferencias en sus confirmaciones locales.
mostrará la identificación de confirmación local y el nombre de la confirmación.
fuente
git showsolo muestra la confirmación más reciente, ya sea que se haya enviado al control remoto o no, no le mostrará todas sus confirmaciones no eliminadas.Suponiendo que su rama esté configurada para rastrear el origen, eso debería mostrarle las diferencias.
Te daré un resumen de los commits.
fuente
git log originle mostrará los compromisos que ya se han enviado , pero no mostrará los compromisos que no se han enviado , lo que se parece más a lo que pedía el póster original.