tutorial repositorio origin example español ejemplo comandos actualizar git

repositorio - git tutorial



¿Cómo puedo saber en git si una rama ya se ha fusionado con el maestro? (7)

Estas son mis técnicas cuando necesito averiguar si una sucursal se ha fusionado, incluso si es posible que haya sido rebasada para estar actualizada con nuestra sucursal principal, que es un escenario común para las sucursales de características.

Ninguno de estos enfoques es infalible, pero los he encontrado útiles muchas veces.

1 Mostrar registro para todas las sucursales

Usando una herramienta visual como gitk o TortoiseGit, o simplemente git log con --todo, recorra el historial para ver todas las combinaciones a la rama principal. Debería poder detectar si esta rama de característica particular se ha fusionado o no.

2 Eliminar siempre la rama remota al fusionar en una rama de función

Si tiene la buena costumbre de eliminar siempre tanto la rama local como la remota cuando se fusiona en una rama de función, simplemente puede actualizar y eliminar los controles remotos en su otra computadora y las ramas de la función desaparecerán.

Para ayudar a recordar hacer esto, ya estoy usando las extensiones de git flow (edición AVH) para crear y combinar mis sucursales de características localmente, así que agregué el siguiente gancho de git flow para preguntarme si también deseo eliminar automáticamente la sucursal remota.

Ejemplo de creación / finalización de una rama

554 Andreas:MyRepo(develop)$ git flow start tmp Switched to a new branch ''feature/tmp'' Summary of actions: - A new branch ''feature/tmp'' was created, based on ''develop'' - You are now on branch ''feature/tmp'' Now, start committing on your feature. When done, use: git flow feature finish tmp 555 Andreas:MyRepo(feature/tmp)$ git flow finish Switched to branch ''develop'' Your branch is up-to-date with ''if/develop''. Already up-to-date. [post-flow-feature-finish] Delete remote branch? (Y/n) Deleting remote branch: origin/feature/tmp. Deleted branch feature/tmp (was 02a3356). Summary of actions: - The feature branch ''feature/tmp'' was merged into ''develop'' - Feature branch ''feature/tmp'' has been locally deleted - You are now on branch ''develop'' 556 Andreas:ScDesktop (develop)$

.git / hooks / post-flow-feature-finish

NAME=$1 ORIGIN=$2 BRANCH=$3 # Delete remote branch # Allows us to read user input below, assigns stdin to keyboard exec < /dev/tty while true; do read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn if [ "$yn" = "" ]; then yn=''Y'' fi case $yn in [Yy] ) echo -e "/e[31mDeleting remote branch: $2/$3./e[0m" || exit "$?" git push $2 :$3; break;; [Nn] ) echo -e "/e[32mKeeping remote branch./e[0m" || exit "$?" break;; * ) echo "Please answer y or n for yes or no.";; esac done # Stop reading user input (close STDIN) exec <&- exit 0

3 Búsqueda por mensaje de confirmación

Si no siempre elimina la rama remota, aún puede buscar confirmaciones similares para determinar si la rama se ha fusionado o no. El problema aquí es si la rama remota ha sido rebasada a lo irreconocible, como aplastar confirmaciones o cambiar mensajes de confirmación.

  • Traer y podar todos los mandos a distancia
  • Encontrar mensaje de última confirmación en la rama de características
  • Ver si se puede encontrar una confirmación con el mismo mensaje en la rama maestra

Ejemplos de comandos en la rama maestra:

gru gls origin/feature/foo glf "my message"

En mi configuración bash .profile

alias gru=''git remote update -p'' alias glf=findCommitByMessage findCommitByMessage() { git log -i --grep="$1" }

Tengo un repositorio git con múltiples sucursales.

¿Cómo puedo saber qué ramas ya están fusionadas en la rama maestra?


Estoy utilizando la siguiente función de bash como: git-is-merged develop feature/new-feature

git-is-merged () { merge_destination_branch=$1 merge_source_branch=$2 merge_base=$(git merge-base $merge_destination_branch $merge_source_branch) merge_source_current_commit=$(git rev-parse $merge_source_branch) if [[ $merge_base = $merge_source_current_commit ]] then echo $merge_source_branch is merged into $merge_destination_branch return 0 else echo $merge_source_branch is not merged into $merge_destination_branch return 1 fi }


Puede usar el comando git merge-base para encontrar el último commit común entre las dos ramas. Si esa confirmación es la misma que la de su rama, entonces la rama se ha fusionado completamente.

Tenga en cuenta que git branch -d hace este tipo de cosas porque se negará a eliminar una rama que no se haya fusionado completamente.


También hay una solución de interfaz gráfica. Sólo tipo

gitk --all

Se abrirá una nueva ventana de aplicación con una representación gráfica de todo su repositorio, donde es muy fácil darse cuenta si una rama ya se fusionó o no.


Utilice git merge-base <commit> <commit> .

Este comando encuentra el mejor ancestro (s) común (es) entre dos confirmaciones. Y si el ancestro común es idéntico al último commit de una "rama", entonces podemos asumir con seguridad que esa "rama" ya se ha fusionado en el maestro.

Aqui estan los pasos

  1. Encuentra el último hash de confirmación en la rama maestra
  2. Encuentra el último hash de confirmación en una "rama"
  3. Ejecute el comando git merge-base <commit-hash-step1> <commit-hash-step2> .
  4. Si la salida del paso 3 es igual que la salida del paso 2, entonces una "rama" ya se ha fusionado en el maestro.

Más información en git merge-base https://git-scm.com/docs/git-merge-base .


git branch --merged master listas git branch --merged master fusionadas se fusionaron en la maestra

git branch --merged listas de ramas fusionadas en HEAD (es decir, punta de la rama actual)

git branch --no-merged enumera las ramas que no se han fusionado

Por defecto, esto se aplica solo a las sucursales locales. La bandera -a mostrará las ramas locales y remotas, y la bandera -r muestra solo las ramas remotas.


Sobre el tema de la limpieza de sucursales remotas.

git branch -r | xargs -t -n 1 git branch -r --contains

Esto enumera cada rama remota seguida por las sucursales remotas en las que se encuentran sus últimas SHA.

Esto es útil para discernir qué ramas remotas se han fusionado pero no se han eliminado, y cuáles no se han fusionado y, por lo tanto, están decayendo.

Si estás usando ''tig'' (es como gitk pero basado en terminal) entonces puedes

tig origin/feature/someones-decaying-feature

para ver el historial de compromiso de una sucursal sin tener que hacer checkout