Mostrando qué archivos han cambiado entre dos revisiones


Quiero fusionar dos ramas que se han separado durante un tiempo y quería saber qué archivos se han modificado.

Se encontró con este enlace: http://linux.yyz.us/git-howto.html que fue bastante útil.

Las herramientas para comparar ramas que he encontrado son:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Se preguntaba si hay algo como "git status master..branch " para ver solo aquellos archivos que son diferentes entre los dos rama.

Sin crear una nueva herramienta, creo que esto es lo más cerca que puede llegar a hacer eso ahora (que por supuesto mostrará repeticiones si un archivo se modificó más de una vez):

  • git diff master..branch | grep "^diff"

Me preguntaba si hay algo que me perdí...

Author: jubobs, 2009-05-05

14 answers

Para comparar la rama actual con master

$ git diff --name-status master

Para comparar cualquier par de ramas

$ git diff --name-status firstbranch..yourBranchName

Eso debería hacer lo que necesitas, si te entiendo correctamente.

 2233
Author: JasonSmith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-16 18:47:13

Intenta

$ git diff --stat --color master..branchName

Esto le dará más información sobre cada cambio, mientras sigue utilizando el mismo número de líneas.

También puede voltear las ramas para obtener una imagen aún más clara de la diferencia si se fusionara de la otra manera:

$ git diff --stat --color branchName..master
 359
Author: Gerry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-01 23:34:01

También ten en cuenta que git tiene ramificaciones baratas y fáciles. Si creo que una fusión podría ser problemática, creo una rama para la fusión. Así que si master tiene los cambios que quiero fusionar y ba es mi rama que necesita el código del maestro, podría hacer lo siguiente:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

El resultado final es que tengo que probar la fusión en una rama desechable antes de atornillar con mi rama. Si consigo mi auto enredado puedo borrar la rama ba-merge y empezar de nuevo.

 146
Author: Eric Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-11 01:22:19

Si alguien está tratando de generar un archivo diff a partir de dos ramas :

git diff master..otherbranch > myDiffFile.diff
 45
Author: Paulino III,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-03 14:01:39

Tenga en cuenta que git hace que sea fácil probar la combinación y alejarse de cualquier problema si no le gusta el resultado. Podría ser más fácil que buscar problemas potenciales de antemano.

 30
Author: David Plumpton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-05 00:59:54

También hay un método basado en GUI.

Puedes usar gitk.

  1. Ejecutar:

    $ gitk --all
    
  2. Haga clic derecho en un commit de una rama y seleccione Marque este commit en el menú emergente.

  3. haga clic Derecho en un commit de otra rama y seleccione Diff this -> marcado cometer o Diff marcado commit -> este.

Luego habrá una lista de archivos cambiados en el panel inferior derecho y detalles de diferencias en el panel inferior izquierdo.

 29
Author: Shawn Xie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-10 22:15:11

Una opción más, usando meld en este caso:

git difftool -d master otherbranch

Esto no solo permite ver las diferencias entre archivos, sino que también proporciona una manera fácil de apuntar y hacer clic en un archivo específico.

 27
Author: rsilva4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-24 13:23:31

Cuando se trabaja en colaboración, o en múltiples características a la vez, es común que el upstream o incluso su master contenga trabajo que no está incluido en su rama, y aparecerá incorrectamente en las diferencias básicas.

Si su Upstream puede haberse movido, debe hacer esto:

git fetch
git diff origin/master...

Solo usando git diff master puede incluir, o no incluir, cambios relevantes.

 14
Author: Alex Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-17 03:12:13

Y si está buscando cambios solo entre ciertos archivos, entonces:

git diff branch1 branch2 -- myfile1.js myfile2.js

Branch1 es opcional y su rama actual (la rama en la que está) se considerará por defecto si branch1 no se proporciona. por ejemplo:

git diff master -- controller/index.js
 12
Author: Mannu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-30 18:38:37

Si está utilizando IntelliJ IDEA, también puede comparar cualquier rama con su rama de trabajo actual. Véase http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 para más información. Esto también está disponible en la edición gratuita .

 9
Author: Wim Deblauwe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-06 07:17:35

Hay dos ramas digamos

  • A (Rama en la que está trabajando)
  • B (Otra rama con la que desea comparar)

Al estar en la rama A puede escribir

git diff --color B

Entonces esto le dará una salida de

introduzca la descripción de la imagen aquí

El punto importante sobre esto es

  1. El texto en verde está presente en la rama A

  2. El texto en rojo está presente en la rama B

 4
Author: selftaught91,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-04 11:56:48

Hay muchas respuestas aquí, pero quería agregar algo que uso comúnmente. SI estás en una de las ramas que te gustaría comparar normalmente hago una de las siguientes. Por el bien de esta respuesta diremos que estamos en nuestra rama secundaria. Dependiendo de qué vista necesita en el momento dependerá de la que elija, pero la mayoría de las veces estoy usando la segunda opción de las dos. La primera opción puede ser útil si está tratando de volver a una copia original -- de cualquier manera, ambos hacen el trabajo!

Esto comparará master con la rama en la que estamos (que es secundaria) y el código original serán las líneas agregadas y el nuevo código se considerará las líneas eliminadas

git diff ..master

O

Esto también comparará master con la rama en la que estamos (que es secundaria) y el código original serán las líneas antiguas y el nuevo código serán las nuevas líneas

git diff master..
 3
Author: Jase,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 22:00:58

Si te gusta la interfaz gráfica de usuario y estás usando Windows, aquí hay una manera fácil.

  1. Descargar WinMerge
  2. Echa un vistazo a las dos ramas en carpetas diferentes
  3. Haga una comparación carpeta por carpeta usando WinMerge. También puede hacer modificaciones fácilmente si una de las ramas es la que está trabajando.
 -1
Author: Marius Matioc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-19 23:21:20

También puede comparar fácilmente ramas para archivos modificados usando por ejemplo TortoiseGit. Simplemente haga clic en Buscar Referencias y elige las ramas que quieres comparar.

Por ejemplo, si se compara su rama con master obtendrá como resultado una lista de los archivos que va a ser cambiado en master si decide combinar su rama- en master.

Recuerde que tendrá un resultado diferente si comparar master con su rama- y su rama- con master.

 -3
Author: Piotr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-18 09:53:19