Pregunta Git: avanza de forma automática todas las ramas de seguimiento al tirar


He configurado ramas de seguimiento con el --track opción, y cuando hago un git pull en master, busca todas las ramas para origin/branchname pero no se fusiona con las sucursales locales de seguimiento. Esto es más molesto, porque si luego hago un git push en master, dice que las actualizaciones no rápidas fueron rechazadas en las ramas de seguimiento, ya que no se reenviaron rápidamente en la inicial git pull.

Mi pregunta es: ¿Cómo lo hago para que git pull ¿Buscar todas las ramas y adelantar automáticamente todas las ramas de seguimiento?

Nota: git pull Usé para avanzar rápidamente todas mis ramas de seguimiento con mis repositorios GitHub, pero ahora que he configurado mis propios repositorios usando Gitolite, este problema está surgiendo.


32
2018-01-02 09:40


origen


Respuestas:


Pero espera:

Nota: Supongo que has rastreado todas tus sucursales remotas como en "Rastree todas las ramas remotas de git como sucursales locales."


Nota: Git 2.0 (Q2 2014) presentará con cometer b814da8 un config push.ff:

pull.ff::

De forma predeterminada, Git no crea una confirmación de fusión adicional cuando se fusiona una confirmación que es un descendiente de la confirmación actual. En cambio, la punta de la rama actual se reenvía rápidamente.

  • Cuando se establece en false, esta variable le dice a Git que cree un compromiso de fusión adicional en tal caso (equivalente a dar el --no-ff opción desde la línea de comando).
  • Cuando se establece en only, solo se permiten las fusiones de avance rápido (equivalentes a --ff-only opción desde la línea de comando).

5
2018-01-02 10:08



Script de Shell que avanza rápidamente en todas las ramas que tienen su rama ascendente establecida en el origen / sucursal coincidente sin hacer ningún checkout

  • no cambia su rama actual en ningún momento, no hay necesidad de lidiar con los cambios de copia de trabajo y el tiempo perdido mirando hacia fuera

  • solo avanza rápidamente, las ramas que no se pueden reenviar rápidamente mostrarán un mensaje de error y se omitirán

Asegúrate de que todas las ramas ascendentes de tus ramas estén configuradas correctamente al ejecutar git branch -vv. Establecer la rama ascendente con git branch -u origin/yourbanchname

Copie y pegue en un archivo y chmod 755:

#!/bin/sh

curbranch=$(git rev-parse --abbrev-ref HEAD)

for branch in $(git for-each-ref refs/heads --format="%(refname:short)"); do
        upbranch=$(git config --get branch.$branch.merge | sed 's:refs/heads/::');
        if [ "$branch" = "$upbranch" ]; then
                if [ "$branch" = "$curbranch" ]; then
                        echo Fast forwarding current branch $curbranch
                        git merge --ff-only origin/$upbranch
                else
                        echo Fast forwarding $branch with origin/$upbranch
                        git fetch . origin/$upbranch:$branch
                fi
        fi
done;

9
2018-06-27 11:59



Si realmente desea avanzar rápidamente todas las sucursales locales que están rastreando sucursales remotas, es posible que desee considerar agregar esto como un alias a su ~/.gitconfig:

[alias]
    pull-all = !"for b in $(git for-each-ref refs/heads --format='%(refname)') ; do git checkout ${b#refs/heads/} ; git pull --ff-only ; done"

Entonces puedes correr git pull-all, recorrerá sus sucursales locales y ejecutará un git pull --ff-only en cada.


3
2017-09-15 21:57



SmartGit, por ejemplo, tiene una opción para fusionar automáticamente los cambios desde la rama rastreada si cambia a una rama. Esto debería hacer lo que quieras lograr.


0
2018-01-02 12:20