GitHub'a aktarılamıyor - birleştirmeye ihtiyaç olduğunu söylüyor


743

GitHub'da yeniyim . Bugün kodumu GitHub'a aktarmaya çalışırken bazı sorunlarla karşılaştım.

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Henüz depoya hiçbir şey itmedim, neden bir şey çekmem gerekiyor?


6
Bu durumun daha önce yerel olarak ziyaret edilen ve yukarı akış deposunda taahhütte bulunan şubeler için de olabileceğini unutmayın. Böyle eski bir dalı hızlı bir şekilde iletmenin ya da yerel depoda git'in unutmasını sağlamanın kolay bir yolu var mı?
Thorbjørn Ravn Andersen

50
@ ThorbjørnRavnAndersen - Git senaryosunu unutmak gibi görünen 'git push -f' komutunu kullanarak bu senaryoyu düzeltmeyi başardım :)
Echelon

6
Git yeni gelen bu konuda bir şikayet gördüm. Bunun nedeni GitHub'da yeni bir proje oluşturduklarında "Benioku ile başlat" onay kutusunu bırakıyor veya .gitignore / GPL seçeneklerini seçiyorlar, bu nedenle yeni projenin zaten yerel olarak sahip olmadıkları bir taahhüdü var, bu nedenle yukarıdaki hatadan kaynaklanan karışıklık.
Ruslan Kabalin

4
@ Push'u zorlamak için -f seçeneği tehlikelidir. Ben sadece bir takım projesinde kullandım ve 6 taahhüt "çizgili", sadece sunucudan silindi ve onları geri almak için hiçbir yolu!
Deleplace

42
Git övmek için moda. Ama konuştuğum hemen hemen her geliştirici, git şahsen nefret ettiklerini özel olarak kabul ediyor. Git'i kullandıkları için performans veya TFS kullandıklarında kullandıklarına kıyasla kaynak kontrolünde çok daha fazla zaman harcıyorlar.
developer747

Yanıtlar:


762

Bu, uzak deponun taahhütlerini kaybetmesine neden olabilir; dikkatli kullanın.

Uzak dalı yerel dalınızla birleştirmek istemiyorsanız ( git diff ile farklılıklara bakın ) ve bir zorla itme yapmak istiyorsanız , -f ile push komutunu kullanın

git push -f origin <branch>

Uzak deponuzun originadı nerede .

Genellikle, komut, üzerine yazmak için kullanılan yerel ref'nin atası olmayan bir uzak ref'yi güncellemeyi reddeder. Bu bayrak denetimi devre dışı bırakır. Bu, uzak deponun taahhütlerini kaybetmesine neden olabilir; dikkatli kullanın.


1
Bu benim için Github üzerinde bir repo için çalıştı ama benim app Heroku bir alt modül vardı. ve dosyaları alt modülün dışına çıkarmak ve güncellenen uygulamayı Heroku'ya göndermek zorunda kaldım.
JGallardo

24
Bu yayındaki yorumun son satırını okuduğunuzdan emin olun! "Bu, uzak deponun taahhütlerini kaybetmesine neden olabilir; dikkatli kullanın." Takım ortamında güç itmek tehlikeli bir şeydir ve genellikle kaçınılmalıdır.
Adam Kalnas

Bu, aynı zamanda, sadece bir taahhüdü taşımak için kiraz toplama özelliğini kullanarak orijinal depodan uzaktan kumandaya kadar tüm geçmişi ekleyebilir. Yedeklemeden geri yükleme gerekiyor ...
rickfoosusa

Ayrıca Github kullanıyorsanız , bunun daha önce yaptığınız son taahhütlerle oluşturduğunuz açık bir Çekme İsteğini geçersiz kılabileceğini belirtmek gerekir . Gönderen Github Dokümanlar : "Kuvvet senin çekme isteği bozabilir itme".
Armfoot

Bu benim için çalıştı. Denedim $ git pull origin master -vama hata veriyor fatal: refusing to merge unrelated histories. Sonra bunu denedim ve çalıştı ve yerel dosyalarım github uzaktan repo üzerinde ortaya çıktı.
Vir

238

Mesajın söylediği gibi,

Uzaktan değişiklikleri birleştirin (örn. 'Git pull')

git pullUzak depodan yerel deponuza en son değişiklikleri çekmek için kullanın . Bu durumda, yerel deponuzda değişiklik yaptığınız için değişiklikleri çekmek birleştirme gerektirir.

Açıklamak için bir örnek ve bir resim vereceğim. Diyelim ki başlangıç ​​noktasından / şubeden son çektiğiniz şey B Komitesindeydi. Aynı zamanda, bir başkası çalışmalarını tamamladı ve onu kökene / şubeye itti (Taahhüt D). Bu iki dal arasında birleşme olması gerekecek.

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

Siz zorlamak istediğiniz kişi olduğunuz için Git sizi birleştirmeyi gerçekleştirmeye zorlar. Bunu yapmak için, önce değişiklikleri başlangıç ​​noktasından / daldan almalısınız.

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

Birleştirme işlemini tamamladıktan sonra, artık değişikliklerinizi iterek başlangıç ​​noktasını / şubesini E Komitesine yönlendirmenize izin verilecektir.

Git, birleştirmeleri kendiniz halletmenizi gerektirir, çünkü birleştirme çakışmaya neden olabilir.


7
Ya birleştirmek istemezsen? Ve sadece D'yi bir yan dal olarak bırakın (en azından şimdilik). Daha sonra C'den sonra daha fazla taahhütte bulunabilirim; D'den sonra başka biri daha fazla iş yapabilir. Birleştirme acelesi nedir? Bir yan dalı birleştirmeden nasıl itebilirim? ~~~
Steve Pitchers

3
yerel / branş ve orijin / branş aynı branşta fakat farklı makinelerde (yerel ve orijin) temsil edilmektedir; local / branch itmek orijin / branş güncellemektir. Şubenizin durumunun başkaları tarafından görünür olmasını istiyorsanız (yani başlangıç ​​noktasında), ancak başlangıç ​​noktası / dal ile birleştirmek istemiyorsanız, yerel / daldan yeni bir dal oluşturmanız gerekir (git dal [adı]) ve o dalı başlangıç ​​noktasına doğru it (git push -u origin [name])
Jake Greene

1
Harika bir açıklama. Bu video , sorunun kısa bir tanıtımını ve @JakeGreene'nin açıkladığı gibi nasıl çözüleceğini ve yeni bir havuz kurarken ilk başta bunu önlemenin iki yolunu gösteriyor.
Kevin Markham

4
Bazı yıl sonra, sadece bu cevabı çok çok benzer olduğu görülmektedir bu diğer
superjos

1
Benim için git pullde basılı Already up-to-date. Ben olduğum halde ben dalda değildi, ama ayrılmış bir HEAD dalı (muhtemelen başarısız bir birleştirme?) Çıktı. Koştuktan sonra bu belliydi git branch. Çalıştırdıktan sonra git checkout mybranchher şey beklendiği gibi çalıştı.
strider

200

Zorlamadan önce kodunuzu güncellediniz mi?

Bir git pull origin masterşey itmeden önce kullanın .

originUzaktan kumandanız için bir isim olarak kullandığınızı varsayıyorum .

Bir şeyi itmeden önce yerel deponuzu güncel hale getirmek için, push işleminden önce çekmeniz gerekir (başka birinin zaten kodu güncellemesi durumunda github.com). Bu, çatışmaların yerel olarak çözülmesine yardımcı olur.


1
Havuz adını nasıl bilebilirim? Ben yazdığımda git pull origin mastergit şikayet ediyor'origin' does not appear to be a git repository
ziyuang 17:12

3
'origin' bir uzaktan kumandadır. git remote --verboseGit klasörünüz altında yapılandırılmış tüm uzaktan kumandayı görmek için kullanabilirsiniz . Ekranda gösterilen bilgiler ayrıca "git@github.com" yollarını veya nereye iteceğinizi belirleyebileceğiniz HTTPS yollarını da içerecektir. Bu yardımcı olur umarım !
AYK

16
git pull origin mastergösteren Zaten yukarı güncel. ama daha sonra origin_branch'ı itmeye çalıştığınızda, bu söz konusu uyarıyı söyleyin. Herhangi bir öneri !!
CoDe

2
@Shubh sorunu hiç çözdünüz mü? Aynı şeyi alıyorum!
OriginalAlchemist

3
@OriginalAlchemist evet .. çünkü ben sadece uzak yerel dal üzerinde çalışan geliştirici olduğum için ... bu yüzden yerel şubeyi zorla ittim .. ve bu yerel sistemdeki değişiklikleri ile sunucudaki açık şube tüm değişiklikleri geçersiz kılar. git push -f <remote> <branch>örneğin git push origin <your_local_branch> bu konuyu kontrol edin .
CoDe

122

Bu normalde, daha önce başka birinin zaten değişiklik yaptığı dalda değişiklik git commityapmaya çalıştığınızda olur .git pushgit pullingx

Normal akış aşağıdaki gibi olur,

ADIM 1 : git stashbu branştaki yerel taahhüt edilmemiş değişiklikleriniz.

2. ADIM : git pull origin branch_name -viçin pull and mergeo dal üzerinde yerel olarak işlenen değişikliklere ( bu Birleştirme mesaj ver ve düzeltme çatışmaları varsa. )

ADIM 3 : ed değişiklikleri ( Daha sonra zaten taahhüt edilen değişiklikleri (STEP4) isterseniz veya daha sonra dosyalara yeni bir taahhütte bulunursanız,git stash pop açılan dosyalar üzerinde taahhütte bulunabilirsiniz. )stash

4.ADIM :git push origin branch_name -v birleştirilen değişiklikler.

Değiştir branch_nameile master(için masterşube).


3
nerede commit? Sonra değişikliklerinizi yapmamalısınız stash pop?
mehmet

Yapayım. Genellikle ilk önce birleştirilmiş kodu zorlarım ve ardından yerel taahhütsüz değişiklikleri taahhüt ederim. Aynı anda hem taahhüt edebilir hem de zorlayabilirsiniz. Sadece tercih.
prayagupd

51

İlk ve basit çözüm (Önerilmez)

  • Bu komutu deneyin git push -f origin master.
  • Bu komut uzaktan deponun üzerine zorla yazılır (GitHub)

Önerilen çözüm

  • Şu komutları çalıştırın:
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

Bu işe yaramazsa takip edin 🔰

  • .gitKlasörü klasörden silin .
  • Ardından şu komutları yürütün:

    git init
    git add .
    git commit -m "First Commit"
    git remote add origin [url]
    git push -u origin master
    

VEYA

git push -f origin master 

Sadece kullanmak git push -f origin mastereğer -usizin için do not çalışmaları.

Bu, dosyalarınızı iterken meydana gelen hemen hemen her türlü hatayı çözecektir.


4
Git deponuzu silmek ve tüm işlem geçmişinizi kaybetmek "Önerilen" bir çözümdür? Aceleci görünüyor.
Nils Guillermin

@Nils Guillermin Durumunuza bağlıdır. Eğer tüm birleştirme çatışmalarını düzeltmek zorunda büyük bir proje üzerinde çalışıyorsanız o zaman kolayca tüm değişiklikleri gözden geçirmek ve birleştirmek için vscode kullanabilirsiniz. Düşünceleriniz için teşekkürler.
Smit Patel

47

Bazen çekmeyi unuttuk ve yerel ortamda birçok iş yaptık.

Birisi çekmeden itmek istiyorsa,

git push --force

çalışıyor. Diğer insanlarla çalışırken bu önerilmez, ancak işiniz basit bir şey veya kişisel bir oyuncak projesi olduğunda, hızlı bir çözüm olacaktır.


$ git push --force origin master
shaurya uppal

2
Bu benim için çalıştı: 0 ortak çalışanla kişisel proje. Ben burada SO üzerinde başka önerilen birkaç "çözümler" denedim, hiçbiri çok basit bir sorun ne sabit: Ben reset --hardeski bir taahhüt için bir yerel yaptım ve sonra birkaç daha yaptı. Sonra sadece istedim pushama uzaktan repo bana izin vermeye hazır değildi. WarrenP aslında git öğrenenlere daha az runik olarak yardımcı olabilir. Belki de istemiyordur.
mike kemirgen

2
Ya onu kullanmayın ya da doğru kullanmayı öğrenin. Bir ekip tarafından paylaşılan önemli bir merkezi depoya zorla girmeye zorlarsanız, tüm önemli depolara tüm push erişimini kaybetmelisiniz. Alternatif kişisel çıkış yollarını öğrenmekten kaçınmak için, kendi kişisel deponuzda yaptığınız şey, sonunda paylaşılan depolar üzerinde çalışma yeteneğinizi etkileyecektir. Kuvvet zorlamasından önce ne olduğunu biliyorsanız, bazen kuvvet zorlaması iyidir. Eğer yapmazsan, asla iyi olmaz.
Warren P

35

Bazılarınız bu hatayı alıyor olabilir çünkü Git hangi dalı zorlamaya çalıştığınızı bilmiyor.

Hata mesajınız aşağıdakileri de içeriyorsa

error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

varsayılan dalı geçerli olarak ayarlamak için Jim Kubicek'in Git'i Yalnızca Geçerli Şube'ye Yapılandır'ın kullanışlı ipuçlarını takip etmek isteyebilirsiniz .

git config --global push.default current

32
git pull origin branch_name --rebase

Bu benim için çalıştı - komut git pull origin branch_name --rebaseilk önce uzak şube_adı değişikliklerini, sonra rebaseüstündeki geçerli dalı çekecektir .


20

Yukarıdaki cevaplara ek olarak, aşağıdakiler benim için çalıştı: -

Senaryo -

  1. Başarla başlamak için my_branch'ı ittim .
  2. Birkaç değişiklik daha yaptım.
  3. Tekrar itmeye çalıştığımda, (ekleme yaptıktan sonra, elbette taahhütte bulundum), yukarıda belirtilen hatayı aldım.

Çözüm -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

Kanıt


1
Bana yardım ettin. --allBayrağı kullanarak başka bir dalı çekiyor olsam bile, başka bir şubeye ödeme yapmam ve uzaktan çekmem gerektiğini fark etmekte zorlandım .
MZanetti

18

Aynı problemim vardı, yaptığım ilk önce bunu kullanarak zorla ittim

git push --force

Dosyaları işledikten sonra aldım ve aldığınız gibi bir hata alıyordum.Tüm dosyaları yürüttüm ve onları itti. Sonra bir dahaki sefere github'a doğru itiyordum, benden istediğini yaptım ve o zaman iyiydi. Umarım bu senin için de işe yarar :)


Çalışacak ama istediğiniz şey olmayabilir! Bu, temelde sadece sonsuza dek kaybolacak değişiklikleri görmezden geldiğiniz anlamına gelir.
rulo

3
git push --set-upstream origin master --force
Efsaneler

1
Bir havuzu yok etmenin harika bir yolu. Eğer zorlamayı zorlarsanız, tarihi yok edersiniz. Ayrıca birçok profesyonel kurulum git kodu tabanı bunu yapmanıza izin vermez.
Oliver Dixon

Bu yinelenen bir cevap ve orijinal yine de büyük bir tavsiye değildi.
moopet

Bu aslında yapmak istediğim şey ama Gitlab ile denedim ve Gitlab buna tasarımla "korumalı dallarda" izin vermiyor
jeffery_the_wind

13

Ben öğretici, GitHub Nasıl Kullanılır: Yeni başlayanlar için bir öğretici söyledi .

GitHub'da yeni bir havuz oluşturduğunuzda, GitHub sizden bir benioku dosyası oluşturmanızı isteyebilir. Doğrudan GitHub'da bir benioku dosyası oluşturursanız, 'push' isteğinin başarılı olması için önce bir 'pull' isteği yapmanız gerekir. Bu komutlar uzak depoyu 'çeker', mevcut dosyalarınızla birleştirir ve ardından tüm dosyaları GitHub'a geri gönderir:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master

Bunun bir yıl sonra olduğunu biliyorum, ama tüm bu cevaplardan, github ile 1. gün neden zaten sorun yaşadığımı açıklayan tek kişi sen oldu. Çekme ve getirme arasındaki fark nedir?
Xander Luciano

1
Getir, değişiklikleri yerel şubenizle birleştirmeden değiştirmenizi sağlar. Çekme, getirmek ve birleştirmek için bir kısayoldur. Eminim bunu son 13 ay içinde çözdünüz. Sadece geçiyorum çünkü kendim bir karmaşa yarattım. ;-)
wolfhoundjesse

6

Mevcut şubemi itmeye çalıştığımda yukarıda belirtilen hata mesajını alıyordum foobar:

git checkout foobar
git push origin foo

Aynı uzak dalı takip eden iki yerel şubem olduğu ortaya çıktı:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

Şu anki şubemi kullanarak şunları yapmam işe yaradı:

git push origin foobar:foo

... ve temizlemek için git branch -d


6

git push -f kökeni şube adı

Yukarıdaki komutu yalnızca uzak dal koduna ihtiyacınız olmadığından eminseniz kullanın, aksi takdirde önce birleştirin ve ardından kodu itin


5
Bu kötü bir cevabın kopyası.
moopet

5

Mevcut projenize çekmek istemiyorsanız (ve muhtemelen çözmek istemediğiniz birleştirme çatışmalarıyla karşı karşıya kalırsanız) ve başka bir şube oluşturmak istemezseniz (Bu, başka bir dalı yönetmek için sıkıcı olacaktır) ve riskli ve kalıcı gitmek istemiyorum force komutları (ne yaptıklarını okuduktan sonra bile bunu yapmanın sonuçları konusunda sık sık şaşırıyorum).

Çözüm : Klasörünüzün içeriğini başka bir klasöre sürükleyebilir, projeyi şimdi boş klasörünüze çekebilir, çektiğiniz içeriği çöp kutusuna sürükleyebilir ve ardından doğru projenizi tekrar klasöre sürükleyebilirsiniz. Düzgün itebilmeniz ve istediğiniz sonuçları alabilmeniz gerekir. Bunu yapmak gerçekten 10 saniyeden daha kısa sürüyor.

Bunun herhangi bir sonuç vermeden bana uygun olmadığını söyleyecek olan insanlar ya da bana gelecekteki sıkıntılara neden olan bir komutu kullanmamı söyleyen insanlar için, "Bu yöntem tam anlamıyla 10 saniyeden daha az sürüyor" diyorum. Uygulamak için 10 saniyeden daha kısa süren ve aynı etkiye sahip bir git komutuyla karşılaşırsam, bunu benimseyeceğim. O zamana kadar bu yöntemi kullanıyorum.

Bu yöntemin bir dezavantajı, birleştirme belgelenmeden bir dalda gerçekten birleştirdiğinizde, taahhüt geçmişinizin doğrusal görünmesidir. Gruplarla çalışırken bu en iyi yöntem olmayabilir. Bu durumlarda şubeler üzerinde çalışın!


4

Sadece aynı sorunu vardı ama benim durumumda uzaktan kumandada yanlış şube yazmıştı. Öyle görünüyor ki, bu sorunun başka bir kaynağı ... doğru şubeye doğru ittiğinizi tekrar kontrol edin.


1
Ve benzer bir şey vardı, burada tamamen farklı bir depo için olan önceki bir komutu hatırladım!
Clare Macrae

4

Ben de aynı sorunu yaşadım ve ben düşündüğümden farklı (yerel) bir şube olduğum ortaya çıktı VE doğru yerel şube uzaktan taahhütleri arkasındaydı.

Benim çözümüm: doğru şubeyi kontrol edin, diğer yerel şubeden taahhüdü seçin, git pull ve git push


4

Benzer bir sorunum vardı ve şubemi güncel tutmak için iş akışımın hatalı olduğu ortaya çıktı. Aşağıdakileri yapıyordum:

Yerel 'efendim'

git fetch upstream
git merge upstream/master --ff-only

sonra yerel şubeme geri döndüm

git rebase master

Bu önceki git akışı için iyi çalıştı ama github ile değil. git rebaseSenkronize olan sorunlarına neden burada sorun oldu (ve ben o ben tam anlamadan kabul etmek yaşadım şey kabul edeceğiz) ve ne yazık ki bir duruma soktun git push -fmuhtemelen en kolay seçenek haline geldi. İyi değil.

Yeni akışım, şubeyi doğrudan kullanarak güncellemektir. git merge aşağıdaki gibi :

Yerel şubemde

git fetch upstream
git merge upstream/master

Hızlı ilerlemek yok, çünkü yerel şubede elbette değişiklikler yapacağım.

Muhtemelen söyleyebileceğiniz gibi, ben git uzman değilim ama bu iş akışının muhtemelen sahip olduğum belirli sorunları önleyeceği konusunda güvenilir bir şekilde bilgilendirildim.


3

Benim durumumda, "mybranch" ı kontrol ettim ve yaptım git pull, bu yüzden itmenin neden çalışmadığını anlayamadım. Sonunda yanlış dalı ittiğimi fark ettim. Bunun git push origin masteryerine yazıyordum git push origin mybranch.

Dolayısıyla git pull, bu mesajı zaten yaptıysanız ve almaya devam ediyorsanız, doğru şubeyi ittiğinizden emin olun.


3

Şube adınız uzak şube adıyla aynı mı?

Yanıtınız hayırsa, uzak dal ile aynı ada sahip yeni bir şubeye göz atmalı ve tekrar göndermeyi denemelisiniz.

İtmek istediğiniz uzak dalın [ test ] olduğunu ve yerel dalınızın [ test ] olarak adlandırıldığını varsayın .

Test branşında değilseniz , ilk önce ona geçin.

git checkout test

Ardından yeni bir şube açın ve test adını verin .

git checkout -b testing

Şimdi onu itme zamanı:

git push [remote repo] testing

2
Sadece $git branch -M <new_name>yerel şubeyi yeniden adlandırmak için kullanın .
Kom

3

Bu sorunu GIT veri havuzumda çözdüm. Gerek yok rebaseya forcebu durumda işlemek. Bunu çözmek için aşağıdaki adımları kullanın -

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

umarım yardımcı olur.


2

Başka bir çözüm, mümkünse başka bir taahhütte bulunarak uzaktan kumandanın başını ilerletmektir. Bu gelişmiş kafayı yerel alt ağaca çektikten sonra tekrar itebilirsiniz.


2

Gitweb için kullandığım çıplak bir Git deposundaki son değişiklikleri iterken benzer bir hata alıyordum . Benim durumumda çıplak depoda herhangi bir değişiklik yapmadım, bu yüzden sadece çıplak depoumu sildim ve tekrar klonladım:

git clone --bare <source repo path> <target bare repo path>

2

Eğer eminseniz kimse git depo değişiklik yapılmış ve en son sürümü üzerinde çalıştıklarını, git pullyüreğinizde bir çözüm olarak mantıklı değil ...

O zaman muhtemelen bu oldu, kullandın git commit --amend

Tamamen yeni bir anlık görüntü oluşturmak yerine aşamalı değişiklikleri önceki işlemle birleştirmenizi sağlar. Anlık görüntüsünü değiştirmeden önceki tamamlama mesajını düzenlemek için de kullanılabilir.

ATLASSIAN eğitimi: yeniden yazma geçmişi

Ancak, taahhüdü GitHub'a daha önce aktardıysanız gerçekleştirmeniz önerilmez.git commit --amend , çünkü "değişiklik sadece en son taahhüdü değiştirmekle kalmaz, tamamen değiştirir. Git için yepyeni bir taahhüt gibi görünecektir" yani GitHub'ınızdaki diğer geliştirici için, geçmiş A-> B-> C gibi görünür, ancak size göre A-> B-> D gibi görünür, eğer GitHub size izin verirsepush , herkesin geçmişini manuel olarak düzeltmesi gerekecek

Hata mesajını almanızın nedeni budur ! [rejected] master -> master (non-fast-forward), eğer son değişikliğinizi kimsenin çekmediğini biliyorsanız, bunu yapabilirsiniz git push --force, bu genel repodaki git geçmişini değiştirecektir . Aksi takdirde ... performans gösterebilirsin git pull, ama bunun senin geçmediğin sonuçla aynı olacağına inanıyorumgit commit --amend , yeni bir taahhüt oluşturacak (yani: git pull'ten sonra git geçmişi: A-> B-> C-> D )

daha fazla ayrıntı için: Son taahhüdünüzü değiştirme


2

Başka bir seçenek: şubenizi yerel olarak yeni bir şeye yeniden adlandırın.

Daha sonra, örneğin bir kopyasını (yedeğini) saklama ve hiçbir şeyin kaybolmadığından emin olma yöntemini uzak depoya gönderebileceksiniz.

Yerel bir kopyaya sahip olmak için uzak dalı getirebilir ve (i) uzaktan kumandanın sahip olduğu (eski dal adıyla) ve (ii) sahip olduğunuz (yeni dal adıyla) arasındaki farkları inceleyebilir ve ne yapacağınıza karar verebilirsiniz. . Uzaktan kumandanın ilk etaptaki farklılıklarının farkında olmadığınızdan (dolayısıyla sorun), bir yerde değişiklikleri birleştirmek veya zorlamak çok acımasızdır.

Farklılıklara bakın, hangi dalda çalışmak istediğinizi seçin, diğer daldan istediğiniz kirazları seçin veya sahip olduğunuz dalda istemediğiniz değişiklikleri geri alın vb.

Ardından, temiz sürümünüzü uzaktan kumandaya zorlamak veya yeni değişiklikler eklemek isteyip istemediğinize karar verecek bir konumda olmalısınız.


1

Push komutu ile ilgili sorun, yerel ve uzak deponuzun eşleşmemesidir. Git hub'dan yeni depo oluştururken benioku varsayılan olarak başlatırsanız, ana dal otomatik olarak oluşturulur. Ancak, itmeye çalıştığınızda bunun bir dalı yoktur. itemezsiniz ... Yani, en iyi uygulama varsayılan benioku başlatma olmadan repo oluşturmaktır.


1

Bu sorun genellikle bir kesinleştirme olarak sayılan, sistemde yerel olarak eşitlenmeyen ve kafanın arkasında bulunmayan bir readme.md dosyası oluşturulmasından kaynaklanır, bu nedenle bir git çekme isteği gösterir. Benioku dosyasından kaçınmayı ve sonra taahhütte bulunmayı deneyebilirsiniz. Benim durumumda çalıştı.


0

Bu sorunun başka bir nedeni (görünüşe göre çok yaygın değil) ...

Sunucum ~ 12 saat gerideydi

NTP sunucusunda saatimi NTP yapılandırdım.

Bu yazıda tartışılan hatayı yönlendiren yeni bir git push gerçekleştirdim.


0

Herhangi bir şans eseri git pullyazdırılırsa Already up-to-date, global git push.defaultparametresini (In ~/.gitconfig) kontrol etmek isteyebilirsiniz . İçinde simpleise olarak ayarlayınmatching . Aşağıdaki cevap nedenini açıklamaktadır:

Git - push.default "eşleme" ve "basit" arasındaki fark nedir

Ayrıca, yerel şubenizin tarihi geçmiş olup olmadığını kontrol etmeye değer git remote show originve gerekirse bir çekme işlemi yapın


0

kullanın git pull https://github.com/username/repository Bunun nedeni Github ve uzak depoların senkronize olmamasıdır. Eğer pullrepo ve sonra Pushher şey senkronize olacak ve hata gider.

'


0

git pull zaten yazdırıyor up-to-date

çözüm:

uzaktan (sunucuda) bir havuz / proje oluşturup oraya bir dosya eklediniz, sonra tekrar yerel ve başlatılmış git'inizde bir Klasör oluşturdunuz git init- bu hata , oluşturmamalısınızgit init yerel olarak , bunun yerine projeyi yerelinize kopyalamalısınız. kullanmagit clone

sonra çek

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.