¿Hay alguna manera de ver qué archivos han cambiado en una rama?
¿Hay alguna manera de ver qué archivos han cambiado en una rama?
Respuestas:
Una alternativa a la respuesta de @Marco Ponti, y evitando el pago:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Si su shell en particular no entiende la construcción $ (), use back-ticks en su lugar.
git diff --name-only <some-other-branch>
le mostrará qué archivos son diferentes entre su rama actual y <some-other-branch>
. Por lo que es esencialmente el mismo comando, pero tenga en cuenta que puede utilizar esto para encontrar los archivos que son diferentes entre las dos ramas, incluso si no están relacionados de forma remota. Si esa comparación es útil o no depende de la topología de sus ramas ... Además, tenga en cuenta que <some-other-branch>
realmente podría ser cualquier confirmación, o cualquier cosa que se resuelva en una (etiquetas, etc.).
<notMainDev>
y <MY_CURRENT_CO_BRANCH>
más recientemente, tuvo un ancestro común, y lo comparará <notMainDev>
con ese ancestro. Sin embargo, deberá proporcionar su nombre de sucursal actual, ya que git merge-base
espera dos argumentos: no hay un acceso directo, al menos en la versión actual.
git branch | grep '\*' | awk '{print $2}'
que obtendrá la confirmación de la rama entre <notMainDev> y mi rama actual. Entonces puedo hacer git diff --name-only <notMainDev> $ (git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
Todo lo que tienes que hacer es lo siguiente:
git checkout <notMainDev>
git diff --name-only <mainDev>
Esto le mostrará solo los nombres de archivo que son diferentes entre las dos ramas.
<mainDev>
embargo, creo que eso también mostrará cosas que han cambiado desde que las ramas divergieron. Es posible que desee utilizar git diff --name-only <sha-of-branch-point>
en su lugar, o ver la respuesta alternativa que publiqué que evita el pago.
notMainDev
que se mantendría actualizado con los compromisos de mainDev ... Sin embargo, generalmente también me resulta útil ver esas diferencias.
<sha-of-branch-point>
congit rev-parse <branch-name>
asombrado esto no se ha dicho hasta ahora!
git diff master...branch
Entonces vea los cambios solo en branch
Para verificar el uso actual de la sucursal
git diff master...
Gracias a jqr
Esta es una mano corta para
git diff $(git merge-base master branch) branch
entonces la base de fusión (la confirmación común más reciente entre las ramas) y la punta de la rama
También usar origen / maestro en lugar de solo maestro ayudará en caso de que su maestro local esté fechado
git diff --name-only master..
si solo desea los nombres de los archivos que son diferentes entre las dos ramas.
No puedo creer que haya tantas maneras de hacer esto. Uso lo que cambió como alguien publicado antes, solo con los siguientes argumentos:
git whatchanged --name-only --pretty="" origin..HEAD
Esto solo enumera los nombres de archivo, y solo los que cambiaron en la rama actual.
New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
Realmente me gustó la respuesta de @ twalberg, pero no quería tener que escribir el nombre de la sucursal actual todo el tiempo. Entonces estoy usando esto:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
cuando se ejecuta en la rama de destino y obtengo el mismo resultado. ¿Podrías ser tan amable de darnos tu opinión sobre lo que es bueno o malo entre tu respuesta y el comando que he proporcionado?
git diff master.. --name-only
(tenga en cuenta que solo hay 2 puntos en lugar de 3). Para entender lo que significan los puntos, vea esta respuesta
git whatchanged
Parece ser una buena alternativa.
New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
git diff --name-only master...branch-name
con lo que queremos comparar
¿Y si pudiera ser tan fácil como esto?
git changed
Si está dispuesto a asumir que la rama principal se llama "maestra" y que crea sus otras ramas desde la maestra, puede agregar este alias a su ~/.gitconfig
archivo para que sea más fácil:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Esos supuestos funcionarán para la mayoría de las personas en la mayoría de las situaciones, pero debes ser consciente de que los estás haciendo.
Además, debe usar un shell que sea compatible $()
. Es muy probable que su shell lo admita .
git show --stat origin/branch_name
Esto le dará una lista de los archivos que se agregaron o modificaron en esta rama.
Por alguna razón, nadie lo mencionó git-tree
. Ver https://stackoverflow.com/a/424142/1657819
git-tree
se prefiere porque es un comando de plomería ; destinado a ser programático (y, presumiblemente, más rápido)
(suponiendo que la rama base es master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
Sin embargo, esto le mostrará todos los archivos que se vieron afectados en la rama, si solo desea ver archivos modificados explícitamente , puede usar --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
También se puede usar en --name-status
lugar de --name-only
ver el estado de los archivos ( A
/ M
/ D
y así sucesivamente)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
La respuesta aceptada git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- está muy cerca, pero noté que tenía el estado incorrecto para las eliminaciones. Agregué un archivo en una rama y, sin embargo, este comando (usando --name-status
) dio el archivo que eliminé el estado "A" y el archivo que agregué el estado "D".
Tuve que usar este comando en su lugar:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
El siguiente archivo por lotes se basa en la respuesta de twalberg, pero funcionará en Windows:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
Lo anterior supone que la rama principal es origin / master y que git bash se incluyó cuando se instaló Git (y su ubicación se encuentra en el entorno de la ruta). De hecho, necesitaba mostrar las diferencias reales usando una herramienta diff configurada (kdiff3), así que sustituí el siguiente comando bash anterior:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"