GitHub'da çatallar arasında birleştirme


259

GitHub deposunu çatalladım. Sonra çatalımda bazı değişiklikler yaptım. Sonra orijinal depo değişiklikleri ve bazılarını birleştirdi. Şimdi, kaçırdığım değişiklikleri birleştirmek istiyorum. Basit bir çekme denedim, ardından itme, ama bu benim taahhütlerimi yinelenen verdim. Bunu yapmanın en iyi yolu nedir?

Yanıtlar:


352

Muhtemelen her depo için bir "uzaktan kumandaya" sahipsiniz. Bir uzaktan kumandadan çekip diğerine itmeniz gerekir.

Başlangıçta çatalınızdan klonladıysanız, bu uzaktan kumandaya "orijin" denir. Henüz eklemediyseniz, ilk kişinin deposunu başka bir uzaktan kumanda olarak eklemeniz gerekir:

git remote add firstrepo git://github.com/first/repo.git

Tüm bunlar kurulduktan sonra,

git pull firstrepo master
git push origin

Unutmayın, yapan git pullbir makrodan başka bir şey değildir git fetchve git mergebu sırayla. Sadece ilk kişinin deposundaki taahhütlerin listesini almanız ve ardından dallarını ağacınızla birleştirmeniz yeterlidir. Birleştirme, her iki daldaki taahhütlerinizle doğru olanı yapmalıdır.

GitHub, tüm kalıcı şaşkınlığında, elbette size bir kısayol verir. Deponun çatalında, diğer tarafa tamamen birleştirildiyseniz çatalı yakalamak için kullanabileceğiniz bir "hızlı ileri" düğmesi vardır.


1
Bunu tamamen uzaktan operasyonlarla yapmanın bir yolu var mı? Doğru anlarsam, bu yöntemle yerel depodaki tüm değişiklikleri indirecek ve daha sonra bunları github'daki çatala geri yükleyeceksiniz. Sadece bir şekilde tüm değişiklikleri doğrudan github'daki çatala çekmeyi tercih ederim.
Ken Liu

1
Hayır. Git bunu desteklemiyor. Neyse ki, Github şimdi web arayüzünde bir birleştirme düğmesine sahip.
cweiske

13
@cweiske - bu Birleştir düğmesi nerede? Yönetici sayfalarına ve ana sayfalara baktım, ancak bulamıyorum :(.
Adam

2
@Adam, Çekme İsteği sayfasında. Böylece forker, şubelerinden birini kendinizle birleştirmek için bir Çekme Talebi açacaktır. Orada birleştirme düğmesine tıklayabilirsiniz.
Rob Barreca

2
Hızlı ileri sarma düğmesi artık mevcut görünmüyor. Bilgi için, benim git remote add snaury git@github.com:snaury/script-runner
komutumda

72

Bu yüzden yukarıdaki kabul edilen cevap benim için mükemmel olmadı. Yani, çalıştığında orijinal github yazarının bağlantısını kaybetmiş gibi görünüyordu ve daha sonra bundan sonra işe yaramadı. Bence sorunun cevabı uzak isim ile şube arasında / dışında kalmasıydı. Bu yüzden master denilen bir kolu uzaktan kumandadan alır, ancak daha sonra onunla hiçbir şey yapamaz. Neden olduğundan emin değilim.

İşte github kendi sitelerinin önerdiği yol .

Çatallı deponuzu klonladıktan sonra, bir önceki cevabın söylediği gibi, orijinali işaret eden bir uzaktan kumanda eklemeniz gerekir. Bunu yukarı akış olarak adlandırmayı seviyorlar, ama önemli değil.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Sonra getir

git fetch upstream

birleştirmek için kullanılabilecek sürümleri göreceksiniz

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

O zaman sadece birleştirmek istediğiniz dalı seçmeniz gerekir. Bunların yerel şubeler olmadığını unutmayın, uzaktan kumandalar altında saklanırlar. Ancak, akış yukarı / master adlı bir yerel şubeniz yoksa (buna izin verilir), aşağıdaki satırla iyi bir şekilde birleşmeniz gerekir:

git merge upstream/master

Alternatif olarak, getirme / birleştirmeyi (en azından ilk getirmeden sonra) bu satırla kısayol yapabilirsiniz:

git pull upstream/master

Sorun, zaten değişiklikleriniz varsa, dahil ettiğiniz değişikliklerin birleştirme taahhüdü oluşturmasıdır. Bazı durumlarda kullanışlıdır, ancak çoğu zaman biraz anlamsızdır.
Pablo Olmos de Aguilera C.

1
Bu durumda kullanımı git rebaseçok daha iyi çalışır ve bu çirkin boş birleştirme taahhütlerini
dışarıda bırakır
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.