¿Cómo cerrar una sucursal de Git?

112

así que estoy comenzando a usar Git + GitHub.

En nuestro pequeño equipo distribuido, cada miembro crea su propia rama para cada problema / requisito que se le asigna.

  1. git branch Issue#1 <-- create this branch
  2. git checkout issue#1 <-- switch over to this branch

Ahora code code, commit, code, commit, etc ...

a continuación pull request, code-fixup, commit, code, commit.. etc.

y FINALMENTE ... se acepta la solicitud de extracción.

Woot.

pero .. ahora que? (......torpe......)

¿La persona que creó la rama en su máquina de desarrollo local necesita ... cerrar la rama? Una sugerencia fue que la persona de desarrollo elimine la rama `(... -D ...) y luego haga una extracción / actualización del maestro ... que luego obtendrá todo su código de rama.

Hmmmmm ... no estoy seguro - por favor ayuda :)

Pure.Krome
fuente
16
Una rama en Git es solo una etiqueta en una confirmación específica, así que básicamente, si ya no la necesita, simplemente elimine esa "rama" (esa "etiqueta" en esa confirmación). Localmente, simplemente haga un git branch Issue#1 -dy eso es todo lo que hay: no se pierde ningún código, solo se elimina una etiqueta de su repositorio
marc_s
1
@marc_s sugiero que solo haga una respuesta :)
KingCrunch
Entonces @marc_s, estás diciendo que la práctica estándar una vez que hayas terminado tu rama ... y la rama haya sido empujada ... ¿la borramos? ¿Qué hay de la fusión?
Pure.Krome
@ Pure.Krome Al menos supuse que por "se acepta la solicitud de extracción" quieres decir que ya está fusionada. Sí, por supuesto, integre los cambios en master, developo como se llame su rama de desarrollo (Merge, Rebase (con / sin squash), ...)
KingCrunch
cuando dije 'se acepta la solicitud de extracción' ... eso sucede en otro lugar. (es decir, el desarrollador a cargo que aprueba todo el código que se publica ...). Me preguntaba si debería cambiar a master en MI máquina de desarrollo local y hacer una fusión también.
Pure.Krome

Respuestas:

181

Solicitamos que el desarrollador que solicita la solicitud de extracción indique que le gustaría que se elimine la rama. La mayoría de las veces este es el caso. Hay ocasiones en las que se necesita una rama (por ejemplo, copiando los cambios a otra rama de la versión).

Mis dedos han memorizado nuestro proceso:

git checkout <feature-branch>
git pull
git checkout <release-branch>
git pull
git merge --no-ff <feature-branch>
git push
git tag -a branch-<feature-branch> -m "Merge <feature-branch> into <release-branch>"
git push --tags
git branch -d <feature-branch>
git push origin :<feature-branch>

Una rama es para trabajar. Una etiqueta marca un lugar en el tiempo. Al etiquetar cada combinación de rama, podemos resucitar una rama si es necesario. Las etiquetas de rama se han utilizado varias veces para revisar los cambios.

Bill puerta
fuente
8
Hemos realizado un cambio reciente en nuestro procedimiento. El uso git push --tagses pesado y descarga todas las etiquetas. Esto dificulta tener sus propias etiquetas locales. En su lugar, usamos git push origin branch-<feature-branch>para empujar solo una etiqueta.
Bill Door
Entonces, en la última línea, debe recordar usar el nombre de la etiqueta para la rama de la función, que establecimos previamente en "branch- <feature-branch>", en lugar de solo <feature-branch>. ¿Correcto?
Premier Bromanov
@PremierBromanov la última línea es para eliminar la rama remota. Para recordar la etiqueta que @BillDoor ha utilizado git push --tags.
Deivide
Excelente guion !!
Kike Gamboa
41

Sí, simplemente elimine la rama ejecutando git push origin :branchname. Para solucionar un nuevo problema más tarde, bifurque nuevamente desde el maestro.

Gaurav Gupta
fuente
3
Eso eliminará la rama remota, no la local.
KingCrunch
5
No sé por qué esto está modificado en -2, esta es la respuesta correcta. Definitivamente tienen una sucursal remota, ¿de qué otra manera podrían emitir un PR contra ella?
Ana Betts
Si hace esto y luego hace un git pull, ¿no eliminará también su sucursal local? (Editar: nm, veo que explícitamente no lo hace, a menos que ejecute git remote prune).
Tim Keating
1
¿Qué pasa con el historial de la sucursal?
geoidesic
40

después de completar el código, primero combine la rama con la maestra y luego elimine esa rama

git checkout master
git merge <branch-name>
git branch -d <branch-name>
Dau
fuente
y esto está en MI propia máquina de desarrollo, ¿verdad? la persona principal que acepta cualquier código nuevo ... su máquina está en otra parte.
Pure.Krome
2
Si alguien más está haciendo la fusión, normalmente tiene su puntero de rama en un control remoto separado, por ejemplo, remitente / nombre de rama. Necesitará usar git remote prune senderpara deshacerse de él también después de que usted lo hizo, aunque en la mayoría de los casos, no tiene por qué preocuparse.
jørgensen
1
Nunca debe fusionar su propia rama a menos que sea el responsable de integrarla en el árbol principal. Si no es así y le pidió a otra persona que lo integrara, actualice su rama maestra con las nuevas confirmaciones remotas (deben contener lo que solicitó que se extraiga) y luego elimine su rama. Esto asegura que no tendrás ningún problema si el otro cambia las cosas.
ThiefMaster