Jak przywrócić wersję pliku gałęzi źródłowej


425

Jestem w głównej gałęzi mojego komputera lokalnego sklonowanej głównej gałęzi repozytorium ze zdalnego serwera.

Zaktualizowałem plik i chcę przywrócić pierwotną wersję ze zdalnej gałęzi głównej.

W jaki sposób mogę to zrobić?

Odpowiedzi:


874

Zakładając, że nie zatwierdziłeś pliku lub nie dodałeś go do indeksu, a następnie:

git checkout -- filename

Zakładając, że dodałeś go do indeksu, ale go nie zatwierdziłeś, to:

git reset HEAD filename
git checkout -- filename

Zakładając, że to zrobiłeś, to:

git checkout origin/master filename

Zakładając, że chcesz zdmuchnąć wszystkie zatwierdzenia ze swojego oddziału (BARDZO ZNISZCZĄCY):

git reset --hard origin/master

43
Trzecia opcja różni się bardzo od pierwszych dwóch opcji, ponieważ dotyczy wszystkich plików, a nie tylko jednego pliku. Możesz wskazać to bardziej jednoznacznie. A może by tak nie polecić, git checkout HEAD filenamea git checkout origin/master filenamedla opcji pierwszej i drugiej byłoby to bardziej spójne?
CB Bailey

5
@CharlesBailey: Dodałem git checkout origin/master filenameopcję do odpowiedzi gahooa.
Frank

2
@cilphex zdmuchuje wszystkie zobowiązania w twoim obecnym oddziale
WattsInABox

1
Przez przypadek zmieniłem oddział A poza oddział B i musiałem zresetować, aby zarządzać oddziałem lokalnym. git reset --hard mastersam byłem moim rozwiązaniem, ponieważ nie chciałem sięgać do źródła. Dzięki.
taco

3
@ gahooa Prawdopodobnie powinien to być git checkout - nazwa pliku, co jeśli plik nazywa się „master”, to otrzymasz zachowanie, które nie było zamierzone.
user2602152

50

Napotkałem ten sam problem i natrafiłem na ten wątek, ale mój problem dotyczył upstream. Poniżej polecenie git działało dla mnie.

Składnia

git checkout {nazwa-zdalnego} / {oddział} - {file / path.js}

Przykład

git checkout upstream / develop - public / js / index.js


0

Jeśli nie przypisałeś go jeszcze do gałęzi master, jest to łatwe:

  • zejdź z gałęzi master (jak git checkout -b oops/fluke/dang )
  • zatwierdzić tam swoje zmiany (np git add -u; git commit; )
  • cofnij gałąź master (jak git checkout master)

Twoje zmiany zostaną zapisane w gałęzi oops / fluke / dang; mistrz będzie taki, jaki był.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.