git çekin VS git getir Vs git rebase


294

Başka soru sözü git pullbir gibidir git fetch+ git merge.

Fakat git pullVS git fetch+ arasındaki fark git rebasenedir?


2
Birisi bağlantıyı temizlemeli ... ve diğer sorunun kaç oy aldığına şaşırdım.
xenoterracide

13
@xeno: Gitmem kaç kişi onun sadece bir sayısı "Ben de bu soru vardı" düşünmek
bobobobo

45
Bir gün git belgelerini gerçekten okumak için zaman bulacağım, ama o zamana kadar bu tür sorulara
oyumu

Yanıtlar:


336

Sorunuzdan, git mergeve arasındaki farkı gerçekten sorduğunuzun oldukça açık olması gerekir git rebase.

Diyelim ki ortak durumda olduğunuzu varsayalım. Getirmeden sonra, işler şöyle görünür:

- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)

Bu noktada birleşirseniz (git pull'un varsayılan davranışı), herhangi bir çakışma olmadığını varsayarsak, bununla sonuçlanırsınız:

- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)

Öte yandan, uygun rebase yaptıysanız, bununla sonuçlanır:

- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)

Çalışma ağacınızın içeriği her iki durumda da aynı olmalıdır; yeni bir tarih yarattınız . Rebase, geçmişinizi yeniden yazar ve başlangıçta ( R) yerine orijinalin yeni ana dalını ( ) üstlenmiş gibi görünmesini sağlar H. Ana şubenizden bir başkası daha önce almışsa, rebase yaklaşımını asla kullanmamalısınız.

Son olarak, git pullconfig parametresini branch.<name>.rebasetrue olarak ayarlayarak belirli bir dal için birleştirme yerine rebase kullanacak şekilde ayarlayabileceğinizi unutmayın . Bunu kullanarak tek bir çekme işlemi için de yapabilirsiniz git pull --rebase.


39
Birisi ana dalınızdan çekildikten sonra yeniden pazarlık ederseniz ne olur? Bu repoyu bozar mı?
Didier

12
Birisinin ana dalınızdan çekilip çekilmediğini nasıl anlarsınız?
Frank

29
Birinin sahip olmadığından emin değilseniz , sahip olduğunu varsaymalısınız.
Chris Down

4
Sadece kökeni / ustası dışında bir yerde de değişiklik yapmadıkça, söz konusu değişiklikleri çeken bir başkasının sorunuyla karşılaştığımı görmüyordum, çünkü eğer bu değişiklikleri başlangıç ​​noktasına / Üstat, ilk etapta hiçbir şey kaybedecekti. Bana öyle geliyor ki uyarı gerçekten sadece X -> origin / X'den daha karmaşık bir şeye sahip olduğunuz durumlarda önemlidir, ama yanılmış olabilirim. Birisi gözden kaçırdığım bir senaryo biliyorsa, lütfen paylaşın.
neverfox

1
@SteveChambers Hayır, sonuç bu değil. Çizgiler basitçe bağlı soyları temsil eder, yani A, B'nin ebeveynidir. Q'nun veya B'nin zaman içinde ilk olup olmadığı konusunda herhangi bir ima yoktur. Tüm bu işlemler zamana değil, taahhüt grafiklerine dayanmaktadır. Rebase sadece bazı taahhütleri nakleder, sonuçta taahhüt zaman damgalarının ne olursa olsun gösterdim.
Cascabel

9

TLDR:

git pullkoşma gibidir git fetchardından git merge
git pull --rebasegibidir git fetchardındangit rebase

İlk ifadenize yanıt olarak,

git pullbir git fetch+ gibidir git merge.

"Varsayılan modunda git çekme kısaltması ve git fetchardından git mergeFETCH_HEAD" Daha kesin olarak, verilen parametrelerle git pullçalışır git fetchve sonra git mergealınan dal kafalarını geçerli dalda birleştirmeye çağırır "

(Ref: https://git-scm.com/docs/git-pull )


İkinci ifadeniz / sorunuz için:

'Ama git pullVS git fetch+ arasındaki fark nedir? git rebase'

Yine aynı kaynaktan:
git pull --rebase

"--Rebase ile git birleştirme yerine git rebase'i çalıştırır."


Şimdi, eğer sormak istersen

'arasındaki fark mergeve rebase'

burada da yanıtlanır:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(sürüm geçmişinin kaydedilme biçimini değiştirme arasındaki fark)


2
Ben "git pull --rebase" çoğu zaman "git fetch sonra git rebase" gibi olduğunu söylemek istiyorum - ama her zaman değil. Bazı durumlarda, "git pull --rebase" biraz daha fazlasını yapar. Buradaki sık başvurulan örneğe bakın: gitolite.com/git-pull--rebase
Daniel K.

1
Cevabınız için çok teşekkür ederim. Artık git fetch + git rebasekomutların çalışma şeklini gerçekten anlıyorum . Git ağacımızda şu an az ya da çok çatışma yok :)
Travis Le
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.