Voici un obstacle courant que je rencontre souvent:
$ git status
# On branch master
nothing to commit (working directory clean)
$ git checkout -b foo
$ echo "hello" > world
$ git add .
$ git commit -m "init commit for foo module"
$ git checkout master
$ git merge foo
Au cours des deux prochaines semaines, plus de code sera engagé à maîtriser directement et par d'autres branches. La branche foo
restera intacte pendant cette période.
$ git checkout foo
Oh non! foo est massivement obsolète! Je comprends pourquoi , mais j'ai do besoin foo de nouveau synchronisé.
Comment obtenir le dernier contenu de la branche master ?
Si vous n'avez pas besoin de la branche:
Si vous avez fusionné foo pour revenir à master, "git branch -d foo" pour tuer la branche du sujet, puis "checkout -b foo" à l'avenir lorsque vous aurez besoin de le pirater à nouveau.
Si vous avez besoin de la branche:
Vous pouvez rebaser votre branche de sujet contre la branche principale:
git checkout foo
git rebase master
Ou:
git rebase master foo
La refondation est le processus de déplacement ou de combinaison d'une séquence de validations vers une nouvelle validation de base. Le remodelage est plus utile et facilement visualisable dans le contexte d'un flux de travail de branchement d'entités. Le processus général peut être visualisé comme suit:
L'exemple ci-dessous combine git rebase avec git merge pour conserver un historique de projet linéaire. Il s'agit d'un moyen rapide et facile de garantir que vos fusions seront transmises rapidement.
# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"
Au milieu de notre fonctionnalité, nous réalisons qu'il y a une faille 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 en maître, nous avons un historique de projet fourchu. Au lieu d'une simple fusion de git, nous allons intégrer la branche de fonctionnalité avec un rebase pour maintenir un historique linéaire:
git checkout new-feature
git rebase master
Cela déplace la nouvelle fonctionnalité vers la pointe du maître, ce qui nous permet de faire une fusion rapide standard à partir du maître:
git checkout master
git merge new-feature
Extrait de Atlassian Git Rebase Tutorial
J'utilise ce qui suit pour combiner les changements de deux branches (la mienne et la vôtre) et pour synchroniser les deux branches pour un travail continu. Cela à l'air de marcher. Quelqu'un y voit-il un problème?
git checkout mine # make sure I'm on my branch
git commit -a # commit changes
git Push Origin mine
git checkout yours # switch to your branch
git pull Origin yours # get changes you've committed & pushed
git checkout mine
git merge yours # merge your changes into mine
git Push Origin mine
git checkout yours
git rebase mine # set your branch to the merged result
git Push Origin yours # Push the merged result up to your branch on Origin
git checkout mine # get back to my branch