Uzak ana yerel şubeye nasıl birleştirilir


238

Başka birinin projesinden çatallanmış bir projenin yerel bir dalı ("configUpdate") var ve üzerinde bir sürü değişiklik yaptım ve yaptıkları değişiklikleri yerel şubemde birleştirmek istiyorum.

denedim

git pull --rebase origin configUpdate

ancak en son değişiklikleri almadı - ikisini nasıl birleştirebilirim? (ayrıca bonus puanları için pull --rebasekomutla ne yaptım ?)


Yanıtlar:


354

Özellik dalınızdan (ör. configUpdate) Çalıştırın:

git fetch
git rebase origin/master

Veya daha kısa form:

git pull --rebase

Bu neden işe yarıyor:

  • git merge branchnameşubeden yeni taahhütler alır branchnameve mevcut şubeye ekler. Gerekirse, otomatik olarak üstüne "Birleştirme" taahhüdü ekler.

  • git rebase branchnameşubeden yeni taahhütler alır branchnameve bunları değişikliklerinizin altına "ekler". Daha kesin olarak, geçerli dalın geçmişini, bunun üzerine branchnameyaptığınız değişikliklerle , ucuna dayanacak şekilde değiştirir.

  • git pulltemel olarak ile aynıdır git fetch; git merge origin/master.

  • git pull --rebasetemel olarak ile aynıdır git fetch; git rebase origin/master.

Öyleyse neden kullanmak git pull --rebaseyerine kullanmak istesin ki git pull? İşte basit bir örnek:

  • Yeni bir özellik üzerinde çalışmaya başlıyorsunuz.

  • Değişikliklerinizi zorlamaya hazır olduğunuzda, diğer geliştiriciler tarafından birkaç taahhüt uygulandı.

  • Siz git pull(birleştirme kullanır), otomatik olarak oluşturulan birleştirme taahhüdüne ek olarak değişiklikleriniz yeni taahhütlere gömülür.

  • Eğer varsa git pull --rebasebunun yerine git hızlı ileri efendin 's akıntıya karşı olacak, daha sonra üstte Değişiklikleri uygulamak.


Bunu doğru dalda yaptım ama yerel dosyalarım ile orijinal projenin uzak ana dalı arasındaki farkları hala görebiliyorum (her şeyin güncel olduğunu söylese bile) belki projeyi yanlış ayarladım? Kontrol etmenin herhangi bir yolu var mı?
Martyn

1
@Martyn: Farklılıklar yerel değişiklikleriniz olmalı. Uzak daldan başka bir çatal yapın ve doğru dosya içeriğine sahip olup olmadığını kontrol edin.
ZeissS

4
Bunun eski bir cevap olduğunu biliyorum, ancak bir rebase yerine MERGE yapmayı tercih edebileceğinizi unutmayın. Daha sonra bazı değişikliklerinizin zaten olduğu uzak bir repo ile birleşmeniz gerekecekse, yeniden ödeme yapmak istemezsiniz.
Domino

1
Peki (şu anda şube configUpdate'de olduğunuzu varsayarak) ... git pull temelde git fetch ile aynıdır; birleştirme kaynağı / yöneticisi. <- DOĞRU DEĞİL
Chris

@Chris: Hangi anlamda doğru değil? Memba olarak menşe / üstat varsayımı? Yoksa git pull değişti mi?
Joey Adams

81

Öyle olduğunu öğrendim:

$ git fetch upstream
$ git merge upstream/master

6
Yani, daha önce pull --rebaseanlamadıysanız, çalışmadınız çünkü originçatala işaret ediyordu. Yapsaydın işe yarardı git pull --rebase upstream/master.
Karl Bielefeldt

3
Dene: git merge origin / master
Chris

Bir getirme eksikti, bu cevap benim için çözdü.
nurettin

38

Yerel şubenize geçin

> git checkout config

Uzak ana bilgisayarı dalınıza birleştirin

> git rebase master config Güncelleme

Herhangi bir çakışma olması durumunda bunları düzeltin ve çakışan her dosya için komutu yapın

> git add [path_to_file / çakışan_dosya] (örneğin git add app / asset / javascripts / test.js)

Rebase'e devam et

> git rebase - devam et


Birleştirme yerine rebase kullanmaktan korkmayın, bu sorulardaki boşluğu hissediyorsanız farkı araştırmak için biraz zaman harcayın
Serge Seletskyy

13

git rebase benim için işe yaramadı. Git rebase'den sonra, değişiklikleri yerel şubeme aktarmaya çalıştığımda hata almaya devam ettim ("ipucu: Geçerli dalınızın ucu uzaktaki karşılığının arkasında olduğu için güncellemeler reddedildi. Uzaktan değişiklikleri entegre edin (örn. 'Git pull). .. ') tekrar itmeden önce. ") git sonra çekin. Sonunda benim için işe yarayan git merge oldu.

git checkout <local_branch>
git merge <master> 

Benim gibi yeni başlayan biriyseniz, git merge vs git rebase hakkında iyi bir makale. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

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.