La différence entre Git rebase, merge et stash

planque

Cela signifie enregistrer temporairement les fichiers que vous avez modifiés dans la zone locale et restaurer votre branche à un état non modifié. Vous pouvez stocker indéfiniment. L'ordre de stockage est inversé et la dernière soumission est triée en haut. Utilisez la liste pour afficher la liste stockée.

commandes liées au stash

Enregistrer les modifications actuelles:

git stash save "message" 

ou

git stash "message"

Afficher la liste de stockage:

git stash list

Restaurez les modifications enregistrées:

git stash apply

Restaurez la modification de stockage spécifiée:

git stash apply stash@{
    
    l}   #l 是指当前存储列表中的顺序 0,1,2,3...

Effacez la liste de stockage:

git stash clear

Supprimez la modification de stockage spécifiée:

git stash drop stash@{
    
    l}  #  l 是指当前存储列表中的顺序 0,1,2,3...

L'opération de base du rebase

La tâche de développement a divergé en deux branches différentes, et chacune a soumis une mise à jour.
Insérez la description de l'image iciLe moyen le plus simple d'intégrer des branches est la commande de fusion. Il fusionnera les derniers instantanés des deux branches (C3 et C4) et l'ancêtre commun le plus proche (C2) des deux branches dans une fusion à trois. Le résultat de la fusion est de générer un nouvel instantané (et de le soumettre).
Insérez la description de l'image iciEn fait, il existe un autre moyen: vous pouvez extraire les patchs et modifications introduits dans C4, puis les appliquer une fois sur la base de C3. Dans Git, cette opération est appelée rebasage. Vous pouvez utiliser la commande rebase pour déplacer toutes les modifications soumises à une branche vers une autre branche, tout comme "rejouer".

Insérez la description de l'image iciSon principe est de trouver d'abord l'ancêtre commun C2 le plus proche de ces deux branches (c'est-à-dire, l'expérience de branche actuelle, le maître de branche de base cible de l'opération de rebase), puis de comparer les commits précédents de la branche actuelle par rapport à l'ancêtre. , extrayez les modifications correspondantes et enregistrez-les en tant que fichier temporaire, puis pointez la branche courante vers la base cible C3, et enfin appliquez les modifications précédemment enregistrées dans un fichier temporaire dans l'ordre. (Annotation: l'ID de validation est indiqué pour une compréhension facile, la même chose ci-dessous)

À ce stade, l'instantané pointé par C4 'est exactement le même que l'instantané pointé par C5 dans l'exemple utilisant la commande de fusion ci-dessus. Il n'y a aucune différence dans le résultat final de ces deux méthodes d'intégration, mais le rebasage rend l'historique de soumission plus propre. Quand vous regardez l'historique d'une branche qui a subi un rebase, vous constaterez que bien que le travail de développement réel soit parallèle, ils ressemblent à des séries, et l'historique des commit est une ligne droite sans fourches.

rebaser et fusionner

Que ce soit par rebase ou fusion, le résultat final de l'intégration pointera toujours vers le même instantané, mais l'historique des validations est différent.

rebase是将一系列提交按照原有次序依次应用到另一分支上
merge是把最终结果合在一起。

Commandes liées au rebase

Contenu de la branche fusionnée:

git rebase [branch]

Continuez à fusionner après avoir résolu le conflit:

Pendant le processus de rebase, il peut y avoir des conflits. Dans ce cas, Git arrêtera le rebase et vous permettra de résoudre les conflits; une fois les conflits résolus, utilisez la commande "git-add" pour mettre à jour l'index de ces contenus (index) , alors, vous n'avez pas besoin d'exécuter git-commit, exécutez simplement:

git rebase --continue

Terminer la fusion (restaurer à l'état d'origine): à tout moment, vous pouvez utiliser le paramètre -abort pour terminer l'opération de rebase

git rebase --abort

La différence entre stash et rebase

Premièrement, le principe est différent

L'opération de stash enregistre uniquement le contenu modifié, puis doit effectuer une opération de fusion pour fusionner le dernier commit du maître dans la branche de branche, puis exécuter stash apply pour restaurer le contenu modifié temporairement stocké, de sorte que commit4 pointe vers le dernier Le contenu a été révisé.
L'opération de rebase signifie que le contenu modifié a été soumis à la branche locale dans la branche de branche. À ce stade, l'opération de rebase placera d'abord le contenu modifié dans le correctif, puis le restaurera à l'état non modifié, puis fusionnera le dernier. modification du maître sur Dans la branche, puis restaurez le contenu dans le patch, et pointez également commit4 vers la dernière modification de contenu.

Deuxièmement, le moment est différent

L'opération de cache, le contenu modifié, n'a pas été soumis à la branche locale, ni soumis à l'
opération de rebase de la branche distante, le contenu modifié, a été soumis à la branche locale, pas soumis à la branche distante

Troisièmement, les étapes sont différentes

Opération de
stockage, besoin d'effectuer une opération de stockage + fusion + appliquer un rebase, besoin d'effectuer une validation + un rebase

Référence: https://www.jianshu.com/p/3dc4677a3b08

Je suppose que tu aimes

Origine blog.csdn.net/p715306030/article/details/113407259
conseillé
Classement