online one files example commits branches git git-diff

one - ¿Hay una forma rápida de "git diff" desde el origen del punto o rama?



git diff one file (5)

He examinado varias respuestas de SO sobre el uso de git diff y las revisiones de git (HEAD, ORIG_HEAD, FETCH_HEAD, etc.) y todavía no he encontrado una manera fácil de enumerar los cambios realizados desde el inicio de la sucursal local, o desde la última rebase.

Me refiero a fácil sin tener que buscar y pegar el SHA de confirmación o tener que contar cuántos compromisos quiero mirar hacia atrás.

git diff origin/master está cerca, pero se refiere a un control remoto que puede haber divergido desde que verifiqué una nueva rama.

Espero que algo como git diff BASE_HEAD esté disponible.

... a menos que ya haya una manera de hacer eso. ¿Alguien tiene la respuesta?


En Visual Studio 2017 hay una forma cómoda de mostrar diferencias:

  1. En Team Explorer -> Ramas, haga clic con el botón derecho en la rama y seleccione Ver historial

  1. En el historial - control de rama , seleccione las confirmaciones que desea que difieran y seleccione Comparar confirmaciones

Obtienes un buen resumen de diferencias y puedes abrir los archivos en modo de comparación.


Para diffs, quieres la notación de tres puntos. Si tu rama se llama dev y se bifurca del master :

% git diff master...dev

Para el registro, desea la notación de dos puntos:

% git log master..dev

La sintaxis de revisión r1..r2 (con dos puntos) significa "todo lo que se puede r2 desde r2 (inclusive) pero no es accesible desde r1 (inclusive)". La forma normal de usar esto es pensar que r1 y r2 especifican un rango en una secuencia de confirmaciones ( r1 exclusivo, r2 inclusive), por lo que si tiene 10 revisiones, 3..7 le mostrará los cambios 4, 5, 6 y 7. Es {1, 2, 3, 4, 5, 6, 7} menos {1, 2, 3} . Pero r1 no necesariamente tiene que ser un antepasado de r2 . Piense en ello como una operación de conjunto en la que r1 representa la ascendencia completa desde r1 revés, y r2 representa la ascendencia completa desde r2 hacia atrás, y está restando el primer conjunto del segundo conjunto.

Por lo que entonces:

git log master..dev

Es toda la historia de la rama menos toda la historia del maestro. En otras palabras, sólo la rama.


Puede diferenciar la rama actual desde el punto de inicio de la rama utilizando:

git diff (start point)...

Donde (punto de inicio) es un nombre de rama, un ID de confirmación o una etiqueta.

Por ejemplo, si estás trabajando en una rama ramificada desde el develop , puedes usar:

git diff develop...

para todos los cambios en la rama actual desde el punto de la rama.

Esto ya se mencionó en un comentario, pero creo que merece un estado de respuesta. No sé qué hará desde la última rebase.


Puedes encontrar el punto de bifurcación usando git merge-base . Considere la posibilidad de master la línea principal y desarrollar la rama en la que está interesado. Para encontrar el punto en el que se derivó dev del master , ejecute:

git merge-base --fork-point master dev

Ahora podemos diferenciar contra esta base:

git diff $(git merge-base --fork-point master dev)..dev

Si dev es la rama actual, esto se simplifica a:

git diff $(git merge-base --fork-point master)

Para obtener más información, consulte la documentación de git-merge-base .


Use git diff @{u}...HEAD , con tres puntos.

Con dos puntos, o con HEAD omitido, mostrará diferencias de cambios en ambos lados.

Con tres puntos, solo mostrará diferencias de cambios en tu lado.

Edición: para personas con necesidades ligeramente diferentes, es posible que esté interesado en git merge-base (tenga en cuenta que tiene muchas más opciones que las que utiliza la otra respuesta).