GitHub'da uzaktan değişiklikler nasıl birleştirilir?


137

Ben ilk Github itme çalışırken whn hata alıyorum:

[rejected] master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:me/me.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

bunu nasıl düzeltebilir ve uzaktan değişiklikleri birleştirebilirim?

Yanıtlar:


106

Ayrıntılar için ' git push --help ' bölümünün 'hızlı ileri alma' bölümüne bakın.

"Git pull" gerçekleştirebilir, olası çakışmaları çözebilir ve sonucu "git push" yapabilirsiniz. Bir "git pull", A ve B komisyonları arasında bir birleştirme taahhüdü C oluşturur.

Alternatif olarak, "git pull --rebase" ile A'nın üstündeki X ve B arasındaki değişikliğinizi yeniden oluşturabilir ve sonucu geri itebilirsiniz. Rebase, A'nın üzerine X ve B arasındaki değişimi inşa eden yeni bir D komutu oluşturacak.


16
Ben bir "git pull" yaparsam "Zaten güncel" söylendi dışında bu devam ediyor. ve eğer "git pull --rebase" yaparsam "Mevcut şube yöneticisinin güncel olduğunu" söylerim. Herhangi bir fikir? Teşekkürler!
jwl

3
@ larson4 Aynı sorunu aldım, ancak yaptıktan sonra git pullbaşka bir taahhütte bulunun ve sonra iyi olmalı
Patrick

20
@Patrick @larson Hata mesajını dikkatlice okumadığım için benzer bir sorun yaşadım. Reddet, teslim almadığım bir daldaydı. Aslında üzerinde olduğum şube başarılıydı. Çözüm buydu git checkout other-branch; git pull; git push; git checkout branch-i-was-working-on.
Noah Spurrier

86

Şube adınızdan önce + sembolünü ekleyerek bir push zorlayabilirsiniz.

git push origin +some_branch

1
Teşekkür ederim, bu benim için çalışıyor. Diğer çözümler benimgit reset --hard
Oli

1
Teşekkürler! Bir üretim ortamında bazı işlevleri test etmek için "A" dalını Heroku evreleme uygulamamın yanına itmiştim. Sonra (yerel olarak) “A” ve “B” yi “master” olarak birleştirdim ve “master” ı aşamalandırma uygulamama aktarmak istedim. Her türlü sorunu yaşıyordu. Bu, "efendiyi" itmeyi çok basitleştirdi. Teşekkürler!
Don Leatham

Benim için de çalıştı. Sorunu bulmak için bana 4 saat sürdü. Çok teşekkürler. Netbeans'ı yerel makinede (windows 7) çalıştırıyorum ve her basışta yerel istedim, uzak makinede (linux) kontrol ettim.
Maxim Shoustin

Bu yöntemin güvenli olmayabileceğini ve bazı ayrıştırılmış taahhütlerin erişilememesine neden olabileceğini unutmayın.
samuil

Bu kabul edilen çözüm olmalıdır. Diğer çözümler benim için çalışmıyor
banarun

20

Muhtemelen hiç birleştirmediğiniz github üzerinde değişiklikleriniz var. git pullDeğişiklikleri getirmeye ve birleştirmeye çalışın , o zaman zorlayabilirsiniz. Sorunuzu yanlış anladıysam özür dilerim.


18
Uzaktaki master'daki değişiklikleri reddetmeniz ve kendi değişikliklerinizi zorlamanız gerekiyorsa, -f tuşuyla zorlamayı deneyin
Hotsyk

13

"Git pull" yazarsanız ve "Zaten güncel" yazarsa ve yine de bu hatayı alıyorsanız, bunun nedeni diğer dallarınızdan birinin güncel olmaması olabilir. Başka bir şubeye geçmeyi ve tekrar "git push" u denemeden önce bir dalın da güncel olduğundan emin olun:

"Foo" dalına geçin ve güncelleyin:

$ git checkout foo
$ git pull

Komutu vererek sahip olduğunuz dalları görebilirsiniz:

$ git branch

Bunun neden işe yaradığını ve gerekli olduğunu açıklayabilir misiniz? (Sorunumu çözdü.) Bana karşı sezgisel görünüyor. Git'in neden ana dalı zorlayabilmem için başka bir şubeye ihtiyaç duyduğunu anlamıyorum.
Quinxy von Besiex

@QuinxyvonBesiex Kendimi anladığımdan emin değilim. Git'in temelindeki yapıyla ve dalları nasıl düzenlediğiyle (temelde anladığım kadarıyla etiketlerle aynı olan) bir ilgisi olabilir.
David Calhoun

7

Bunu zorlamaya zorlayabilirsiniz, ancak lütfen bunu SADECE ne yaptığınızdan emin olduğunuzda yapın.

Komut:

git push -f 

3

Bu sorun, çakışan etiketleriniz olduğunda da oluşabilir. Yerel sürümünüz ve uzak sürümünüz farklı taahhütler için aynı etiket adını kullanıyorsa, buraya gelebilirsiniz.

Bunu yerel etiketi silerek çözebilirsin:

$ git tag --delete foo_tag

2

Bu hatayı aldığımda, tüm proje klasörümü yedekledim. Sonra böyle bir şey yaptım

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

... şube adınıza bağlı olarak (master değilse).

Sonra yaptım git pull --rebase. Bundan sonra, çekilen dosyaları yedeklenen projemin dosyaları ile değiştirdim. Şimdi değişikliklerimi tekrar yapmaya ve itmeye hazırım.


0

1) Çekme işlemini yerel değişikliklerin üzerine yazmaya zorlama

Yerel olarak yapılan değişikliklerle ilgilenmiyorsanız ve kodu depodan almak istiyorsanız, bir zorlamayı çekebilirsiniz. Bu, bilgisayarınızda yapılan tüm yerel değişikliklerin üzerine yazacak ve depodaki sürümün kopya kopyası görünecektir.

IDE'nizde aşağıdaki komutları yürütün:

git reset - zor

git çekme

Bu, tüm yerel değişikliklerinizi anında yok edecektir, bu yüzden ne yaptığınızı bildiğinizden ve yerel değişikliklerinize ihtiyacınız olmadığından emin olun.

2) Her iki değişikliği de tutmak (yerel ve repodan)

Her iki değişikliği de (yerel olarak yapılan değişiklikler ve depoda bulunan değişiklikler) korumak istiyorsanız, değişikliklerinizi ekleyebilir ve uygulayabilirsiniz. Çektiğinizde, açıkça bir birleşme çatışması olacaktır. Burada iki kod parçasını karşılaştırmak ve hangi değişikliklerin saklanacağını ve hangilerinin kaldırılacağını belirlemek için IDE'nizdeki araçları (Difftool ve mergetool gibi) kullanabilirsiniz. Bu orta yol; siz manuel olarak kaldırana kadar hiçbir değişiklik kaybolmaz.

git $ the_file_under_error ekle

git taahhüdü

git çekme
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.