Habituellement, pour annuler les modifications apportées à un fichier, vous devez:
git checkout -- <file>
Que faire si la modification que je souhaite supprimer supprime le fichier? La ligne ci-dessus donnerait une erreur:
error: pathspec '<file>' did not match any file(s) known to git.
Quelle commande restaurera ce fichier unique sans annuler d'autres modifications?
point bonus: Et si le changement que je veux supprimer consiste à ajouter un fichier? J'aimerais aussi savoir comment mettre en scène ce changement.
git
git-checkout
lurscher
la source
la source
Réponses:
En supposant que vous vouliez annuler les effets de
git rm <file>
ourm <file>
suivis pargit add -A
quelque chose de similaire:Pour annuler
git add <file>
, la première ligne ci-dessus suffit, en supposant que vous ne vous êtes pas encore engagé.la source
--
la clé.git reset <file>
ne fonctionne pas, c'est ce qui m'a amené ici.end-of-options-marker
requis uniquement dans le cas de fichiers supprimés?git reset HEAD <file>
, ce qui est équivalent), maisgit reset
traite son premier argument avantend-of-options-marker
comme un nom de référence, pas un nom de fichier. Pourrait-il être écrit un peu plus flexiblement? Probablement. Pourquoi pas? Probablement, seuls les développeurs le savent.git reset filename
fonctionne très bien pour les fichiers non supprimés.git reset <file>
etgit reset -- <file>
. J'ai du mal à trouver une réponse à cela sur google.On répond aux deux questions
git status
.Pour supprimer l'ajout d'un nouveau fichier, utilisez
git rm --cached filename.ext
Pour supprimer la suppression d'un fichier, utilisez
git reset HEAD filename.ext
D'un autre côté,
git checkout --
ne jamais mettre en scène, il rejette simplement les modifications non mises en scène.la source
git status
cité; montre aux utilisateurs un moyen d'auto-assistance maintenant et la prochaine fois, et au cas où des informations seraient ajoutées ou mises à jour dans les futures versions de git.git reset
. Après legit reset
, vous voyez "Modifié mais pas mis à jour" ce qui signifie "Modifications non mises en scène" dans la langue maternelle des auteurs git, apparemment. Plus important encore, tout le dogme sur le «statut git vous dit tout ce que vous savez» est un mensonge. (Les gestionnaires qui disent que cela fait perdre du temps aux gens et devraient être licenciés.)Les réponses à vos deux questions sont liées. Je vais commencer par le second:
Une fois que vous avez mis en scène un fichier (souvent avec
git add
, bien que d'autres commandes implémentent également implicitement les modifications, commegit rm
), vous pouvez annuler ce changement avecgit reset -- <file>
.Dans votre cas, vous devez avoir utilisé
git rm
pour supprimer le fichier, ce qui équivaut à simplement le supprimer avecrm
, puis à mettre en scène cette modification. Si vous le décompressez d'abord avec,git reset -- <file>
vous pouvez le récupérer avecgit checkout -- <file>
.la source
S'il a été mis en scène et validé, les éléments suivants réinitialiseront le fichier:
Cela fonctionnera pour une suppression qui s'est produite plusieurs fois auparavant.
la source
git revert COMMIT_HASH
Depuis git v2.23 , vous avez une autre option:
git restore --staged -- <file>
la source