2013-04-11 11 views
26

Załóżmy, że mamy gałąź hotfixes, która została utworzona od master. dodaliśmy poprawki do hotfixes, ale te zatwierdzenia nie były użyteczne, więc teraz chcemy zacząć od nowej kopii master ponownie.Jak zresetować oddział do innego oddziału z git?

wyjaśnienie lepiej, to jest workflow referencyjny: http://nvie.com/posts/a-successful-git-branching-model/

niech też powiedzieć, że pchnął hotfixes do origin zdalnego bo mamy strasznie skonfigurować i jest to jedyny sposób, aby przetestować coś, więc musimy zresetuj gałąź również na serwerze zdalnym.

Jak zresetować hotfixes do kopii master?

Odpowiedz

29

Masz na myśli, że chcesz przekazać lokalny numer master do odległego oddziału hotfixes? W ten sposób:

git push origin +master:hotfixes 

Wymaga to jednak ponownego napisania historii po zdalnej stronie.

+0

Czy to jest poprawna składnia? Kiedy to zrobiłem, dostałem nową zdalną gałąź z plusem (+) w nazwie. Musiałem przenieść plus jak "git push origin + master: hotfixes". Jest to zgodne ze specyfikacją git: http://git-scm.com/docs/git-push – jwynveen

+0

@jwynveen Masz rację, naprawiono. –

+6

fyi, znak plus jest skrótem do robienia '--force' podczas pchania: http://stackoverflow.com/questions/1475665/why-git-push-helloworld-mastermaster-instead-of-just-git- push-helloworld –

6

Jeśli dobrze zrozumiałem twoje pytanie, to, czego szukasz, jest sposobem na przeniesienie wskaźnika gałęzi origin/hotfixes, aby wskazać aktualną wersję origin/master.

Jeśli to być przypadek, to zestaw komendy powinny działać (zakładając, że masz już wyrejestrowany hotfixes w lokalnym repo git dowolnym momencie w przeszłości):

# git branch -f does not allow modifying the currently checked out 
# branch, so checkout any other branch than hotfixes 
git checkout <SOME_OTHER_BRANCH_THAN_HOTFIXES> 

# Move the branch pointer of hotfixes to the commit currently 
# pointed by origin/master 
git branch -f hotfixes origin/master 

# Force push the history rewrite in the hotfixes branch 
# into origin 
git push -f origin hotfixes 
+0

'Hotifxy rozgałęzień skonfigurowane do śledzenia odległego oddziału głównego od początku." - Nie jestem pewny, czy to w ogóle jest potrzebne –

36

to jak to zrobiłem z podstawowe polecenia git:

git checkout hotfixes 
git reset --hard master 
git push --force origin hotfixes 

oczywiście ważne jest, aby powiadomić każdy pracuje na hotfixes. najprawdopodobniej będą musieli usunąć swoją lokalną kopię i zacząć od nowej. Alternatywnym, mniej inwazyjnym pomysłem jest utworzenie nowego oddziału:

git checkout master 
git branch -tb hotfixes-2 # this creates branch `hotfixes-2` from a copy of `master` 
git push origin HEAD # this creates `hotfixes-2` on the remote server 
+0

Podoba mi się to lepiej. mniej podatny na błędy. –

+0

Dzięki za preferencje, ale jestem ciekawy, dlaczego uważasz, że jest mniej podatny na błędy. – danza

+1

Powinienem był stwierdzić, że jest to osobiste preferencje i nie próbowałem podawać faktu. Dla mnie wymaga to więcej akcji, które opisują lepiej to, co robisz, a następnie po prostu przesuwają się do innego pilota, co z kolei sprawia, że ​​jestem bardziej świadomy tego, co robię. Dodatkowo, dodatkowa flaga '-f' i' reset --hard' mają ostrzeżenie z narzędziami GUI, np. Sourcetree na przykład .. –

1

Odpowiedzi są solidne. Potrzebowałem tej dokładnej zmiany podczas resetowania mojej gałęzi przemieszczania do opanowania. W tym przypadku chcę zarówno zresetować początek, aby dopasować master, a także zresetować mój lokalny, aby dopasować to. Oto alias git umożliwiający przekazanie nazwy oddziału i wykonanie obu poleceń w jednym ruchu. (To trochę niebezpieczne)

reorient = "!f() { git push origin +master:$1 && git reset --hard origin/$1 ; }; f" 

następnie użyć go lubię:

git reorient hotfixes 

Odpowiedzi powyżej były całkowicie poprawne. Ale to po prostu pozwoli na mniej naciśnięć klawiszy i szybszy zwrot! Mam nadzieję, że to pomoże.

+0

Nie chciałbym owijać 'git reset --hard' w aliasie tak łatwo ... bój się zapomnieć i stracić ważne zmiany – danza

+1

Tak. Tak jak powiedziałem w wyjaśnieniu "to trochę niebezpieczne". Jednak w niektórych przypadkach możesz zrobić to regularnie, w takim przypadku możesz chcieć czegoś szybciej. –

Powiązane problemy