git - pendientes - Mostrando qué archivos han cambiado entre dos revisiones
ver cambios en un archivo git (14)
Quiero fusionar dos ramas que han estado separadas 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 ramas 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 los 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 hay algo que extrañe ...
Cuando se trabaja en colaboración, o en varias funciones a la vez, es común que el upstream o incluso su maestro contenga trabajos que no estén incluidos en su rama, y aparezcan incorrectamente en diferencias básicas.
Si su Upstream puede haberse movido, debe hacer esto:
git fetch
git diff origin/master...
El solo uso de git diff master puede incluir, o no incluir, cambios relevantes.
Hay dos ramas, digamos
- A (Rama en la que estás trabajando)
- B (Otra rama con la que quieres comparar)
Estando en la rama A puedes teclear
git diff --color B
entonces esto te dará una salida de
El punto importante sobre esto es
El texto en verde está dentro presente en la rama A
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 sucursales 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 necesite 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á 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 líneas nuevas
git diff master..
Para comparar la rama actual contra el master
$ git diff --name-status master
Para comparar cualquier par de ramas.
$ git diff --name-status firstbranch..yourBranchName
Eso debería hacer lo que necesites, si te entiendo correctamente.
Si alguien está intentando generar un archivo diff desde dos ramas:
git diff master..otherbranch > myDiffFile.diff
Si está utilizando IntelliJ IDEA , también puede comparar cualquier rama con su rama de trabajo actual. Consulte http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 para obtener más información. Esto también está disponible en la edición gratuita .
Si te gusta la GUI y estás usando Windows, aquí hay una manera fácil.
- Descargar WinMerge
- Echa un vistazo a las dos ramas en diferentes carpetas
- Haga una carpeta por carpeta de comparación utilizando WinMerge. También puede hacer modificaciones fácilmente si una de las sucursales es la que está trabajando.
También hay un método basado en GUI.
Puedes usar gitk .
Correr:
$ gitk --all
Haga clic con el botón derecho en la confirmación de una rama y seleccione Marcar esta confirmación en el menú emergente.
- Haga clic con el botón derecho en una confirmación de otra rama y seleccione Diff this -> commit commit o Diff marcado commit -> this .
Luego habrá una lista de archivos modificada en el panel inferior derecho y detalles de diferencias en el panel inferior izquierdo.
También puede comparar fácilmente sucursales para archivos modificados utilizando, por ejemplo, TortoiseGit . Simplemente haga clic en Examinar referencias y seleccione las ramas que desea comparar.
Por ejemplo, si compara su rama con el maestro , obtendrá como resultado una lista de archivos que se cambiarán en el maestro si decide fusionar su rama en el maestro .
Recuerde que tendrá un resultado diferente si compara maestro con su rama y su rama con maestro .
También tenga 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 el master
tiene los cambios en los que quiero fusionar y si mi rama 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 me enredo solo puedo eliminar la rama ba-merge
y comenzar de nuevo.
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.
Tratar
$ 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 tuviera que fusionar de la otra manera:
$ git diff --stat --color branchName..master
Una opción más, usando meld en este caso:
git difftool -d master otherbranch
Esto permite no solo ver las diferencias entre archivos, sino que también proporciona una manera fácil de señalar y hacer clic en un archivo específico.
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. p.ej:
git diff master -- controller/index.js