Comment puis-je supprimer la modification de fichier de la fenêtre d'état des fugitifs?

33

Lorsque vous êtes dans la fenêtre d'état du plugin fugitif , accessible à l'aide de , il est possible de différencier les modifications d'un fichier à l'aide et de basculer les fichiers à valider à l'aide .:GstatusD-

Existe-t-il un raccourci similaire pour rejeter les modifications, le rejet j'entends l'équivalent git checkout -- filename?

Mise à jour:

Trouvé une demande de fonctionnalité sur la page github des fugitifs Problème # 97: Raccourci pour extraire / supprimer des fichiers

Selon cela, la manière préférée est d'utiliser :Gread :w

Mise à jour 2:

Depuis juin 2014, il est possible d'utiliser Ucomme répondu par Anson ci-dessous .

Mise à jour 3: depuis le 3 janvier 2019, le raccourci clavier est mappé surX

tidbeck
la source

Réponses:

27

Cette fonctionnalité a été ajoutée en juin 2014 et est mappée par défaut U.

Cette information se trouve dans le fichier d'aide sous :h :Gstatus:

     U     |:Git| checkout HEAD

Demande de fonctionnalité et discussion:
https://github.com/tpope/vim-fugitive/issues/97

Valider:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63

Anson
la source
Si ce n'est pas documenté, cela pourrait être interprété comme dangereux. Ne serait-il pas difficile de découvrir que vous avez saboté vos modifications locales à cause d'une frappe magique non documentée?
sehe
2
Mise à jour 2019 maintenantX
Oguz Bilgic
toute personne disposant du privilège de modification, veuillez la modifier en X?
chriz
15

Vous pouvez utiliser la commande de fugitiveGread pour remplacer le contenu d'un tampon par différentes versions alternatives du fichier du tampon (c'est-à-dire que cela doit être fait à partir du tampon d'un fichier, pas à partir du :Gstatustampon).

  • :Gread(sans argument) utilisera la version du fichier de l'index .
  • :Gread - utilisera la version du fichier de la validation HEAD.

Voir la documentation à :help fugitive-revisionpour la liste des autres spécifications de révision prises en charge par fugitive (les deux ci-dessus sont probablement les plus utiles).

Le :Greadflux de travail se déroule comme suit:

  1. :Gread
  2. fugitive efface le tampon courant et lit le contenu de l'index
  3. Résultat : le tampon a désormais le même contenu que l'index. Le fichier d'arborescence de travail n'est pas modifié.
  4. Vous pouvez effectuer un suivi avec :wpour enregistrer le fichier dans l'arborescence de travail (ou utiliser :Gread|wsi vous savez que vous souhaitez l'enregistrer immédiatement).

Le :Git checkout -- %flux de travail se déroule comme suit:

  1. :Git checkout -- %
  2. Git copie la version du fichier de l'index dans le fichier de l'arborescence de travail.
  3. Vim remarque que le fichier a été modifié en dehors de l'éditeur et vous invite à l'ignorer ou à le recharger.
  4. Vous dites à Vim de recharger le fichier.
  5. Résultat : le fichier d'arborescence de travail et le tampon ont désormais le contenu de l'index.

Résumé: :Greadévite l'invite «le fichier a changé depuis le début de l'édition» et vous permet de décider quand vous souhaitez modifier le fichier dans l'arborescence de travail.


Lorsque le tampon représente une étape d'index du fichier au lieu du fichier de l'arborescence de travail, :Greadlit le contenu du fichier tel qu'il existe sur le disque dans l'arborescence de travail au lieu de l'étape 0 de l'index.

Chris Johnsen
la source
Mappage pour que gstatus rétablisse le fichier:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
1

Mappage pour que gstatus rétablisse le fichier:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
la source
cela fonctionne très bien, le seul inconvénient est que j'obtiendrai la boîte de dialogue que le fichier a changé sur le disque et si je veux le recharger. Ce serait bien si c'était silencieux.
tidbeck
1
C'est encore mieux IMO car vous obtenez la confirmation que le fichier est réellement rétabli. Mais le rechargement automatique silencieux peut être fait avec l'option 'autoread' ( :help autoread). Autre que celui que vous pourriez voir bufdo eci-dessus au.
majkinetor
0

Eh bien, avez-vous essayé :help fugitive?

Apparemment non, il n'y a pas de raccourci pour cette fonctionnalité Git.

romainl
la source
Oui je l'ai fait. Il y a eu des moments où je n'ai pas trouvé de fonctionnalité dans l'aide qui ait été présente néanmoins. Pensez-vous que vous ne devriez jamais poser de questions sur une fonctionnalité qui n'est pas dans l'aide du programme / plugin?
tidbeck
Oui, cela m'est aussi arrivé: il y avait une fonction que je pouvais, :callmais à laquelle aucune commande n'était associée. Je ne me souviens pas du nom du plugin… Align? peu importe, mon avis est que l'on devrait lire les documents avant de demander autour. Ce que tu as fait. C'est cool. Mais la deuxième étape logique, après avoir lu les documents, serait IMO pour regarder la source du plugin et voir s'il y a une fonction utile là-bas. Ce que vous devez faire. Mais, AFAIK, fugitif ne s'occupe pas git checkoutdu tout, donc vos chances sont minces. Vous devrez probablement vous replier sur :!git checkout -- filename.
romainl
D'accord, merci pour la clarification. Je pense que vous faites valoir un argument valable concernant la lecture du code source, mais en même temps, si les informations ne sont disponibles que dans le code source, cela pourrait être un AQ valide ici. Acceptera votre réponse et continuera à utiliser :Git checkout -- %.
tidbeck
0

Bien que cela n'ait rien à voir avec vim, j'ai pensé à vous dire que je le fais parfois:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

terminer le travail rapidement.

Valer
la source