ver tipos tag pendientes modificados log etiquetas crear commits archivos git branch git-branch

tipos - git ver commits pendientes



Usando Git, muestre todas las confirmaciones que están en una rama, pero no la otra(s) (10)

Para aquellos que todavía están buscando una respuesta simple, echa un vistazo a git cherry . Compara diferencias reales en lugar de cometer hashes. Eso significa que contiene compromisos que han sido seleccionados o rebasados.

Primero compruebe la rama que desea eliminar:

git checkout [branch-to-delete]

luego use git cherry para compararlo con su rama de desarrollo principal:

git cherry -v master

Ejemplo de salida:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message + b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message - 85867e38712de930864c5edb7856342e1358b2a0 Yet another message

Nota: el indicador -v es para incluir el mensaje de confirmación junto con el hash SHA.

Las líneas con el ''+'' al frente están en la rama a eliminar, pero no en la rama maestra. Aquellos con un ''-'' en frente tienen un commit equivalente en master.

Para JUST las confirmaciones que no están en master, combine cherry pick con grep:

git cherry -v master | grep "^/+"

Ejemplo de salida:

+ 8a14709d08c99c36e907e47f9c4dacebeff46ecb Commit message + b30ccc3fb38d3d64c5fef079a761c7e0a5c7da81 Another commit message

Tengo una rama antigua, que me gustaría eliminar. Sin embargo, antes de hacerlo, quiero comprobar que todas las confirmaciones realizadas en esta rama se fusionaron en algún momento en otra rama. Por lo tanto, me gustaría ver todas las confirmaciones realizadas en mi rama actual que no se hayan aplicado a ninguna otra rama [o, si esto no es posible sin algunas secuencias de comandos, ¿cómo se ven todas las confirmaciones en una rama que no se han aplicado? a otra rama dada?].




Para ver una lista de las confirmaciones que se encuentran en una rama pero no en otra, use git log:

git log oldbranch ^newbranch --no-merges

... es decir, muestra los registros de confirmación para todas las confirmaciones en oldbranch que no están en newbranch. Puede enumerar múltiples ramas para incluir y excluir, por ejemplo,

git log oldbranch1 oldbranch2 ^newbranch1 ^newbranch2 --no-merges

Nota: en Windows ^ es una clave de escape, por lo que debe escaparse con otro ^ :

git log oldbranch ^^newbranch --no-merges


Probablemente solo quieras

git branch --contains branch-to-delete

Esto mostrará una lista de todas las ramas que contienen las confirmaciones de "rama a eliminar". Si informa algo más que "bifurcar para eliminar", la bifurcación se ha fusionado.

Tus alternativas son solo cosas de sintaxis rev-list. por ejemplo, git log one-branch..another-branch muestra todo lo que one-branch necesita para tener todo lo que another-branch tiene.

También puede interesarte git show-branch como una manera de ver qué es dónde.


Puede usar este simple script para ver los confirmaciones que no están fusionadas

#!/bin/bash # Show commits that exists only on branch and not in current # Usage: # git branch-notmerge <branchname> # # Setup git alias # git config alias.branch-notmerge [path/to/this/script] grep -Fvf <(git log --pretty=format:''%H - %s'') <(git log $1 --pretty=format:''%H - %s'')

También puede utilizar la herramienta git-wtf que mostrará el estado de las ramas.


Si bien algunas de las respuestas publicadas aquí ayudarán a encontrar lo que busca, el siguiente subcomando de git branch es una solución más adecuada para su tarea.

--merged se utiliza para encontrar todas las ramas que se pueden eliminar de forma segura, ya que esas ramas están totalmente contenidas en HEAD.

Mientras que en master se puede ejecutar el comando para enumerar las ramas que se pueden eliminar de forma segura, como en:

git branch --merged develop fpg_download_links * master master_merge_static # Delete local and remote tracking branches you don''t want git branch -d fpg_download_links git push origin :fpg_download_links git branch -d master_merge_static git push origin :master_merge_static # There is also a flag to specify remote branches in the output git branch --remotes --merged


Si necesita verificar una (única) rama, por ejemplo, si desea que la rama ''B'' esté completamente fusionada en la rama ''A'', simplemente puede hacer lo siguiente:

$ git checkout A $ git branch -d B

git branch -d <branchname> tiene la seguridad de que "la rama debe estar completamente fusionada en HEAD".

Tenga en cuenta que esto elimina realmente la rama si se fusiona,


Cree una solicitud de extracción a través del servicio de alojamiento de git que está utilizando. Si la rama se ha fusionado completamente en la base, no podrá crear el nuevo PR.

Por ejemplo, en GitHub:

No hay nada para comparar.

Esto no usa git en la línea de comandos, pero a menudo encuentro que es útil usar las otras herramientas a tu disposición con un modelo mental claro en lugar de intentar recordar otro comando git arcano.


La respuesta de jimmyorr no funciona en Windows. ayuda a usar --not lugar de ^ así:

git log oldbranch --not newbranch --no-merges