Jak mogę odrzucić zmianę pliku z okna statusu zbiegów?

33

W oknie statusu wtyczki zbiegowej , do której można uzyskać dostęp za pomocą :Gstatus, można różnicować zmiany dla pliku używającego Di przełączać pliki na potrzeby zatwierdzania -.

Czy istnieje podobny skrót do odrzucania zmian, z odrzuceniem mam na myśli ekwiwalent git checkout -- filename?

Aktualizacja:

Znaleziono żądanie funkcji na zbiegłej stronie github Problem nr 97: Skrót do kasy / usuwania plików

Zgodnie z tym preferowanym sposobem jest użycie :Gread :w

Aktualizacja 2:

Od czerwca 2014 r. Możliwe jest korzystanie z Uodpowiedzi udzielonej przez Anson poniżej .

Aktualizacja 3: Od 3 stycznia 2019 r . Przypisanie klawiszy jest mapowaneX

Tidbeck
źródło

Odpowiedzi:

27

Funkcjonalność ta została dodana w czerwcu 2014 roku i jest domyślnie odwzorowywany na U.

Ta informacja znajduje się w pliku pomocy pod :h :Gstatus:

     U     |:Git| checkout HEAD

Żądanie funkcji i dyskusja:
https://github.com/tpope/vim-fugitive/issues/97

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

Anson
źródło
Jeśli jest to nieudokumentowane, może być uznane za niebezpieczne. Czy nie byłoby trudno dowiedzieć się, że zablokowałeś lokalne zmiany z powodu nieudokumentowanego magicznego klawisza?
sehe
2
Zaktualizuj teraz 2019 To jestX
Oguz Bilgic
ktoś z uprawnieniami do edycji, proszę edytować go do X?
chriz
15

Można użyć zbiegłego „s Greadpolecenie, aby zastąpić zawartość bufora z różnymi alternatywnymi wersjami pliku bufora (czyli musi się to odbywać z buforu o pliku, a nie z :Gstatusbufora).

  • :Gread(bez argumentów) użyje wersji pliku z indeksu .
  • :Gread - użyje wersji pliku z zatwierdzenia HEAD.

Zobacz dokumentację w :help fugitive-revisioncelu uzyskania listy innych specyfikacji wersji obsługiwanych przez uciekinierów (dwa powyższe są prawdopodobnie najbardziej przydatne od razu).

Przepływ :Greadpracy przebiega w następujący sposób:

  1. :Gread
  2. fugitive usuwa bieżący bufor i wczytuje zawartość z indeksu
  3. Wynik : bufor ma teraz tę samą zawartość co indeks. Plik drzewa roboczego nie jest zmieniany.
  4. Możesz kontynuować, :waby zapisać plik do działającego drzewa (lub użyj, :Gread|wjeśli wiesz, że chcesz go zapisać od razu).

Przepływ :Git checkout -- %pracy przebiega w następujący sposób:

  1. :Git checkout -- %
  2. Git kopiuje wersję pliku z indeksu do pliku w drzewie roboczym.
  3. Vim zauważa, że ​​plik został zmieniony poza edytorem i monituje o zignorowanie go lub ponowne załadowanie.
  4. Mówisz Vimowi, aby ponownie załadował plik.
  5. Wynik : zarówno plik drzewa roboczego, jak i bufor mają teraz zawartość z indeksu.

Podsumowanie: :Greadunika monitu „plik zmienił się od czasu rozpoczęcia edycji” i pozwala zdecydować, kiedy chcesz zmodyfikować plik w działającym drzewie.


Gdy bufor reprezentuje etap indeksu pliku zamiast pliku z drzewa roboczego, :Greadodczytuje zawartość pliku znajdującego się na dysku w drzewie roboczym zamiast poziomu 0 indeksu.

Chris Johnsen
źródło
Mapowanie gstatus w celu przywrócenia pliku:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
1

Mapowanie gstatus w celu przywrócenia pliku:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
źródło
działa to świetnie, jedyną wadą jest to, że otrzymam okno dialogowe zmiany pliku na dysku i jeśli chcę go ponownie załadować. Byłoby miło, gdyby było cicho.
tidbeck
1
To jeszcze lepsze IMO, gdy otrzymasz potwierdzenie, że plik został faktycznie cofnięty. Ale automatyczne ciche przeładowanie można wykonać za pomocą opcji „autoread” ( :help autoread). Poza tym możesz to zrobić bufdo epowyżej au.
majkinetor
0

Próbowałeś :help fugitive?

Najwyraźniej nie, nie ma skrótu do tej funkcji Git.

romainl
źródło
Tak. Czasami nie znalazłem żadnej cechy pomocy, która była obecna, tym niemniej. Czy Twoim zdaniem nigdy nie powinieneś pytać o funkcję, której nie ma w pomocy programu / wtyczki?
tidbeck
Tak, zdarzyło mi się również: istniała funkcja, do której byłem zdolny, :callale nie miałem powiązanego polecenia. Nie pamiętam nazwy wtyczki… Wyrównanie? cokolwiek, moim zdaniem jest to, że należy przeczytać dokumenty przed pytaniem. Co zrobiłeś. To spoko. Ale logicznym drugim krokiem, po przeczytaniu dokumentacji, byłoby IMO, aby spojrzeć na źródło wtyczki i sprawdzić, czy jest tam jakaś przydatna funkcja. Co powinieneś zrobić. Ale, AFAIK, zbieg nie radzi sobie git checkoutwcale, więc masz małe szanse. Prawdopodobnie będziesz musiał wrócić :!git checkout -- filename.
romainl
Ok, dziękuję za wyjaśnienie. Myślę, że masz rację, patrząc na kod źródłowy, ale jednocześnie, jeśli informacje są dostępne tylko w kodzie źródłowym, może to być tutaj poprawna kontrola jakości. Zaakceptuję twoją odpowiedź i nadal będziesz używać :Git checkout -- %.
tidbeck
0

Chociaż nie ma to nic wspólnego z vimem, pomyślałem, że powiem ci, że czasami:

$ 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

szybko kończąc pracę.

Valer
źródło