Pregunta

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

Encontré este enlace: http://linux.yyz.us/git-howto.html que fue bastante útil.

Las herramientas para comparar sucursales que he encontrado son:

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

Me preguntaba si hay algo como " git status master..branch " para ver solo aquellos archivos que son diferentes entre las dos ramas.

Sin crear una nueva herramienta, creo que esto es lo más cerca que puede llegar a hacerlo 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 había algo que extrañaba ...

¿Fue útil?

Solución

Para comparar la rama actual con la rama master :

$ git diff --name-status master

Para comparar cualquiera de las dos ramas:

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

Lea sobre git diff en la documentación oficial .

Otros consejos

Probar

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

Esto le dará más información sobre cada cambio, mientras sigue usando 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

También ten en cuenta que git tiene ramificaciones baratas y fáciles. Si creo que una combinación podría ser problemática, creo una rama para la combinación. Entonces, si master tiene los cambios en los 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 combinación en una rama desechable antes de atornillar con mi rama. Si me enredo solo puedo eliminar la rama ba-merge y comenzar de nuevo.

Si alguien está intentando generar un archivo diff desde dos ramas:

git diff master..otherbranch > myDiffFile.diff

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

Puedes usar gitk .

  1. Ejecutar:

    $ gitk --all
    
  2. Haga clic con el botón derecho en la confirmación de una rama y seleccione Marcar esta confirmación en el menú emergente.

  3. Haga clic con el botón derecho en una confirmación de otra rama y seleccione Diff this - > marcado commit o Diff marcado commit - > esto .

Luego habrá una lista de archivos modificada en el panel inferior derecho y los detalles de la diferencia en el panel inferior izquierdo.

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

git difftool -d master otherbranch

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

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

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

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

branch1 es opcional y su sucursal actual (la sucursal en la que se encuentra) se considerará de forma predeterminada si no se proporciona branch1. por ejemplo:

git diff master -- controller/index.js

Al trabajar en colaboración, o en múltiples funciones a la vez, es común que el upstream o incluso su maestro contenga trabajo que no esté incluido en su rama, y ??que aparezca incorrectamente en diferencias básicas.

Si tu Upstream puede haberse movido, debes hacer esto:

git fetch
git diff origin/master...

El solo uso de git diff master puede incluir, o no incluir, cambios relevantes.

Si está utilizando IntelliJ IDEA , también puede comparar cualquier sucursal con su rama de trabajo actual. Consulte http://www.jetbrains.com/ idea / webhelp / fusionar-eliminar-y-comparar-ramas.html # d288093e3827 para obtener más información. Esto también está disponible en la edición gratuita también.

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 puedes escribir

git diff --color B

entonces esto te dará una salida de

 introduce la descripción de la imagen aquí

El punto importante sobre esto es

  1. El texto en verde está dentro de la rama A

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

Hay muchas respuestas aquí, pero quería agregar algo que uso comúnmente. SI está en una de las ramas que le gustaría comparar, normalmente hago una de las siguientes. Por el bien de esta respuesta, diremos que estamos en nuestra rama secundaria. Dependiendo de la vista que necesites en ese momento dependerá de la que elijas, 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á intentando volver a una copia original. ¡De cualquier manera, ambos hacen el trabajo!

Esto comparará el maestro con la rama en la que estamos (que es secundario) 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á el maestro con la rama en la que estamos (que es secundario) y el código original será las líneas antiguas y el nuevo código serán las nuevas líneas

git diff master..

Si te gusta la GUI y estás usando Windows, aquí hay una manera fácil.

  1. Descargar WinMerge
  2. Echa un vistazo a las dos ramas en diferentes carpetas
  3. Haga una comparación de carpeta por carpeta usando WinMerge. También puede realizar modificaciones fácilmente si una de las sucursales es la que está trabajando.
git diff revision_n revision_m

si revision_n y revision_m son confirmaciones sucesivas, se genera igual que git show revision_m

Para las personas que buscan una solución GUI, Git Cola tiene una muy buena " Visor de diferencia de rama ( Diff - > Ramas .. ).

También puede usar un visual diff .

Por ejemplo, si está utilizando Sourcetree , simplemente puede seleccione cualquiera de las dos confirmaciones en la vista de registro .

(Personalmente prefiero usar una GUI en la mayoría de los casos para esto, y lo estoy publicando para aquellos que no estén familiarizados con las opciones de GUI).

También puede comparar fácilmente sucursales para archivos modificados utilizando, por ejemplo, TortoiseGit . Simplemente haga clic en Buscar referencias y seleccione las sucursales que desee comparar.

Por ejemplo, si compara su rama con master obtendrá como resultado una lista de archivos que se cambiarán en master si decide fusionar tu-rama en maestro .

Recuerde que tendrá un resultado diferente si compara master con your-branch y your-branch con master .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top