Existe-t-il une possibilité de restaurer un fichier validé dans Git? J'ai poussé un commit sur GitHub, puis j'ai réalisé qu'il y avait un fichier que je ne voulais pas pousser (je n'ai pas terminé les modifications).
vérifier l'état précédent (inchangé) de votre fichier; remarquez le double tiret
git checkout HEAD^ -- /path/to/file
le commettre:
git commit -am "revert changes on this file, not finished with it yet"
poussez-le, aucune force nécessaire:
git push
revenez à votre travail inachevé, recommencez (flèche vers le haut 3 fois):
git checkout HEAD^ -- /path/to/file
effectivement `` sans engagement '':
Pour modifier le dernier commit du référentiel HEAD, obscurcir votre travail poussé accidentellement, tout en pouvant potentiellement entrer en conflit avec votre collègue qui l'a peut-être déjà tiré, et qui poussera les cheveux gris et perdra beaucoup de temps à essayer de réconcilier son chef de branche locale avec le central:
Pour supprimer le changement de fichier du dernier commit:
pour rétablir le fichier à l'état avant le dernier commit, faites:
git checkout HEAD^ /path/to/file
pour mettre à jour le dernier commit avec le fichier rétabli, faites:
git commit --amend
pour pousser le commit mis à jour vers le référentiel, faites:
git push -f
Vraiment, pensez à utiliser la méthode préférée mentionnée précédemment.
À moins que vous ne soyez le seul développeur d'un projet, vous ne devriez vraiment pas utiliser git push -f. Cela crée beaucoup plus de problèmes que cela ne vaut la peine. Supprimez simplement le fichier puis effectuez un nouveau commit.
richardm
1
@ user553086 ne pouvait pas être plus d'accord. Mieux maintenant?
xor
Est-ce faisable avec des commits plus anciens dans l'histoire? Par exemple, pourrais-je faire cela avec git checkout HEAD~2 /path/to/file? Edit: On dirait que ce que je voulais dans mon cas était simplementgit rm /path/to/file
starscream_disco_party
1
Tu viens de me sauver 4 heures mon frère!
Tosin Onikute
52
Si vous souhaitez supprimer le fichier du référentiel distant, supprimez-le d'abord de votre projet avec l'option --cache, puis poussez-le:
(Cela fonctionne même si le fichier a été ajouté au dépôt distant il y a quelques validations) N'oubliez pas d'ajouter à .gitignore les extensions de fichier que vous ne voulez pas pousser.
Réinitialisez le fichier dans un état correct, validez et appuyez à nouveau.
Si vous êtes sûr que personne d'autre n'a encore récupéré vos modifications, vous pouvez utiliser --amendlors de la validation, pour modifier votre précédent commit (c'est-à-dire réécrire l'historique), puis pousser. Je pense que vous devrez utiliser l' -foption lors de la poussée, pour forcer la poussée, cependant.
Réponses:
mise à jour: méthode plus sûre ajoutée
méthode préférée:
vérifier l'état précédent (inchangé) de votre fichier; remarquez le double tiret
le commettre:
poussez-le, aucune force nécessaire:
revenez à votre travail inachevé, recommencez (flèche vers le haut 3 fois):
effectivement `` sans engagement '':
Pour modifier le dernier commit du référentiel HEAD, obscurcir votre travail poussé accidentellement, tout en pouvant potentiellement entrer en conflit avec votre collègue qui l'a peut-être déjà tiré, et qui poussera les cheveux gris et perdra beaucoup de temps à essayer de réconcilier son chef de branche locale avec le central:
Pour supprimer le changement de fichier du dernier commit:
pour rétablir le fichier à l'état avant le dernier commit, faites:
pour mettre à jour le dernier commit avec le fichier rétabli, faites:
pour pousser le commit mis à jour vers le référentiel, faites:
Vraiment, pensez à utiliser la méthode préférée mentionnée précédemment.
la source
git checkout HEAD~2 /path/to/file
? Edit: On dirait que ce que je voulais dans mon cas était simplementgit rm /path/to/file
Si vous souhaitez supprimer le fichier du référentiel distant, supprimez-le d'abord de votre projet avec l'option --cache, puis poussez-le:
(Cela fonctionne même si le fichier a été ajouté au dépôt distant il y a quelques validations) N'oubliez pas d'ajouter à .gitignore les extensions de fichier que vous ne voulez pas pousser.
la source
Vous ne pouvez rétablir qu'un seul fichier à une révision spécifiée.
Vous pouvez d'abord vérifier sur quels commits le fichier a été modifié.
git log path/to/file.txt
Ensuite, vous pouvez extraire le fichier avec le numéro de révision.
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
Après cela, vous pouvez vous engager et le pousser à nouveau.
la source
Réinitialisez le fichier dans un état correct, validez et appuyez à nouveau.
Si vous êtes sûr que personne d'autre n'a encore récupéré vos modifications, vous pouvez utiliser
--amend
lors de la validation, pour modifier votre précédent commit (c'est-à-dire réécrire l'historique), puis pousser. Je pense que vous devrez utiliser l'-f
option lors de la poussée, pour forcer la poussée, cependant.la source
Obtenez le code de hachage du dernier commit.
git log
git revert <hash_code_from_git_log>
git push
vérifier dans le GHR. vous pourriez obtenir ce dont vous avez besoin, j'espère que cela vous sera utile
la source