2011-05-02 28 views
9

Başlangıç ​​durumuna --rebase (hayır unpushed değişiklikler > akım dalını belirtir) . git pull --rebase akıllı ve sadece master da başlangıçta Emaster eğer == origin/master işaret yapmak git reset kullanır?git çekme

cevap

7

git pull --rebase onun ne benzer:

git fetch 
git rebase 

yapardı. davanız böyle repo bırakacaktır Yani:

o C [> master] 
| 
o B 
| 
o E [origin/master] 
| 
o C' 
| 
o B' 
| 
o D 
| 
o A 
| 
... 

Not olduğunu sen üstüne yeniden oluşturulan kökenli farklı olan iki kaydedilmesini işlemek E.

yerine birleştirme rebase ile indirebiliriz
+0

Size 'C' ile karışık' B'' 'ile B' ve' C' ettik benziyor: git pull --rebase ekstra büyü etrafında tam bir öykü için

, bu cevaba bakınız '. Ne yazık ki, pratikte bu, "B" ve "C" 'nin zaten bir kökeni seçmesi ya da yeniden üretilmesinin bir sonucu olarak "kökeni/usta" nın parçası olması durumunda işe yaramaz. – Mot

+7

'git pull --rebase' * * değil' git getirme ile aynıdır; git rebase' - [aradaki farkı veren cevapım] bölümüne bakın (http://stackoverflow.com/a/11531552/179332). –

17

- o benim takımım böyle çalışır ve oldukça iyi çalışıyor. "A few git tips you didn't know about" Kimden

:

şube işlemek Birleştirme kaydedilir GIT'de birleştirir olduğundan, bunlar olması gerekiyordu anlamlı örneğin, bir özellik bir sürüme birleştirildi bunu gösterecek şekilde dalı. Ancak, birkaç ekip üyeleri genellikle tek bir dalı senkronize düzenli günlük iş akışı sırasında, zaman çizelgesi düzenli git çekme gereksiz mikro birleştirme ile kirlenmektedir. Rebasing bu tarih doğrusal kalması kaydedilmesini her zaman yeniden uygulanmasını sağlar.

Hep --rebase bayrağı olmadan bunu yapmak için belirli dalları yapılandırabilirsiniz:

#make 'git pull' on master always use rebase
$ git config branch.master.rebase true

Ayrıca her yeni için son özelliğini ayarlamak için küresel seçeneği ayarlayabilirsiniz paletli şube:

# setup rebase for every tracking branch
$ git config --global branch.autosetuprebase always

15

git pull --rebaseDEĞİLgit fetch; git rebase aynıdır. Maalesef git-pull adam sayfası fark hakkında oldukça şifreli geçerli:

--rebase 
     Rebase the current branch on top of the upstream branch 
     after fetching. If there is a remote-tracking branch 
     corresponding to the upstream branch and the upstream branch 
     was rebased since last fetched, the rebase uses that 
     information to avoid rebasing non-local changes. 

Orijinal Poster tahmin olarak fark git reset içermeyen çıkıyor - aslında reflog (eğer here bakınız içerir sen cenneti 't) daha önce bu terimi ile karşılaştı.

https://stackoverflow.com/a/11531502/179332