Si un rebase Git s'est arrêté alors que vous travailliez sur un Mac, vérifiez d'abord s'il est toujours en cours avec git status. Pour reprendre, résolvez chaque conflit, indexez uniquement les fichiers que vous avez résolus et exécutez git rebase --continue. Pour revenir à l'état de la branche antérieur au rebase, exécutez git rebase --abort. Ces options n'ont pas les mêmes effets ; confirmez donc le résultat souhaité avant d'entrer une commande.
1. Rouvrir le dépôt et vérifier son état
Ouvrez Terminal depuis Spotlight ou depuis le dossier Applications > Utilitaires du Finder. Dans Terminal, accédez au répertoire racine du dépôt, puis inspectez son état :
cd '/path/to/your/repository'
git status
Remplacez le chemin d'exemple par le chemin de votre dépôt. Si vous saisissez un chemin contenant des espaces ou des métacaractères du shell, placez-le entre guillemets simples, comme indiqué. Le shell par défaut de Terminal est zsh, bien qu'un administrateur ou vos paramètres puissent spécifier un autre shell. Guide d'utilisation de Terminal d'Apple
Si Git signale qu'un rebase est en cours, lisez la sortie du statut pour connaître les chemins en conflit et l'étape actuelle. S'il n'indique pas de rebase actif, n'exécutez pas --continue ou --abort à l'aveugle ; examinez le statut et l'historique récent avant de déduire ce qui s'est passé. git status indique les modifications de l'arbre de travail et de l'index, y compris les fichiers non suivis. Lisez donc l'intégralité de sa sortie plutôt que de supposer que chaque fichier fait partie du rebase. Documentation de git status par Git
2. Reprendre en résolvant soigneusement les conflits
Ouvrez chaque fichier en conflit dans votre éditeur. Git signale les conflits textuels à l'aide de marqueurs tels que <<<<<<<, ======= et >>>>>>>. Déterminez ce que doit être le contenu final, modifiez le fichier et supprimez les marqueurs de conflit. N'acceptez pas un côté automatiquement, à moins que cela ne corresponde au code ou au texte souhaité. Le guide de rebase de Git décrit la séquence de résolution de conflits : modifier les fichiers, indexer les résolutions, puis continuer. Documentation de git rebase par Git
Retournez dans Terminal et inspectez les modifications concernées avant de les indexer. Par exemple :
git diff
Indexez chaque chemin résolu par son nom, en utilisant le chemin réel affiché par git status :
git add 'path/to/resolved-file'
git status
git rebase --continue
Les guillemets protègent les chemins comportant des espaces ou des métacaractères du shell ; omettez-les si le chemin ne nécessite pas de guillemets. git add indexe le contenu actuel du fichier désigné ; inspectez donc le diff au préalable s'il contient des modifications sans rapport. Vérifiez à nouveau l'état pour confirmer que la bonne résolution est indexée. Git peut s'arrêter à nouveau sur un autre conflit ou vous demander de modifier un message de commit ; suivez l'invite, puis répétez les étapes de résolution, d'indexation et de continuation. Documentation de git add par Git
N'utilisez git rebase --skip que lorsque vous souhaitez délibérément omettre le commit en cours de rejeu. Cette commande passe au commit suivant ; il ne s'agit pas d'un autre moyen de reprendre le même commit. Si vous n'êtes pas certain que l'omission supprimera du travail nécessaire, ne l'utilisez pas. Options de git rebase par Git
3. Annuler lorsque vous souhaitez annuler le rebase
Si vous souhaitez interrompre l'opération et revenir à l'état initial de la branche, exécutez :
git rebase --abort
git status
La documentation de Git précise que --abort réinitialise HEAD sur la position d'origine de la branche (ou sur la branche fournie, si une branche a été spécifiée au début du rebase). Vérifiez ensuite le statut et confirmez que le résultat correspond à vos attentes. Documentation de git rebase par Git
Évitez de confondre --abort avec --quit. git rebase --quit met fin à l'opération de rebase tout en laissant HEAD, l'index et l'arbre de travail tels qu'ils sont à cet instant précis. Ne le choisissez que si vous souhaitez spécifiquement interrompre le rebase tout en conservant l'état en cours ; cela ne restaure pas la position de la branche antérieure au rebase. Si le rebase a utilisé --autostash, Git conserve ce remisage (stash) temporaire lors de l'arrêt. Options de git rebase par Git
4. Si Terminal s'est fermé ou que l'état n'est pas clair
Fermer une fenêtre de Terminal n'indique pas, en soi, si Git a terminé le rebase. Rouvrez le dépôt et exécutez git status ; poursuivez à partir de l'état indiqué. Ne réexécutez pas la commande git rebase d'origine tant qu'un rebase existant est actif.
Si une interruption a laissé le dépôt dans un état où Git ne reconnaît plus de rebase actif, évitez de supprimer manuellement les fichiers d'état dans .git ou d'utiliser reset --hard à l'aveugle. La documentation de Git indique qu'une interruption au mauvais moment avec le backend apply peut laisser un rebase qu'un --abort ultérieur ne peut pas annuler proprement. Préservez d'abord tout travail non commité de valeur, puis inspectez git status et git reflog pour comprendre les mouvements récents de la branche. Le reflog enregistre les mises à jour locales récentes des sommets de branche ; il peut aider à identifier un commit précédent, mais sa restauration doit être délibérée. Remarques de Git sur l'interruptibilité du rebase, Documentation de git reflog par Git
Dans le cas classique d'un conflit interrompu, la décision sûre est simple : résolvez et indexez les modifications voulues avant de faire --continue, ou utilisez --abort lorsque vous souhaitez abandonner le rebase et revenir à son point de départ. Vérifiez à nouveau git status après l'une ou l'autre de ces actions afin de connaître l'état réel de la copie de travail sur votre Mac.
Sources
Ouvrir ou quitter Terminal sur Mac — Assistance Apple