Jak zresetować „master” do „origin / master”?


215

Czy mogę wykonać następujące czynności w prostszy sposób?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Czasami można to zrobić bez dotykania działającego drzewa: stackoverflow.com/a/12343727/586086
Andrew Mao

6
Zaktualizuj zaakceptowaną odpowiedź: Odpowiedź KindDragon jest poprawna i krótsza.
Robert Siemer

Odpowiedzi:


310

Jak KindDragon „s odpowiedź wspomina, można odtworzyć masterbezpośrednio origin/masterz:

git checkout -B master origin/master

git checkoutStrona man wspomina:

Jeśli -Bpodano, <new_branch>jest tworzony, jeśli nie istnieje; w przeciwnym razie jest resetowany . Jest to transakcyjny odpowiednik

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Pierwotnie sugerowane:

Coś jak:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

przy czym krok 2 jest opcjonalny.


1
Możesz to zrobić za pomocą jednej linii.
Robert Siemer

93

Git obsługuje to polecenie:

git checkout -B master origin/master

Sprawdź origin/mastergałąź, a następnie zresetuj mastertam gałąź.


4
Jedyna prawdziwa odpowiedź.
Robert Siemer

3
zapisz cztery naciśnięcia klawiszy - nie potrzebujesz cudzysłowów. Po prostu: git checkout -B master origin / master
zumalifeguard

powiedzmy, że popełniłem 2 rzeczy, pierwsza to połączenie z gałęzią, a druga jest regularna. Co stanie się ze scaleniem, jeśli wrócę do źródła / wzorca?
utdev

1
nie musisz git fetch origin masterwcześniej, aby mieć pewność, że origin/masterjest aktualizowany?
pedrozath

Tak, oczywiście ze wszystkimi rozwiązaniami, które powinieneś zrobić git fetchnajpierw
KindDragon

29

Myślę, że nawet odpowiedź VonC ma złożoność w porównaniu z tą opcją:

git update-ref refs/heads/master origin/master
git reset --hard master

git automatycznie rejestruje każdą wartość ref (poprzez reflog). Więc po uruchomieniu tej komendy master@{1}odnosi się do poprzedniej wartości master.

Odpowiedź VonC jest poprawna, ale marnuje czas na sprawdzanie starej wartości master w systemie plików.

Jeśli zależy Ci na osieroconych obiektach w repozytorium, możesz uruchomić git gc


1
Brzmi interesująco. +1
VonC

Nadal dostajęAlready on 'master'
yourfriendzak

@tworzony_framdzak, zapomniałem wziąć pod uwagę, że być może już sprawdziłeś wzorzec przed aktualizacją wzorca. Zaktualizowałem odpowiedź, aby była taka, która powinna działać również w tym przypadku.
Alexander Bird

Działa to nawet, jeśli nie jesteś na masterie (jak odłączony stan HEAD, który w rzeczywistości wskazuje na początek / master końcówki). Następnie możesz zrealizować transakcję master bez konieczności przerzucania starych plików przez repozytorium. Wspaniały!
Andrew Mao,

20

Jeśli jesteś już włączony master, możesz wykonać następujące czynności:

git reset --hard origin/master

Wskaże masteroddział lokalny na pilota origin/masteri odrzuci wszelkie modyfikacje działającego katalogu.


I usunie pliki! Jeśli utworzyłeś / edytujesz pliki i uruchomiłeś na nich „git add”, to polecenie je usunie. Być ostrzeżonym.
Cheeso,

Czy to podejście jest lepsze niż git checkout -B master origin/master?
Jim Aho
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.