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?
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
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:
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