¿Cómo puedo ver las confirmaciones locales que he realizado y que aún no se han enviado al repositorio remoto? Ocasionalmente, git status
imprimirá 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 --all
debería haber aparecido en 2010; ogit status -v
deberí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; done
git log --stat origin/master..HEAD
por 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..HEAD
no funcionaría ya que había múltiples upstreams. Esta publicación me llevógit log MyBranch --not --remotes
a mostrar todas las confirmaciones que no se han enviado a ninguna cadena en una sola rama.--decorate
muestra las ramas también.--graph
lo 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 --help
ogit help revisions
para más detalles).fuente
git log @{u}.. -p
Una 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
origin
es 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 log
y "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.
master
podría no empujar a la rama de seguimiento remoto "origin/master
".La rama ascendente
master
podría serorigin/master
, pero podría empujar a la rama de seguimiento remotoorigin/xxx
o inclusoanotherUpstreamRepo/yyy
.Estos se establecen
branch.*.pushremote
para la rama actual junto con elglobal remote.pushDefault
valor.Es esa rama de seguimiento remoto la que cuenta cuando se buscan confirmaciones no apresuradas: la que rastrea el lugar
branch at the remote
donde se empujaría la rama local .El
branch at the remote
puede ser, de nuevo,origin/xxx
o 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 --all
para ver todas las ramas.tig
Es la alternativa ncurses.gitk
es genial! ¡Nunca supe que esto existe! Práctico para navegar a través de los cambios en una interfaz de usuario agradable.tig
es 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:tig
es al revés degit
!git branch -v
mostrará, 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 1
significa "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>)".behind
y / oahead
para cada rama local, lo cual es suficiente para resolver el problema de OP (detectar confirmaciones no enviadas).git branch -v
es 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
noup
para é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 status
mostrará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 (upstream
es una palabra mágica), mientras queremotebranch
es 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 --help
o descripción oficial para más información. También tiene un script cronjobunpushed-notify
para 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,
--oneline
o--patch
se 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 show
solo 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 origin
le 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.