2013-09-04 29 views
6

piloty: pochodzeniepodścielanie lokalny oddział Git przed naciśnięciem do zdalnych

$ git branch 
* master 

$ git checkout -b "new_feature" 

Teraz robię parę zatwierdzeń na „new_feature” gałęzi i chce przesunąć do pochodzenia po jego aktualizacji.

$ git branch 
master 
* new _feature 

$ git pull --rebase origin new_feature  
$ git push origin new_feature 

Czy to właściwy sposób na aktualizację lokalnego oddziału przed przejściem do zdalnego?

Odpowiedz

3

Chcesz użyć

git pull --rebase origin master 

arguments to git pull musi być opcjonalny zdalny, a opcjonalny refspec lub odniesienie/oddział na tym odległym:

git pull [options] [<repository> [<refspec>…]] 

new_feature nie będzie działa, ponieważ jest to lokalny oddział, a ponadto nie ma sensu dla rebase, ponieważ chcesz przekazać wersję do rebase Oddział new_featurena górze. Jeśli masz wyrejestrowany new_feature, to jest zrozumiałe/domyślne, że jest to gałąź, którą chcesz rebase, tak normalnie działa rebase.

+0

Nie mogę tego zrozumieć. Rozumiem, że ponieważ muszę pchnąć new_feature branch na zdalny, chcę zaktualizować new_feature przed naciśnięciem. Obecnie pracuję teraz nad new_feature branch. W takim razie, w jaki sposób suwak suwaka -rebase origin zaktualizuje "new_feature"? Czy aktualizacja gałęzi master będzie poprawna? Przepraszam za to . Ale z jakiegoś powodu nie dostaję tej ostatniej części. –

+0

Musisz wyjaśnić swoje pytanie. Czy próbujesz zaktualizować 'new_feature' zmianą z' origin'?A może próbowałeś go zaktualizować zmianami wprowadzonymi do 'master' w' origin'? –

0

Po utworzeniu „new_feature” oddziale trzeba będzie stan jak

o <master> <origin/master> <new_feature> most recent commit 
| 
... 

potem, po zatwierdzanie zmian do lokalnego oddziału repozytorium będzie wyglądać

o <new_feature> your last commit 
| 
o your first commit 
| 
o <master> <origin/master> most recent commit 
| 
... 

Doing

git pull --rebase origin master 

, jak sugeruje ciastko, skończysz z

o <new_feature> your last commit 
| 
o your first commit 
| 
o <origin/master> something meanwhile commited on remote master 
| 
o <master> most recent commit 
| 
... 

Twoje zmiany zostaną ponownie wprowadzone na początku "origin/master". To nie są twoje oryginalne zatwierdzenia, ale zmiany są zmieniane, aby pasowały do ​​"nowego" "pochodzenia/wzorca".

Dokonując reorganizacji, można uzyskać konflikty scalania, ponieważ zmiany wprowadzone w zdalnym kapitancie mogą kolidować ze zmianami.

Ale ponieważ "new_feature" jest teraz "na górze" "origin/master", możesz wykonać push do zdalnego mastera.

Spowoduje to również przeniesienie znacznika "origin/master" na poziom "new_feature". Jeśli chcesz również mieć lokalny "master" na ścieżce, musisz to sprawdzić i wykonać scalenie z "origin/master".