- git rebase
- avant de rebaser
- rebase régulière
- rebase Interactive
- Force-push
- conflits de fusion
Ce guide vous aide à démarrer avec rebasage, poussée de force, et les conflits de fixingmerge localement.
avant de plonger dans ce document, assurez-vous que vous êtes familier avec usingGit via la ligne de commande.
git rebase
le rebasage est une opération très courante dans inGit., Il existe les options de rebase suivantes:
- rebase régulière.
- rebase Interactif.
avant de rebaser
git rebase
réécrit l’historique des commits. Il peut être nocif de le faire dansbranches partagées. Cela peut entraîner des conflits de fusion complexes et difficiles à résoudre. Dans ces cas, au lieu de rebaser votre branche par rapport à la branche par défaut,envisagez de la tirer à la place (git pull origin master
). Il a un effet similaire sans compromettre le travail de vos contributeurs., Il est plus sûr de sauvegarder votre branche avant de rebaser pour vous assurer de ne pas perdre de modifications. Par exemple, considérons une fonction branchcalled my-feature-branch
:
-
Ouvrez votre branche dans le terminal:
git checkout my-feature-branch
-
commander une nouvelle branche à partir de ça:
git checkout -b my-feature-branch-backup
-
revenir en arrière à l’original de votre branche:
git checkout my-feature-branch
Maintenant, vous pouvez en toute sécurité rebase il., Si quelque chose ne va pas, vous pouvez récupérer vos modifications en réinitialisant my-feature-branch
contre my-feature-branch-backup
:
notez que si vous avez ajouté des modifications à my-feature-branch
après avoir créé la branche de sauvegarde,vous les perdez lors de la réinitialisation.
rebase régulière
avec un rebase régulière, vous pouvez mettre à jour votre branche de fonctionnalité avec la branche defaultbranch (ou toute autre branche).C’est une étape importante pour les stratégies de développement basées sur Git., Vous pouvez vous assurer que les modifications que vous ajoutez à la base de code ne cassent pas les modifications existantes ajoutées à la branche cible après avoir créé votre featurebranch.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
lorsque vous rebase:
- Git importe tous les commits soumis à
master
après le moment où vous avez créé votre branche de fonctionnalité jusqu’au moment présent. - Git met les commits que vous avez dans votre branche sur le dessus de réduirel’s’engage importés à partir de
master
:
Vous pouvez remplacer master
avec toute autre branche que vous souhaitez rebase contre, parexemple, release-10-3
., Vous pouvez également remplacer origin
par d’autres dépôts distants, par exemple upstream
. Pour vérifier quelles télécommandes vous avez liées à votre localrepository, vous pouvez exécuter git remote -v
.
S’il y a des conflits de fusion, Git vous invite à les corriger avant de continuer le rebase.
pour en savoir plus, consultez la documentation de Git sur les stratégies de rebasage et de rebasage.
rebase Interactif
Vous pouvez utiliser rebase interactif à modifier s’engage. Par exemple, modifiez un commitmessage, écrasez (joignez plusieurs commits en un seul), modifiez ou supprimez les commits., Utilisez un rebase pour modifier les messages de validation passés et organiser l’historique de validation de votre branche pour le garder propre.
lorsque vous souhaitez modifier quelque chose dans les commits récents, utilisez interactiverebase en passant l’indicateur--interactive
(ou-i
) à la commande rebase.,
Par exemple, si vous souhaitez modifier les trois derniers commits dans votre branche(HEAD~3
), exécutez la commande:
git rebase -i HEAD~3
Git ouvre les trois dernières s’engage dans votre terminal éditeur de texte et describesall le rebase interactif options que vous pouvez utiliser. L’option par défaut est pick
,qui maintient la validation inchangé. Remplacez le mot clé pick
selon l’opération que vous souhaitez effectuer dans chaque commit. Pour ce faire, vous devez éditerles commits dans l’éditeur de texte de votre terminal.,
par exemple, si vous utilisez Vim comme éditeur de texte dans le shellZSH
de macOS, et que vous souhaitez écraser les trois commits(les joindre en un seul):
- appuyez sur ion votre clavier pour passer en mode d’édition de Vim.
- naviguez avec les flèches de votre clavier pour modifier le deuxième mot clé de commitde
pick
àsquash
(ous
). Faites de même pour le troisième s’engager.Le premier commit doit rester inchangé (pick
) car nous voulons écraser les deuxième et troisième dans le premier., - Appuyez sur echap pour quitter le mode d’édition.
- Tapez
:wq
pour” écrire « (enregistrer) et”quitter ». - git affiche le message de validation afin que vous puissiez le modifier:
- toutes les lignes commençant par
#
sont ignorées et ne sont pas incluses dans le commitmessage. Tout est inclus. - pour le laisser tel quel, tapez
:wq
. Pour modifier le message de validation: passez en mode édition, modifiez le message de validation et enregistrez-le comme vous venez de le faire.,
- toutes les lignes commençant par
- Si vous n’avez pas poussé vos commits vers la branche distante avant de rebaser,poussez vos modifications normalement. Si vous aviez déjà poussé ces commits, forcez-push à la place.
notez que les étapes d’édition via la ligne de commande peuvent être légèrement différentes en fonction de votre système d’exploitation et du shell que vous utilisez.
Voir de nombreuses possibilités d’annulation dans Gitpour un examen plus approfondi du rebase interactif.,
force-push
lorsque vous effectuez des opérations plus complexes, par exemple, squash commits, reset orrebase votre branche, vous devez forcer une mise à jour vers la branche distante.Ces opérations impliquent la réécriture de l’historique des commits branch.To forcer une mise à jour, passer l’indicateur --force
ou -f
à la commande push
. Par exemple:
git push --force origin my-feature-branch
Forcer la mise à jour n’est pas recommandée lorsque vous travaillez sur sharedbranches.
Sinon, vous pouvez passer le drapeau --force-with-lease
à la place., C’est plus sûr, car il n’écrase aucun travail sur la remotebranch si d’autres commits ont été ajoutés à la branche distante par quelqu’un d’autre:
git push --force-with-lease origin my-feature-branch
Si la branche que vous souhaitez forcer-push est protégée,vous ne pouvez pas forcer-push à moins que vous Ensuite, vous pouvezforcer-pousser et le protéger à nouveau.,
conflits de fusion
comme Git est basé sur la comparaison des versions d’un fichier ligne par ligne, chaque fois qu’une ligne modifiée dans votre branche coïncide avec la même ligne modifiée dans la branche cible (après le moment où vous avez créé votre branche de fonctionnalité à partir de celle-ci), Gitidentifie ces changements Pour le réparer, vous devez choisir quelle version de cette ligne vous voulez garder.
la plupart des conflits peuvent être résolus via L’interface utilisateur GitLab.
Pour les cas plus complexes, il existe différentes méthodes pour les résoudre. Il existe également des applications git GUI qui peuvent aider en visualisant les différences.,
Pour résoudre les conflits au niveau local, vous pouvez utiliser la méthode suivante:
-
Ouvrez le terminal et la caisse de votre branche, par exemple, la balise
my-feature-branch
:git checkout my-feature-branch
-
git Rebase sur votre branche à l’encontre de la branche cible donc Gitprompts vous avec les conflits:
git rebase origin/master
- Ouvrez le fichier en conflit dans un éditeur de code de votre choix.
- Chercher le conflit bloc:
- Il commence avec le marqueur:
<<<<<<< HEAD
., - ci-dessous, il y a le contenu avec vos modifications.
- Le marqueur:
=======
indique la fin de vos modifications. - ci-dessous, vous trouverez le contenu des dernières modifications de la branche cible.
- Le marqueur
>>>>>>>
indique la fin du conflit.
- Il commence avec le marqueur:
- modifier le fichier: choisissez la version (avant ou après
=======
) que vous souhaitez conserver, puis supprimez la partie du contenu que vous ne voulez pas dans le fichier. - Supprimer les marqueurs.
- Enregistrez le fichier.,
- répétez le processus s’il y a d’autres fichiers en conflit.
-
Scène vos modifications:
git add .
-
Valider vos modifications:
git commit -m "Fix merge conflicts"
-
Continuer la relocalisation:
git rebase --continue
cautionUp à ce point, vous pouvez exécutergit rebase --abort
pour arrêter le processus.Git abandonne le rebase et ramène la branche à l’état que vous aviez beforerunninggit rebase
.,Après avoir exécutégit rebase --continue
, le rebase ne peut pas être abandonné. - forcer-pousser vers votre branche distante.
Leave a Reply