Git Reflog - Comment récupérer une branche supprimée qui n'a pas été fusionnée

Cet article sur Git Reflog est un guide complet sur la façon de restaurer les fichiers supprimés branchés dans Git à l'aide de Git Reflog.

«Avez-vous déjà perdu une branche dont le code source n’était pas encore fusionné dans la branche‘ release ’ou la branche‘ main ’? Que faire si vous souhaitez régénérer une branche supprimée alors que son travail a déjà été fusionné dans la branche principale? » . Eh bien, la seule solution à de tels scénarios est Aller Reflog .

A travers cet article sur Git Reflog, je vais vous aidercomprendre les scénarios dans lesquels votre travail sur une branche pourrait être perdu et comment récupérer la branche.En outre, cet article met en évidence l'approche que vous pouvez adopter pour éviter la perte involontaire d'une branche lors d'un travail dans un grand projet.





cast double en int en java

    1. Qu'est-ce que Git Reflog?
    2. Comment et quand une branche est supprimée?
    3. Récupérer une branche supprimée
    4. Quel travail est restauré lorsque la branche supprimée est récupérée?
    5. Sous-commandes Git Reflog

Alors, commençons avec cet article.



Prenons un scénario, un maintainer doit fusionner de nombreuses branches de fonctionnalités de différents collaborateurs, puis les supprimer éventuellement, mais la branche est supprimée accidentellement avant que le travail puisse être fusionné?

Eh bien, avant de passer à cet article, laissez-moi vous dire que ce n'est pas possible dans Git. sont sécurisés et agissent comme un poste de contrôle ne vous permettrait pas de le faire. Donc, c'est là que Git Reflog entre en scène.

Qu'est-ce que Git Reflog?

LaLa commande 'reflog' conserve un piste de chaque modification apportée aux références (branches ou balises) d'un référentiel et conserve un historique du journal des branches et des balises créées localement ou extraites. Les journaux de référence tels que l'instantané de validation du moment où la branche a été créée ou clonée, extraite, renommée ou tout commit effectué sur la branche sont conservés par et répertorié par la commande «reflog».



Remarque: La branche ne sera récupérable à partir de votre répertoire de travail que si la branche a déjà existé dans votre référentiel local, c'est-à-dire la branche a été créée localement ou extraite d'un référentiel distant dans votre référentiel local pour que Git stocke ses journaux d'historique de référence.

Cette commande doit être exécutée dans le référentiel qui avait la branche perdue. Si vous considérez lesituation de référentiel distant, vous devez alors exécuter la commande reflog sur la machine du développeur qui avait la branche.

commander: aller reflog

Maintenant que vous savez, qu'est-ce que Git Reflog, laissez-nousessayez de supprimer à la fois une branche fusionnée et une branche non fusionnée et voyez comment Git gère cela?

Étape 1: Listez les branches qui sont fusionnées dans master

Tout d'abord, vérifiez dans le ' Maître ’Branche si vous êtes sur une autre branche en utilisant la commande:

$ git checkout master

Production

Git Checkout Master - Git Reflog - Edureka

Maintenant, pour obtenir une liste des branches fusionnées, mentionnez la commande suivante:

$ git branch - fusionné

Production:

Étape 1.1: Ensuite, supprimez la branche fusionnée:

$ git branch -d issue # 902

Production:

La branche 'problème n ° 902' a été supprimée avec succès car elle est déjà fusionnée dans la branche 'principale'.

Étape 2: Maintenant, listons les branches qui ne sont pas fusionnées dans master.

$ git branch --no-merged

Production

Étape 2.2: Enfin, supprimons une branche non fusionnée avec la commande suivante:

$ git branch -d prépod

Si vous essayez de supprimer l'une des branches dont le travail n'est pas terminé, par exemple la branche «préprod», git affiche un message d'avertissement.

Production

Maintenant, avant de vous dire comment vous pouvez récupérer les données de cet article sur Git Reflog, laissez-moi vous dire ce qui se passe exactement lorsqu'une branche est supprimée et dans quelles circonstances la branche peut être récupérée.

Comment et quand une branche est supprimée?

Comme nous savons que Git est un Système de contrôle de version distribué (DVCS), chaque machine avec le clone ou une copie du référentiel agit comme les deux nœud et un centre . Cetteimplique que chaque machine aura sa propre copie de l'ensemble du code et de l'historique du référentiel.Inutile de dire que vous serez partage votre travail avec les autres et édition le même.

Par conséquent, dans de tels scénarios, il peut y avoir 3 cas où une branche est supprimée dans un scénario réel avec de nombreux contributeurs travaillant sur un grand projet. Les cas suivants pourraient être les cas:

Cas 1 - Un développeur peut fusionner ou supprimer la branche

Imaginons un scénario dans lequel un développeur fusionne localement la branche de fonctionnalité dans la branche principale, puis supprime la branche de fonctionnalité à l’aide de ‘ branche git 'Commande avec le '- ”Comme indiqué dans les captures d'écran précédentes.

Commander: «Git branch -d nom_branche»

Il peut également arriver que le développeur décide de supprimer les modifications sur la branche et décide de supprimer la branche sans la fusionner avec une autre branche à l'aide de la commande suivante:

Commander: «Git branch -D branch_name»

Avec la commande ci-dessus, le développeur estsupprimer de force la branche remplaçant l'avertissement git

$ git branch -D préprod

Production

Remarque : La branche ‘preprod’ ne sera plus répertoriée lorsque vous exécuterez la commande ‘git branch’. Alors, ynotre travail enregistré sur cette branche sera perdu.

Cas 2 - Un développeur supprime une branche dans un référentiel partagé

Prenons un scénario dans lequel un développeur avec un accès en lecture / écriture tente de supprimer la branche distante de force enen utilisant la commande ‘git push’ avec l’indicateur ‘–delete’.

$ git push origin --delete quickfix

Production

En dehors de cela, il pourrait également y avoir un cas où un utilisateur non autorisé ou malveillant force une poussée pour supprimer la branche distante.Dans ce cas, le responsable ne pourra récupérer la branche «quickfix» supprimée que si le développeuravait précédemment vérifié cette branche. Dans ce scénario, son référentiel local en aura toujours des journaux de référence.

Si le mainteneur ne peut pas récupérer la branche, alors le propriétaire de la branche qui l'a supprimée doit récupérer de ses reflogs locaux.

Cas 3 - Un script hook avec des super privilèges supprime la branche

Cela pourrait être un scénario rare mais possible dans lequel un script de hook se déclenche à un certain événement d'opération git et force la suppression des branches qui ne sont pas encore fusionnées. Vous pouvezconsidérez que l'une des commandes mentionnées ci-dessus est scriptée dans un script hook avec les privilèges sudo.

Maintenant que vous savez ce qui se passe, lorsque vous supprimez la branche, passons à cet article sur Git Reflog et voyons comment récupérer une branche perdue.

Récupérer une branche supprimée à l'aide de Git Reflog

Étape 1 : Historique de toutes les références

Obtenez une liste de tous les journaux d’historique local enregistrés pour toutes les références («master», «uat» et «prepod») de ce référentiel.

aller reflog

Étape 2 : Identifiez le cachet de l'histoire

Comme vous pouvez vous référer à l'instantané ci-dessus, le Identifiant de validation en surbrillance: e2225bb avec l'index du pointeur HEAD: 4 est celui où « revente La branche ’a été créée à partir du pointeur HEAD actuel pointant vers votre dernier travail.

Étape 3 : Récupérer

Pour récupérer le «Revente «Branche utilisez la commande‘Git checkout’ en passant la référence du pointeur HEAD avec l’identifiant d’index - 4.Il s’agit de la référence du pointeur lors de la création de la branche «preprod».

git checkout -b preprod HEAD @ {4}

Production

And voila! ‘ revente «Branche est récupérée avec tout votre code source.

REMARQUE : Laisse moi breakup la commande «git checkout» utilisée ci-dessus et vous aider à mieux comprendre:

La commande «git checkout» est une commande surchargée (comme toute fonction surchargée Java). C'est la partie où la branche réelle est récupérée.

Cette commande unique vérifie d'abord l'horodatage de l'historique antérieur indiqué par le Pointeur HEAD @ {4} puis crée une branche avec le nom ‘preprod’ en utilisant l’option «-b» et change votre répertoire de travail vers la branche nouvellement créée.

Cela implique que la branche commutée passera de «maître» à «préprod» comme indiqué dans l’écran de sortie.Vous pouvez maintenant le fusionner avec la branche 'master' ou 'release' selon votre modèle de branchement.

Maintenant que vous savez comment restaurer une branche, laissez-moi vous dire quel travail est restauré lorsqu'une branche supprimée est récupérée.

Quel travail est restauré lorsque la branche supprimée est récupérée?

Les fichiers qui ont été cachés et enregistrés dans la liste d'index de cachette seront récupérés. Tous les fichiers non suivis seront perdus. Aussi jeC'est une bonne idée de toujours mettre en scène et de valider votre travail ou de les ranger.

Pour récupérer les références de journal d'une branche ou d'une balise particulière, exécutez la commande «git reflog».

Exemple: Pour vérifier les références de journal de la branche ‘uat’ uniquement, utilisez la commande - “git reflog uat”.

quelle est la difference entre git et github

Sous-commandes Git Reflog

aller reflog

Commande pour ouvrir la page de manuel

$ git reflog - aide

Production

aller reflog montrer

Affiche les journaux de la référence fournie dans la ligne de commande.

git reflog show master @ {0}

aller reflog expirer

Cette commande est utilisée pour élaguer les anciennes entrées de reflog.

git reflog expire

aller reflog effacer

Cette commande supprime les entrées uniques de l'historique de reflog.

git reflog supprimer

aller reflog existe

Cette commande vérifie si une référence (branche ou balise) a des entrées d'historique de reflog-log.

git reflog existe

En dehors des commandes mentionnées ci-dessus, la commande «Git Reflog» prend diverses sous-commandes et différentes options en fonction des sous-commandes mentionnées ci-dessus. Pour en savoir plus, lancez ' git reflog –help ”Depuis la fenêtre du terminal.

Avec cela, nous arrivons à la fin de cet article sur Git Reflog.L'intention de DevOps est de créer des logiciels de meilleure qualité plus rapidement et avec plus de fiabilité tout en favorisant une plus grande communication et collaboration entre les équipes. Si vous êtes intrigué par cet article, c diable le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation à la certification Edureka DevOps aide les apprenants à comprendre ce qu'est DevOps et à acquérir une expertise dans divers processus et outils DevOps tels que Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack et GIT pour l'automatisation de plusieurs étapes dans SDLC.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de l'article «Git Reflog» et nous vous répondrons dans les meilleurs délais.