Si usa GitHub para la ubicación en la nube de su repositorio, es muy simple: vaya a su proyecto y haga clic en el encabezado "commits" en la tabla que muestra su proyecto
David Lundquist
1
El significado de "actual y la última versión" realmente debería aclararse en la pregunta.
faintsignal
Respuestas:
1171
Realmente no entiendo el significado de "última versión".
Como se puede acceder al commit anterior con HEAD ^, creo que está buscando algo como:
git diff HEAD^ HEAD
A partir de Git 1.8.5, @es un alias para HEAD, por lo que puede usar:
git diff @~..@
Lo siguiente también funcionará:
git show
Si desea conocer la diferencia entre head y cualquier commit, puede usar:
git diff commit_id HEAD
Y esto lanzará su herramienta visual diff (si está configurada):
git difftool HEAD^ HEAD
Como la comparación con HEAD es predeterminada, puede omitirla (como lo señala Orient ):
git diff @^
git diff HEAD^
git diff commit_id
Advertencias
@ScottF y @Panzercrisis explican en los comentarios que en Windows se ~debe usar el carácter en lugar de ^.
Quería algo así como la versión comprometida y la versión anterior ... git diff head head-1
Rajeev
77
A partir de Git 1.8.5, @es un alias para HEAD. Y puesto ~y ^son los mismos cuando sólo se va uno comprometerse atrás, me parece git diff @~..@mucho más fácil de escribir.
Andrew
80
@Andrew git showes aún más fácil, ya que @~..@es lo que se muestra por defecto.
amalloy el
3
git showsimplemente imprime el mensaje de confirmación, no genera una diferencia de los cambios específicos, al menos en Git 2.5.4 (Apple Git-61), por lo que en realidad no sería una respuesta a la pregunta del OP.
user1944491
1
El problema git showes que si se HEADtrata de una confirmación de fusión, no obtendrá lo que espera, ya que la confirmación de fusión en sí misma puede no tener ningún cambio. git diff HEAD^ HEADmostrará los cambios reales entre las versiones
RubenLaguna
158
Suponiendo que "versión actual" es el directorio de trabajo (modificaciones no confirmadas) y "última versión" es HEAD(últimas modificaciones confirmadas para la rama actual), simplemente haga
git diff HEAD
El crédito por lo siguiente va al usuario Cerran .
Y si siempre omite el área de preparación -acuando se compromete, simplemente puede usargit diff .
Resumen
git diff muestra cambios no organizados.
git diff --cached muestra cambios por etapas.
git diff HEAD muestra todos los cambios (tanto en escena como sin escena).
Y si siempre omite el área de preparación -acuando se compromete, simplemente puede usar git diff. <1> git diffmuestra unstaged cambios. <2> git diff --cachedmuestra los cambios por etapas . <3> git diff HEADmuestra todos los cambios (tanto en etapas como sin etapas). Fuente: Página del manual de git-diff (1)
Cerran
1
Esta debería ser la respuesta aceptada porque responde a la intención de la pregunta.
Tgoneil
¿Cuál es el nombre de "la versión actual no preparada" en git? ¿Hay realmente un nombre?
Mathieu CAROFF
118
Como se señaló en un comentario de amalloy , si por "versiones actual y última" te refieres a la última confirmación y la confirmación anterior, simplemente puedes usar
Se usa git show HEAD~1para mostrar la confirmación de último pero uno, y git show HEAD~2etc. para las confirmaciones anteriores. Mostrar solo un archivo a través de git show HEAD~2 my_file.
Florian Brucker
60
Diferencia entre el último compromiso y el último compromiso (más el estado actual, si corresponde):
git diff HEAD~
o incluso (más fácil de escribir)
git diff @~
donde @es el sinónimo HEADde la rama actual y ~significa "dame el padre de la revisión mencionada".
Me gusta bastante git diff HEAD^(en lugar de la HEAD~forma equivalente ). Es un poco más fácil de recordar para un "viejo imbécil" como yo ;-)
sxc731
3
La zanahoria es un problema en algunas terminales. Es bueno tener la opción
light24bulbs
1
La respuesta podría mejorarse explicando qué significan ~y @.
Bob Stein el
1
Si solo queremos verificar lo que se confirma en la última confirmación, no lo use (ya que los cambios sucios afectan la diferencia). Una sintaxis más corta que realmente diff HEAD^ HEADdebería ser git diff @^!. Ver git-scm.com/docs/gitrevisions parar1^!
Johnny Wong
@JohnnyWong Gracias por tu aclaración. Mencioné "estado actual" para no confundir a los lectores.
Tomilov Anatoliy
53
También puedes hacerlo de esta manera:
Comparar con el commit anterior
git diff --name-status HEAD~1..HEAD
Compare con las dos confirmaciones actuales y anteriores
En primer lugar, use "git log " para enumerar los registros del repositorio.
Ahora, seleccione las dos ID de confirmación, correspondientes a las dos confirmaciones. Desea ver las diferencias ( ejemplo : la mayor cantidad de confirmaciones y algunas más antiguas (según sus expectativas de la versión actual y alguna versión anterior) ).
Respuestas:
Realmente no entiendo el significado de "última versión".
Como se puede acceder al commit anterior con HEAD ^, creo que está buscando algo como:
A partir de Git 1.8.5,
@
es un alias paraHEAD
, por lo que puede usar:Lo siguiente también funcionará:
Si desea conocer la diferencia entre head y cualquier commit, puede usar:
Y esto lanzará su herramienta visual diff (si está configurada):
Como la comparación con HEAD es predeterminada, puede omitirla (como lo señala Orient ):
Advertencias
~
debe usar el carácter en lugar de^
.fuente
@
es un alias paraHEAD
. Y puesto~
y^
son los mismos cuando sólo se va uno comprometerse atrás, me parecegit diff @~..@
mucho más fácil de escribir.git show
es aún más fácil, ya que@~..@
es lo que se muestra por defecto.git show
simplemente imprime el mensaje de confirmación, no genera una diferencia de los cambios específicos, al menos en Git 2.5.4 (Apple Git-61), por lo que en realidad no sería una respuesta a la pregunta del OP.git show
es que si seHEAD
trata de una confirmación de fusión, no obtendrá lo que espera, ya que la confirmación de fusión en sí misma puede no tener ningún cambio.git diff HEAD^ HEAD
mostrará los cambios reales entre las versionesSuponiendo que "versión actual" es el directorio de trabajo (modificaciones no confirmadas) y "última versión" es
HEAD
(últimas modificaciones confirmadas para la rama actual), simplemente hagaEl crédito por lo siguiente va al usuario
Cerran
.Y si siempre omite el área de preparación
-a
cuando se compromete, simplemente puede usargit diff
.Resumen
git diff
muestra cambios no organizados.git diff --cached
muestra cambios por etapas.git diff HEAD
muestra todos los cambios (tanto en escena como sin escena).Fuente: git-diff (1) Página del manual - Cerran
fuente
-a
cuando se compromete, simplemente puede usargit diff
. <1>git diff
muestra unstaged cambios. <2>git diff --cached
muestra los cambios por etapas . <3>git diff HEAD
muestra todos los cambios (tanto en etapas como sin etapas). Fuente: Página del manual de git-diff (1)Como se señaló en un comentario de amalloy , si por "versiones actual y última" te refieres a la última confirmación y la confirmación anterior, simplemente puedes usar
fuente
git show HEAD~1
para mostrar la confirmación de último pero uno, ygit show HEAD~2
etc. para las confirmaciones anteriores. Mostrar solo un archivo a través degit show HEAD~2 my_file
.Diferencia entre el último compromiso y el último compromiso (más el estado actual, si corresponde):
o incluso (más fácil de escribir)
donde
@
es el sinónimoHEAD
de la rama actual y~
significa "dame el padre de la revisión mencionada".fuente
git diff HEAD^
(en lugar de laHEAD~
forma equivalente ). Es un poco más fácil de recordar para un "viejo imbécil" como yo ;-)~
y@
.diff HEAD^ HEAD
debería sergit diff @^!
. Ver git-scm.com/docs/gitrevisions parar1^!
También puedes hacerlo de esta manera:
Comparar con el commit anterior
Compare con las dos confirmaciones actuales y anteriores
fuente
Solo use la
cached
bandera si agregó, pero aún no se ha comprometido:fuente
Rápido y simple, asumiendo que estás en el maestro:
Ejemplo:
fuente
En primer lugar, use "
git log
" para enumerar los registros del repositorio.Ahora, seleccione las dos ID de confirmación, correspondientes a las dos confirmaciones. Desea ver las diferencias ( ejemplo : la mayor cantidad de confirmaciones y algunas más antiguas (según sus expectativas de la versión actual y alguna versión anterior) ).
A continuación, use:
o
fuente
Si HEAD señala la confirmación superior, puede hacer algo como esto:
Diferencia entre la primera y la segunda confirmación:
Diferencia entre el primer y el tercer compromiso:
Diferencia entre segunda y tercera confirmación:
Y así...
fuente
Yo uso Bitbucket con el Eclipse IDE con el Eclipse EGit complemento instalado.
Comparo un archivo de cualquier versión de su historial (como SVN ).
Menú Explorador de proyectos → Archivo → clic derecho → Equipo → Mostrar en el historial .
Esto traerá el historial de todos los cambios en ese archivo. Ahora Ctrlhaga clic y seleccione cualquiera de las dos versiones → "Comparar entre sí" .
fuente
Esto también funcionará para las etiquetas (elimine el 'uniq' a continuación y otras partes si necesita ver todos los cambios):
Lo siguiente es lo mismo, y eso podría ser útil para la integración continua (CI) para microservicios en un repositorio monolítico:
(Crédito: https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )
fuente