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ć?

mrblah
źródło

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
gahooa
źródło
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

Venkat.R
źródło
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ł.

pospolity
źródło