Comment synchroniser deux branches dans le même dépôt Git?

Voici un obstacle commun au flux de travail que je rencontre souvent:

Maître est notre branche "stable"

$ git status
# On branch master
nothing to commit (working directory clean)

Créer un module sur une branche

$ git checkout -b foo
$ echo "hello" > world
$ git add .
$ git commit -m "init commit for foo module"
$ git checkout master
$ git merge foo

Travaillez sur master ou d'autres branches

Au cours des deux prochaines semaines, plus de code sera engagé à maîtriser directement et par d'autres branches. foo la branche restera intacte pendant cette période

Reprendre le travail/faire des mises à jour sur la branche foo

$ git checkout foo

Oh non! {[3] } est massivement obsolète! Je comprends pourquoi , mais je fais besoin foo de nouveau synchronisé.

La question

Comment puis-je obtenir le dernier contenu de la master branche?

25
demandé sur maček 2010-10-25 03:13:58

2 réponses

Si vous n'avez pas besoin de la direction:

Si vous avez fusionné foo en master ," git branch - d foo "pour tuer la branche topic, puis" checkout-b foo " à l'avenir lorsque vous devez le pirater à nouveau.

Si vous avez besoin de la direction:

Vous pouvez rebaser votre branche topic contre la branche master:

git checkout foo
git rebase master

Ou:

git rebase master foo
29
répondu Adam Vandenberg 2011-06-10 03:39:23

Le rebasage est le processus de déplacement ou de combinaison d'une séquence de commits vers un nouveau commit de base. Le rebasage est très utile et facilement visualisé dans le contexte d'un flux de travail de branchement de fonctionnalités. Le processus général peut être visualisé comme suit:

Git Rebase explication visuelle

L'exemple ci-dessous combine git rebase avec git merge pour maintenir un historique de projet linéaire. C'est un moyen rapide et facile de s'assurer que vos fusions seront rapidement transmises.

# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"

Au milieu de notre caractéristique, nous réalisons qu'il y a un trou de sécurité dans notre projet

# Create a hotfix branch based off of master
git checkout -b hotfix master
# Edit files
git commit -a -m "Fix security hole"
# Merge back into master
git checkout master
git merge hotfix
git branch -d hotfix

Après avoir fusionné le correctif dans master, Nous avons un historique de projet bifurqué. Au lieu d'une fusion git simple, nous intégrerons la branche feature avec un rebase pour maintenir un historique linéaire:

git checkout new-feature
git rebase master

Cela déplace new-feature à la pointe de master, ce qui nous permet de faire une fusion rapide standard à partir de master:

git checkout master
git merge new-feature

Extrait de Atlassian git Rebase Tutorial

5
répondu Mauricio Gracia Gutierrez 2018-04-02 14:22:39