Cuando ejecuto "git pull", a menudo quiero saber qué cambió entre la última versión de un archivo y la nueva. Digamos que quiero saber lo que otra persona comprometió con un archivo en particular.
¿Cómo se hace eso?
Supongo que es "git diff" con algunos parámetros para la confirmación x versus la confirmación y, pero parece que no puedo obtener la sintaxis. También encuentro "git log" un poco confuso y no estoy seguro de dónde obtener el ID de confirmación de mi última versión del archivo frente a la nueva.
Respuestas:
Hay todo tipo de formas maravillosas de especificar confirmaciones; consulte la sección de especificación de revisiones de
man git-rev-parse
para obtener más detalles. En este caso, probablemente quieras:Los
@{1}
medios "la posición anterior de la referencia que he especificado", por lo que se evalúa a lo que había verificado anteriormente, justo antes de la extracción. Puede virarHEAD
al final allí si también tiene algunos cambios en su árbol de trabajo y no desea ver las diferencias para ellos.No estoy seguro de lo que está pidiendo con "el ID de confirmación de mi última versión del archivo": el "ID de confirmación" (hash SHA1) es ese hexadecimal de 40 caracteres justo en la parte superior de cada entrada en la salida de git log. Es el hash de toda la confirmación, no de un archivo determinado. Realmente nunca necesita más: si desea diferenciar solo un archivo en la extracción, haga
Esto es algo general: si desea saber sobre el estado de un archivo en una confirmación determinada, especifique la confirmación y el archivo, no un ID / hash específico del archivo.
fuente
@{1}
como abreviatura deHEAD@{1}
)Me gusta usar:
O si solo quiero diferenciar un archivo específico:
fuente
HEAD^
es la confirmación principal, no la confirmación anteriorpull
HEAD
es una confirmación de fusión,HEAD^
es la primera confirmación principal, así que sí, puede ser la confirmación antes depull
. Para obtener el otro padre (para una combinación bidireccional), useHEAD^2
. Pero entonces, la respuesta anterior no es realmente responder a la pregunta en primer lugar, así que dejando el -1 ;-)Si lo hace directamente
git pull
, será 'reenviado rápidamente' o fusionará un número desconocido de confirmaciones del repositorio remoto. Sin embargo, esto sucede como una acción, por lo que la última confirmación en la que estaba inmediatamente antes de la extracción será la última entrada en el reflog y se puede acceder comoHEAD@{1}
. Esto significa que puede hacer:Sin embargo, recomendaría encarecidamente que si esto es algo que se encuentra haciendo mucho, debería considerar simplemente hacer una
git fetch
y examinar la rama obtenida antes de fusionar o rebasar manualmente en ella. Por ejemplo, si está en el maestro y va a extraer el origen / maestro:fuente
git log
lugar degit diff
aquí (incluso si la sintaxis es un poco incoherente entre el '..' paragit log
y el '...' paragit diff
;) +1 Ver stackoverflow.com/questions/53569/… y stackoverflow.com/questions / 850607 /…