2 votes

Comment récupérer un commit perdu ?

J'ai fait un commit avec le message "Recycler View dans l'activité principale". La tête était dessus. Je suis passé à une nouvelle branche sans voir l'avertissement. Je ne peux maintenant pas voir mon commit avec le message "Recycler View dans l'activité principale". Comment puis-je récupérer un commit qui n'est associé à aucune branche ? S'il vous plaît aidez-moi, je suis très nouveau sur GitHub.

Mon Terminal est le suivant :

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git add .

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git commit -m "Recycler View dans l'activité principale"
[detached HEAD 35b478b] Recycler View dans l'activité principale
 5 files changed, 96 insertions(+), 51 suppressions(-)
 réécrire app/src/main/java/com/example/worldclocktest/CitySelectedListAdapter.java (60%)

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git log
commit 35b478bf8761480eeed417d3fa8ae3bab44cfa36 (HEAD)
Author: Hizafa-Nadeem 
Date:   jeu. 6 mai 04:44:13 2021 +0500

    Recycler View dans l'activité principale

commit 6dfc1a1db723e268d967ebcf34a8dac45f41514b (Recycler-View)
Author: Hizafa-Nadeem 
Date:   jeu. 6 mai 02:40:11 2021 +0500

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git push -u origin Recycler_View
erreur: src refspec Recycler_View ne correspond à rien
erreur: impossible de pousser certaines références vers 'https://github.com/Hizafa-Nadeem/WorldClock-App-/'

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git push -u origin Recycler-View
Énumération des objets: 115, fait.
Comptage des objets: 100% (115/115), fait.
Compression des objets: 100% (89/89), fait.
Écriture des objets: 100% (115/115), 139.26 KiB | 1.00 MiB/s, fait.
Total 115 (delta 19), réutilisé 0 (delta 0), réutilisation des paquets 0
remote: Résolution des deltas: 100% (19/19), fait.
remote:
remote: Créez une pull request pour 'Recycler-View' sur GitHub en visitant :
remote:      https://github.com/Hizafa-Nadeem/WorldClock-App-/pull/new/Recycler-View
remote:
Vers https://github.com/Hizafa-Nadeem/WorldClock-App-
 * [new branch]      Recycler-View -> Recycler-View
La branche 'Recycler-View' est configurée pour suivre la branche à distance 'Recycler-View' depuis 'origin'.

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git checkout cities_declared_in_activity_main
erreur: 'cities_declared_in_activity_main' n'a pas correspondu à un fichier connu de git

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git checkout cities_declared_in_activitymain
erreur: 'cities_declared_in_activitymain' n'a pas correspondu à un fichier connu de git

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git log
commit 35b478bf8761480eeed417d3fa8ae3bab44cfa36 (HEAD)
Author: Hizafa-Nadeem 
Date:   jeu. 6 mai 04:44:13 2021 +0500

    Recycler View dans l'activité principale

commit 6dfc1a1db723e268d967ebcf34a8dac45f41514b (origin/Recycler-View, Recycler-View)
Author: Hizafa-Nadeem 
Date:   jeu. 6 mai 02:40:11 2021 +0500

    premier commit sur Recycler View

commit 269b5fee830e7a26a1fabd008f60ff6b236cb111 (cities_declared_in_main_activty)

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git checkout cities_declared_in_main_activty
Attention : vous laissez un commit derrière, non connecté à l'une de vos branches :

  35b478b Recycler View dans l'activité principale

Si vous voulez le conserver en créant une nouvelle branche, c'est peut-être le bon moment
de le faire avec :

 git branch  35b478b

Basculé sur la branche 'cities_declared_in_main_activty'

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git status
Sur la branche cities_declared_in_main_activty
rien à valider, l'arborescence de travail est propre

C:\Users\Dell\AndroidStudioProjects\WorldClockTest>git push -u origin cities_declared_in_main_activty

3voto

matt Points 60113

Chose à garder à l'esprit : En Git, une branche est juste un nom pour un commit. Cela a quelques autres implications pour son comportement, mais c'est tout ce que c'est. Les noms de branches sont cruciaux en Git pour plusieurs raisons ; l'une d'elles est qu'ils maintiennent les commits en vie. Si un commit a un nom de branche, ou est le parent d'un tel commit, ou le parent de ce commit..., le commit reste vivant. Sinon, il peut mourir. Heureusement pour vous, il ne meurt pas rapidement.

Alors voici un rapide résumé de ce que vous avez fait et de ce que cela signifie !

% git add .
% git commit -m "Recycler View dans Main Activity"
[tête détachée 35b478b]

Le mode tête détachée signifie qu'il n'y a aucun nom de branche où vous vous trouvez : vous n'êtes pas "sur une branche". Avant même que l'histoire ne commence, vous vous êtes somehow retrouvé en mode tête détachée et avez fait un commit. Ce n'est pas illégal mais c'est extrêmement imprudent. Je n'ai aucune idée de comment ou pourquoi vous vous êtes fait cela.

% git log
commit 35b478bf8761480eeed417d3fa8ae3bab44cfa36 (HEAD)
commit 6dfc1a1db723e268d967ebcf34a8dac45f41514b (Recycler-View)

Il semble donc que vous avez au moins deux commits sur cette chaîne parentale : celui détaché que vous venez de créer, et le commit de la branche Recycler-View qui le précède.

% git push -u origin Recycler_View
erreur:

Vous avez mal orthographié le nom de la branche. Il était juste devant vous ! La prochaine fois, essayez de copier-coller le nom de la branche. Encore mieux, passez à un shell qui vous donne une autocomplétion de noms de branche.

% git push -u origin Recycler-View

Vous avez bien orthographié le nom de la branche, et poussé. Mais ce que vous avez poussé est 6dfc1a1. Vous n'avez pas poussé le nouveau commit 35b478b, qui est toujours détaché.

% git checkout cities_declared_in_activity_main
erreur:

Aucune telle branche.

% git checkout cities_declared_in_activitymain

Toujours pas de telle branche. Pourquoi ne demandez vous pas même quels sont les noms de branche ? Cette commande est (attendez-vous) git branch !

% git log

Un moyen assez idiot de découvrir le véritable nom de la branche, mais cela a fonctionné.

% git checkout cities_declared_in_main_activty
Attention : vous laissez 1 commit derrière, non connecté à
aucune de vos branches :

Git vous avertit aussi fort que possible que vous êtes sur le point de perdre tout accès nominatif au commit 35b478. Il est détaché !

D'accord, mais vous l'avez fait. Est-ce un problème ? Non ! Pas immédiatement. N'oubliez pas, les commits ne meurent pas rapidement. Le commit est toujours là. Remettez-vous simplement à niveau et dites ensuite

% git checkout 35b478

Et voilà, votre commit perdu est de retour ! Cette fois, faites quelque chose de raisonnable avec. Un commit détaché peut éventuellement être supprimé, donc si vous ne voulez pas que cela se produise, sauvez ce commit ! La première étape la plus simple est, après avoir vérifié le commit, de lui donner un nom de branche :

% git branch rescue

Maintenant, vous pouvez décider que faire avec le commit que vous avez sauvé. Je ne connais pas vos intentions donc je ne peux pas vous conseiller à ce sujet.

2voto

Mad Physicist Points 3218

Votre ligne de commande montre que vous pouvez créer une branche pour le commit avec

git branch  35b478b

Ici, 35b478b est l'ID du commit. Cela signifie que vous pouvez également basculer vers la nouvelle branche au fur et à mesure que vous la créez en utilisant

git checkout 35b478b -b 

Une vérification sans tête sans branches serait

git checkout 35b478b

Vous pouvez voir le commit avec

git reflog

Cela répertorie les commits que vous avez visités, pas seulement ceux de votre historique immédiat.

Vous pourriez également être en mesure de l'obtenir avec

git checkout origin/Recycler-View

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X