Tengo una rama vieja, 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 otro punto. 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 alguna secuencia de comandos, ¿cómo se ven todas las confirmaciones en una rama que no se han aplicado? a otra rama dada?].
git
branch
git-branch
sircolinton
fuente
fuente
Respuestas:
Probablemente solo quieras
Esto mostrará una lista de todas las ramas que contienen los commits de "branch-to-delete". Si informa más que solo "rama a borrar", la rama se ha fusionado.
Sus alternativas son realmente cosas de sintaxis de lista de revoluciones. Por ejemplo,
git log one-branch..another-branch
muestra todo lo queone-branch
necesita tener todo lo queanother-branch
tiene.También te puede interesar
git show-branch
como una forma de ver qué es dónde.fuente
git branch --contains some-branch
sólo vuelvesome-branch
, entonces se hace el retorno algo, pero ha no han fusionado.git log foo..bar
mostrará las confirmaciones entre la última barra y la última de foo, pero no faltan otras confirmaciones de más atrás en el tiempo. Para ver todo en bar pero no en foo, debes usar la solución de @ jimmyorr.Para ver una lista de las confirmaciones que están en una rama pero no en otra, use git log:
... es decir, mostrar registros de confirmación para todas las confirmaciones en oldbranch que no están en newbranch. Puede enumerar varias ramas para incluir y excluir, p. Ej.
Nota: en Windows
^
es una tecla de escape, por lo que debe escaparse con otra^
:fuente
^
como prefijo aquí me confundió. En este contexto, significa excluir esa rama. Usar^
como sufijo sería una referencia relativa a la confirmación principal de esa rama.gitk oldbranch ^newbranch --no-merges
(Probado con git 1.8.1.1). Nota al margen, para mí^
significa compromiso HEAD inclusivo de ramanewbranch
.Para mostrar los commits en oldbranch pero no en newbranch:
Para mostrar la diferencia por estas confirmaciones (tenga en cuenta que hay tres puntos):
Aquí está el documento con una ilustración del diagrama https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
fuente
newbranch
ooldbranch
, podemos hacergit log ..oldbranch
ogit log newbranch..
respectivamente..
entre los nombres de los árbitros. También utilicé la--cherry-pick
opción para ocultar las confirmaciones que están presentes en ambas ramas pero que tienen un hash diferente porque se seleccionaron de una rama a otra.Para aquellos que todavía buscan una respuesta simple, echa un vistazo a git cherry . Compara las diferencias reales en lugar de los hash de confirmación. Eso significa que tiene en cuenta los compromisos que se han seleccionado o rebajado.
Primero revise 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
Salida de ejemplo:
Nota: El
-v
indicador debe incluir el mensaje de confirmación junto con el hash SHA.Las líneas con el '+' al frente están en la rama para borrar, pero no en la rama maestra. Aquellos con un '-' en frente tienen un commit equivalente en master.
Para SOLO los commits que no están en master, combine cherry pick con grep:
git cherry -v master | grep "^\+"
Salida de ejemplo:
fuente
diff
utilidad Unix para comparar los distintos archivos. O bien, podría crear una rama temporal y aplastar todas las confirmaciones de manera similar a lo que hizo con la rama original, y luego usar esto, que creo que funcionaría.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 usa para encontrar todas las ramas que se pueden eliminar de forma segura, ya que esas ramas están completamente contenidas por HEAD.
Mientras que en
master
uno se podía ejecutar el comando para enumerar las ramas que se podían eliminar de forma segura, así:fuente
La respuesta de jimmyorr no funciona en Windows. ayuda a usar en
--not
lugar de hacerlo^
así:fuente
^
es compatible con Windows, pero tiene que ser escapado, lo que, en Windows, es (otro)^
:git log oldbranch ^^newbranch --no-merges
.Si es una rama (única) que necesita verificar, por ejemplo, si desea que la rama 'B' esté completamente fusionada con la rama 'A', simplemente puede hacer lo siguiente:
git branch -d <branchname>
tiene la seguridad de que "La rama debe estar completamente fusionada en HEAD".Precaución : esto realmente elimina la rama B si se fusiona con A.
fuente
Puede usar este script simple para ver confirmaciones que no se fusionan
También puede usar la herramienta git-wtf que mostrará el estado de las ramas
fuente
Solo use
git cherry
para elegir todas las confirmaciones en la rama,newFeature42
por ejemplo:git cherry -v master nuevo
fuente
Comience a crear una solicitud de extracción a través del servicio de alojamiento git que está utilizando. Si la rama se ha fusionado completamente con la rama base, no podrá crear el nuevo RP.
En realidad, no necesita hacer la solicitud de extracción, solo use el primer paso donde elija las ramas.
Por ejemplo, en GitHub:
Esto no usa git en la línea de comando, pero a menudo encuentro útil usar las otras herramientas a su disposición con un modelo mental claro en lugar de intentar recordar otro comando aritano de git.
fuente