C'est ce qui s'est passé:
J'ai une branche A. Sur la branche AI a commis un tas de changements. Je n'étais pas satisfait du code, j'ai donc vérifié le commit précédent dans la branche A. J'ai ensuite apporté un tas de modifications supplémentaires et les ai validées sur la branche A. Maintenant, je ne trouve ce commit nulle part. Ai-je perdu ce code?
git reset
plutôt quegit checkout
?HEAD
et la branche A serait restée sur le commit précédent. Quelles commandes avez-vous exécutées exactement?Réponses:
L'ancien commit est toujours dans le reflog.
Cela affichera une liste de commits, et le commit «perdu» devrait être là. Vous pouvez en faire une nouvelle succursale. Par exemple, si le SHA-1 est ba5a739, vous pouvez créer une nouvelle branche nommée "new-branch" à l'ancien commit avec:
Notez que les commits «perdus» seront supprimés lorsque la base de données sera élaguée.
la source
git cherry-pick [SHA]
pour déplacer le commit sur une branche existante au cas où vous vous seriez accidentellement commis alors que vous étiez dans l'état principal détachéprune
supprimerait également les commits détachés qui sont référencés dans les messages de validation? Ou cela les rend joignables ?Vos commits sont toujours disponibles dans le reflog, comme indiqué précédemment. En plus des autres réponses, voici un moyen de reprendre directement les commits HEAD détachés dans votre branche actuelle , sans créer ni fusionner une nouvelle branche:
Recherchez les hachages SHA-1 des commits que vous avez effectués dans l'état HEAD détaché avec
Ensuite, exécutez, avec tous les hachages de validation classés du plus ancien au plus récent:
Par exemple si j'en avais un seul, donné dans le format de hachage court "7 premiers caractères":
Cela créera de nouveaux commits dans votre branche actuelle, un commit par hachage détaché-HEAD-commit que vous mentionnez dans la commande. Il reprend également les messages de validation d'origine.
la source
Vous pouvez trouver des commits perdus (pendants) avec la commande suivante:
Notez que si votre tête actuelle est en cours de validation, elle n'est pas répertoriée comme perdue.
Vous pouvez trouver plus d'informations sur la page de manuel git-fsck (1)
Ensuite, vous pouvez créer une branche sur ce commit perdu:
la source
Le langage Git pour l'état de votre répertoire de travail est un « HEAD détaché ». Voici un autre endroit qui
git reflog
fait la sauvegarde.Si j'essaye de récupérer une autre branche, git-1.7.5.1 donne une suggestion utile.
la source
Vous ne l'avez pas perdu, Git en garde toujours une copie (mais il est actuellement inaccessible par n'importe quel chef de branche). Vous pouvez trouver votre commit manquant en utilisant la
git reflog
commande. Le reflog garde la trace des positions historiques d'une tête de branche et vous pouvez l'utiliser pour rechercher les éléments sur lesquels la tête de branche pointait précédemment.la source
Suivez ces étapes pour relier votre tête détachée à git repo
git checkout "your branch with path but without remote name"
Par exemple, si le nom distant est l'origine et le nom de la branche est
bugfix/somebranch
alors utilisezgit checkout bugfix/somebranch
git reflog
récupérez les SHA de commit répertoriés dans votre liste de commit de la branche détachée.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
TOUT ENSEMBLE !!
la source
Dans Sourcetree, j'ai trouvé que git reflog ne fonctionnait pas, alors j'ai compris comment faire cela en utilisant l'interface graphique.
Tout d'abord, essayez de trouver le commit "perdu" en recherchant un message dans l'historique des commandes (vue: Afficher la sortie de la commande). J'espère que ce sera dans la commande "Switching Branch" après le commit que vous avez perdu et vous verrez le commentaire de commit avec un ID de commit 1234567.
Passez cet ID de validation à l'étape suivante.
Appuyez sur le bouton "Branche" dans la barre d'outils supérieure et vous devriez obtenir une boîte de dialogue "Nouvelle Branche" où vous pouvez spécifier un certain commit. Mettez cet ID de validation, spécifiez un nouveau nom de branche, appuyez sur Créer une branche et vous devriez obtenir une nouvelle branche avec votre validation perdue!
Cela m'a rapporté du travail perdu!
la source