Bunu anlayamıyorum. Web'de ve kitaplarda çok şey okudum ve bir şey sadece kafamda kalmıyor. Birisi bana aşağıdakilerin kukla sürümünü verebilir mi:
- git getirme vs çekme
- git merge vs rebase
Bunu anlayamıyorum. Web'de ve kitaplarda çok şey okudum ve bir şey sadece kafamda kalmıyor. Birisi bana aşağıdakilerin kukla sürümünü verebilir mi:
Yanıtlar:
fetch depodaki verilerinizi güncelleyerek uzak * daldaki değişiklikleri indirir, ancak yerel * dalınızı değiştirmeden bırakır.
pullyerel şubenizde bir fetchve ek mergeolarak değişiklikler gerçekleştirir .
Fark ne? pullyerel şubeyi, çekilen şubedeki değişikliklerle günceller. A fetchyerel şubenizi ilerletmez.
Aşağıdaki geçmiş göz önüne alındığında:
C --- D --- E yerel
/
A --- B --- F --- G uzaktan kumanda
mergeiki geliştirme tarihine birlikte katılır. Bunu, uzak dalın üstüne ayrıldıktan sonra yerel dalınızda meydana gelen değişiklikleri tekrarlayarak yapar ve sonucu yeni bir taahhüde kaydeder. Bu operasyon, her bir taahhüdün soyunu korur.
Bir mergeirade etkisi :
C --- D --- E yerel
/ \
A --- B --- F --- G --- H uzaktan kumanda
rebaseyerel şubenizde var olan taahhütleri alır ve uzak şubenin üstüne yeniden uygular. Bu işlem, yerel taahhütlerinizin atalarını yeniden yazar.
Bir rebaseirade etkisi :
C '- D' - E 'yerel
/
A --- B --- F --- G uzaktan kumanda
Fark ne? A merge, taahhütlerin soyunu değiştirmez. Bir rebase
yerel kaydedilmesini atalarının yeniden yazar.
*Bu açıklama geçerli dal yerel şube olduğunu varsayar ve şube için argüman olarak belirtilen fetch, pull, mergeveya rebaseuzak bir dalıdır. Bu olağan durum. pullörneğin, belirtilen şubedeki değişiklikleri indirir , deponuzu ve geçerli şubedeki mergedeğişiklikleri günceller .
Çekme ve Çekme
Git getirme sadece repo verilerinizi günceller, ancak git çekme temelde bir getirme gerçekleştirir ve sonra çekilen dalı birleştirir
'Git pull' ve 'git fetch' arasındaki fark nedir?
Birleştirme ve Rebase
Atlassian SourceTree Blog, Birleştirme veya Rebase'den :
Birleştirme, her bir taahhüt tarihinin soyunu korurken iki gelişme çizgisini bir araya getirir.
Buna karşılık, yeniden baslama, geliştirme dallarını değişiklikleri hedef dalın çocukları olarak görünmeleri için kaynak daldan yeniden yazarak birleştirir - bu taahhütlerin hedef dalın üstüne yazıldığını etkili bir şekilde iddia eder.
Ayrıca, HackerNews'e (gönderi bağlantısı ) gönderilen ve çok fazla dallanma ve birleştirme hilesi öğreten güzel bir oyun olan Git Branching'i öğrenin . Bu konuda çok yardımcı olacağına inanıyorum.
git merge <remote>/<branch>. örneğin, ana dalınız ve uzaktan kumandanız kökenli ise, bunu yapabilirsiniz git merge origin/master.
çek ve çek :
Bunu anlamanın yolu git pull, basitçe git fetchbunu izlemektir git merge. Yani değişiklikleri uzak bir daldan alıp geçerli dalda birleştirirsiniz.
birleştirme vs rebase :
Komutun dediği gibi bir birleştirme yapılır; geçerli dal ile belirtilen dal arasındaki farkları birleştirir (geçerli dalda). Yani komut mevcut dalda git merge another_branchbirleşir another_branch.
Bir rebase biraz farklı çalışır ve biraz havalıdır. Diyelim ki komutu yerine getirdiniz git rebase another_branch. Git önce geçerli şube ile arasında en son ortak sürümü bulur another_branch. Yani dallar ayrılmadan önceki nokta. Sonra git bu ıraksak noktayı başına götürecektir another_branch. Son olarak, orijinal ıraksak noktadan beri mevcut daldaki tüm taahhütler yeni ıraksak noktadan tekrar oynatılır . Bu, daha az dal ve birleşme ile çok temiz bir tarih yaratır.
Ancak, tuzaklar olmadan değil! Sürüm geçmişi "yeniden yazıldığı" için, bunu yalnızca taahhütler yalnızca yerel git deponuzda varsa yapmalısınız. Yani: Taahhütleri uzak bir repoya ittiyseniz bunu asla yapmayın.
Bu çevrimiçi kitapta verilen yeniden temellendirmeye ilişkin açıklama, anlaşılması kolay resimlerle oldukça iyidir.
birleştirme yerine yeniden basma ile çekme
Aslında rebase'i çok kullanıyorum, ancak genellikle çekme ile birlikte:
git pull --rebase
uzaktan değişiklikleri alır ve birleştirme yerine yeniden taban oluşturur. Yani en son çektiğiniz andan itibaren tüm yerel taahhütlerinizi tekrar oynatır. Bu birleştirme ile normal bir çekme yapmaktan daha temiz buluyorum, bu da birleşmelerle ekstra bir taahhüt yaratacak.
Birleştirme - HEAD dalı, her bir taahhüt tarihinin soyunu koruyarak yeni bir taahhüt oluşturacaktır. Birleştirme taahhütleri paralel olarak aynı dalda çalışan birden fazla kişi tarafından yapılırsa tarih kirlenebilir.
Rebase - Yeni bir taahhüt oluşturmadan bir dalın değişikliklerini bir başkasına yeniden yazar. Kod geçmişi basitleştirilmiş, doğrusal ve okunabilir ancak çekme istekleriyle çalışmaz, çünkü birisinin ne gibi küçük değişiklikler yaptığını göremezsiniz.
Ben kullanırsınız git mergeözellik tabanlı iş akışı ile uğraşırken ya da ben rebase aşina değilim eğer. Ama daha temiz, doğrusal bir tarih istiyorsam git rebasedaha uygun olur. Daha fazla ayrıntı için bu birleştirme veya yeniden oluşturma makalesine göz atın .