Git push, "hızlı ileri olmayan" reddedildi


91

gitTakım ortamında kodumuzu yönetmek için şu anda onu kullanmak konusunda oldukça yeniyim . Bazı yeniden ödeme sorunlarım vardı ve bunları kullanarak düzelttim

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

Şimdi değişikliklerimi zorlamak istiyorum ve bu nedenle aşağıdaki komutu çalıştırıyorum

$ git push origin feature/my_feature_branch

bana şu hatayı veriyor:

To ssh://git@coderepo.com:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://git@coderepo.com:7999/repo/myproject.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.

Hatadan kurtulmak için ne yapabilirim?

Not: Bu --forceseçeneği olabildiğince kullanmaktan kaçınıyorum .


Yanıtlar:


79

Görünüşe göre birisi son işleminiz git fetchile git push. Bu durumda, adımlarınızı tekrarlamanız ve my_feature_branchbir kez daha yeniden oluşturmanız gerekir.

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

Sonrasında git fetchdurumu ile incelemenizi tavsiye ederim gitk --all.


1
Git pull origin master: master'ı etkinleştirmek için ne yapılmalı, hangisinin varsayılan olarak birleştirilmesi gerekir. Bu bir birleştirme çatışması mı değil mi? Sorulan tek soru bu.
mathtick

25

Muhtemelen uzaktan değişiklikleri geri ödemeden önce getirmediniz veya birisi yeni değişiklikleri zorladı (siz yeniden ödeme yaparken ve zorlamaya çalışırken). Şu adımları deneyin:

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp

Bu benim sorunumu çözüyor: Kodumu işlediğimde, bir geri ödeme yaptım (çok geç, zaten değişiklikler vardı, bunu commit etmeden önce yapmalıyım). Sonra çatışma olmasa bile zorlayamadım. Yukarıdaki sihri uyguladıktan sonra işe yaradı. Teşekkürler.
Jing Li

19

Bu sorunu yaşadım! Denedim: git fetch + git merge, ama çözülmedi! Denedim: git çekme ve ayrıca çözülmedi

Sonra bunu denedim ve sorunumu çözdüm (Mühendisin cevabına benzer):

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

8
Bu beni mahvetti, işleri doğrudan ustalaşmaya ittim ve bütün bir gün boyunca konuşlandırmayı zorladım ... ve herkes sinirlendi .... MUHTEŞEM İPUÇLARI!
Mike Q

6
Muhtemelen birine tehlikeli bir alet vermeden önce ne yaptığınızı özet olarak açıklamak istersiniz.
Mirv - Matt

10

Benzer bir sorun yaşadım ve şu şekilde çözdüm: git pull origin


1
Uzak bir dalı çekerken söz konusu hatayı aldığımda bana yardımcı oldu.
GChuf

8

Partiye geç kaldım ancak github yardım sayfasında bazı yararlı talimatlar buldum ve bunları burada paylaşmak istedim.

Bazen Git, taahhütleri kaybetmeden uzak bir depoda değişiklik yapamaz. Bu olduğunda, itişiniz reddedilir.

Sizinle aynı şubeye başka bir kişi gönderdiyse, Git değişikliklerinizi zorlayamaz:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Uzak dalda yaptığınız değişiklikleri yerel olarak yaptığınız değişikliklerle getirip birleştirerek bu sorunu çözebilirsiniz:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

Veya git pullher iki komutu aynı anda gerçekleştirmek için kullanabilirsiniz :

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work

4

bu komutu dene

$ git push -f -u origin <name of branch>

yani $ git push -f -u origin master


Diğerleri yapmadığında bu benim durumum için çalıştı. Bazen sadece git -f -u
gcr

1

Paylaşılan yerel depoya yazma kilidi

Bu sorunu yaşadım ve yukarıdakilerin hiçbiri bana yardımcı olmadı. Her şeyi doğru bir şekilde getirebildim. Ama itme her zaman başarısız oldu. Windows dizininde bulunan ve VMWare paylaşımlı klasör sürücüsü aracılığıyla onunla çalışan birkaç istemcinin bulunduğu yerel bir havuzdu. Görünüşe göre sistemlerden biri Git deposunu yazmak için kilitledi. Kilitlenmeye neden olan ilgili VMWare sistemini durdurduktan sonra her şey anında onarıldı. Hangi sistemin hataya neden olduğunu anlamak neredeyse imkansızdı, bu yüzden başarılı olana kadar onları tek tek durdurmak zorunda kaldım.


1

Buradaki tavsiyeleri kullandım ve yerel kodumu doğrudan ustalaşmak için birleştirdiği için beni mahvetti. ... öyleyse hepsini biraz tuzla alın. İş arkadaşım, aşağıdaki hususların sorunu çözmeye yardımcı olduğunu ve şubemi yeniden görevlendirmek için gerekli olduğunu söyledi.

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch

0

Eclipse'de şunları yapın:

GIT Depoları> Uzaktan Kumandalar> Kaynak> Sağ tıklayın ve getir deyin

GIT Depoları> Uzaktan İzleme> Şubenizi seçin ve birleştir deyin

Projeye gidin, dosyanıza sağ tıklayın ve Yukarı akıştan getir deyin.


0
  1. kodu yeni bir şubeye taşı - git branch -b tmp_branchyouantmergedin
  2. birleştirmek istediğiniz şubeyi değiştirin - git checkout mycoolbranch
  3. birleştirmek istediğiniz şubeyi sıfırlayın - git branch reset --hard HEAD
  4. tmp dalını istenen dalda birleştirin - git dal birleştirme tmp_branchyouantmergedin
  5. menşe itmek

0

İşte bu sorunu çözmek için başka bir çözüm

>git pull
>git commit -m "any meaning full message"
>git push

-1
  1. Yerel gerçekleştirmeyi geri alın. Bu, yalnızca kaydı geri alır ve çalışma kopyasındaki değişiklikleri korur
git reset --soft HEAD~1
  1. En son değişiklikleri alın
git pull
  1. Artık değişikliklerinizi en son kodun üzerine uygulayabilirsiniz
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.