reddedilen master -> master (hızlı ileri sarma)


218

Projemi zorlamaya çalışıyorum (tüm dosyalar yeni bir depoda). Adımları takip ediyorum ama ittiğimde git push -u origin masterşu hatayı alıyorum:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.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.

Bu hatayı birçok kez aldım ve ne yapacağımı anlayamıyorum.


4
Yerel yöneticinizin uzaktan kumandada istediğiniz en son değişikliklere sahip olduğundan eminseniz, git push --force
IgorGanapolsky

34
git push --force <remote_repository>benim için çalıştı.
Sıralayıcı

@Sorter - Bütün gün aynı sorunu yaşıyorum, bu bana yardımcı oldu! Teşekkür ederim. Ancak, sorunun neden ilk etapta olduğu ve düzeltmenin neden işe yaradığına dair bir açıklama sağlamaz.
Padawan

1
@pmr, sadece saygısız bir şekilde OP "hata mesajını oku" nın hiç yardımcı olmadığını soruyor. Açıkçası, hata mesajı, bana veya herhangi bir mesaj vermediği gibi OP'ye bir anlam ifade etmiyordu veya görevini iptal eden diğer 66 kişi. Snarky, ama daha zekice insanlara hiç yardım etmeyin.
Padawan

3
@Padawan Bu "sinsi, düşüncesizden daha zeki kişi" nin bu soru için kabul edilen yanıtı sağladığını ve 72 kişinin (muhtemelen siz de dahil) bunu yararlı bulduğunu göreceksiniz. Yorumumun kibirli olduğu için özür dilerim, ama bana bu soruyu profesyonel bir bağlamda da sorsaydınız ilk sorum olurdu. Bazen durup hata mesajını dikkatlice okumak için bir dakikanızı ayırmak bazen harikalar yaratır. Bu hatayı ilk gördüğümde benim için yaptım.
pmr

Yanıtlar:


160

Hata mesajının söylediği gibi: git pulldenemeden önce git push. Görünüşe göre yerel şubeniz izleme şubenizle senkronize değil.

Proje kurallarına ve iş akışınıza bağlı olarak da kullanmak isteyebilirsiniz git pull --rebase.


1
bana bu otomatik birleştirme README.md gösterir Otomatik birleştirme başarısız; anlaşmazlıkları düzeltin ve sonucu kesin.
Asantoya17

1
@ Asantoya17 Uzak ana sistemde yapılan değişiklikler, değişikliklerinizle çakışıyor. Dosyayı inceleyin ve inceleyin. Sonra çözüm sonuçlarını taahhüt edin. Lütfen bir eğitim veya kitap alın veya en azından mesajları okuyun.
pmr

1
Çekme ne demektir? Bir dosyayı aktarmanıza veya deponun web sitesinden bir dosyayı almanıza ve indirmenize olanak tanır? (örn. Bit Kovası)
David Dimalanta

4
@AndrewS git push --force origin master. Hayatınızda bu tür sorunlarla birden fazla karşılaşırsanız, proje iş akışınız bozulur. Özellikler dallarda geliştirilmeli ve hızlı iletme olmadan birleştirilmelidir ve bir özellik "başarısız olursa" birleştirme taahhüdünü geri almalısınız (tercihen bir özelliği master ile birleştirmeden önce testinizi bir entegrasyon dalında yapmalısınız). Eclipse hakkında bir fikrim yok.
pmr

1
Bu hata tarafından bildirilirse ne yapmalı git pull origin trunk:master?
Andry

175

DİKKAT: Bu asla git'in önerilen bir kullanımı değildir. Bu, uzaktan kumandadaki değişikliklerin üzerine yazacaktır. Bunu yalnızca yerel değişikliklerin uzak ana sunucuya aktarılması gerektiğini% 100 biliyorsanız biliyorsunuz.

Bunu dene: git push -f origin master


47
Hayır, bunu deneme. Kimden git help push: "Bu, uzak deponun işlemlerini kaybetmesine neden olabilir; dikkatli kullanın."
jcsahnwaldt Reinstate Monica

7
kesinlikle bunu yapma
Lluís

14
bu benim için çalıştı. Ben github benim tek taahhüt yeni bir repo ile oluşturulan oldu çünkü Tamam olduğunu düşündüm. Muhtemelen bir proje başladıktan sonra kullanmamak iyi bir fikirdir.
Matthew Moore

1
teslimat amacıyla oluşturulmuş bir
repo'yu

Bunu sadece bir taahhütte bulundum, GitHub ile senkronize edildiğim için kullandım, sonra bu taahhüde başka bir dosya eklememi diledim. Bu yüzden yerel olarak çözdüm, GitHub'dan temizlemek için yukarıdaki komutu uyguladım, sonra tekrar yerel olarak işledim, sonra senkronize ettim. Şimdi her şey yolunda! Dikkat edin, o branşta başka hiçbir taahhütte bulunulmadığını biliyordum.
zeMinimalist

18

bu komut benim için iyi çalıştı

git push -f origin master

3
Bu komutu kullanmadan önce dikkatli olun. Bu komutu kullanarak geçmiş taahhütlerinizin tümünü kaybedeceksiniz.
twenk11k

-f ortalama kuvvet itme yapar
maheshmnj

@maheshmnj Evet!
test kullanıcısı

15

Bu hatayı yeni aldım.

Yerel git depomu oluşturduktan sonra bir github deposu oluşturdum, bu yüzden github'a geçmeden önce yereldeki değişiklikleri kabul etmeliydim. Bu durumda tek değişiklik, github deposu oluşturulurken isteğe bağlı adım olarak oluşturulan benioku dosyasıydı.

git pull https://github.com/*username*/*repository*.git master

havuz URL'sini buradan github sayfasında bulabilirsiniz:

resim açıklamasını buraya girin

Daha sonra yeniden başlattım (buna gerek olmayabilir)

git init
git add .
git commit -m "update"

Sonra:

git push

3
Bu cevap asıl vaka senaryosunu yansıtmaktadır.
kta

9

Ben github yeni repo yaratmıştı ve aynı sorunu vardı, ama aynı zamanda çekerken de sorun vardı, bu yüzden bu benim için çalıştı.

ancak bu zaten çok sayıda koda sahip olan depolarda tavsiye edilmez, çünkü bu her şeyi bozabilir

git push origin master --force

Bu cevap zaten verilmiştir: stackoverflow.com/a/16374574/1771479 ve yapmanız önerilmez.
agold

9

UYARI:

' git pull' İçin gitmek HER ZAMAN bir çözüm değildir , bu yüzden dikkatli olun. Depo geçmişinizi bilerek değiştirdiyseniz bu sorunla (Q'da belirtilen sorun) karşılaşabilirsiniz. Bu durumda git, geçmiş değişikliklerinizi uzak deponuzdaki yeni değişikliklerle karıştırıyor. Bu yüzden, a'ya gitmelisiniz git push --force, çünkü çağrı git pullyapmak, geçmişinizde yaptığınız tüm değişiklikleri kasıtlı olarak geri alacaktır.


8

Eğer git pullyardımcı olmazsa, muhtemelen değişikliklerinizi ittiniz (A) ve bundan sonra git commit --amendbazı değişiklikler eklemek için kullanmışsınızdır (B). Bu nedenle git, geçmişi kaybedebileceğinizi düşünüyor - A'nın tüm değişikliklerini içermesine rağmen B'yi farklı bir taahhüt olarak yorumluyor.

             B
            /
        ---X---A

Kimse Adaha sonra repoyu değiştirmezse, yapabilirsin git push --force.

Ancak, Abaşka bir kişiden sonra değişiklik olursa :

             B
            /
        ---X---A---C

o zaman kişilerin ( -> ) olarak değiştiğini Ayeniden adlandırmalısınız .BCD

             B---D
            /
        ---X---A---C

veya sorunu manuel olarak düzeltin. Bunu nasıl yapacağımı henüz düşünmedim.


7

bu komutu kullanın:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

sevmek:

git pull --allow-unrelated-histories origin master

bu hata, projelerde ortak bir ata olmadığında oluşur.


7
git push -f origin master

brute force ;-) kullanın Büyük olasılıkla git üzerinde repo oluşturmadan önce oluşturduğunuz yerel bir klasör eklemeye çalışıyorsunuz.


2
Bunu içeren her cevap bir uyarı vermelidir.
D. Ben Knoble

1
Bunu denedim ve bana GitHub'da repo'nun başka bir yerel klonundan geri yüklemek zorunda kaldığım bir sürü taahhüde mal oldu. Tehlikeli.
Paflow

6

Çünkü ustanızda bazı değişiklikler yaptınız, böylece proje önce sizden çekmenizi istiyor. Yine de itmek istiyorsanız, şunu yazarak kaba kuvvet kullanabilirsiniz:

git push -f origin master

Önce değişikliklerinizi yapmayı unutmayın:

git add .
git commit -m "Your commit message"


4

Yapman lazım

git branch

çıktı şöyle bir şeyse:

* (no branch)
master

o zaman yap

git checkout master

Bekleyen taahhütlerinizin olmadığından emin olun çünkü check-out taahhütlü olmayan tüm değişiklikleri kaybeder.


4

! [reddedildi] ana -> ana (hızlı ileri sarma)

Panik yapma, bunu düzeltmek son derece kolaydır. Tek yapmanız gereken bir çekme işlemi yapmak ve şubeniz hızlı ileri:

$ git pull myrepo yöneticisi

Sonra itmeyi tekrar dene ve her şey iyi olmalı:

$ git push github yöneticisi


4

Bu geliştirme dalında olduğum zaman oldu ve ana dalım en son güncelleme ile değil.

Bu yüzden geliştirme dalından itmeye gitmeye çalıştığımda bu hatayla karşılaştım.

Ben ana dalı, git pull, sonra şube ve git push geliştirmek için geri dönerek düzeltti.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

Bu problemi bir geliştirme makinesinde yaşadım. devŞube cezası bastırıyor ama master(ederken dal bana verdi git pusholmanın zaman ing devdalı):

! [rejected]        master -> master (non-fast-forward)

Bu yüzden denedim:

git checkout master
git pull

Hangi bana verdi:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Ana dalın eksik olduğunu öğrendim .git/configve ekledim:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Daha sonra git pushda devşube üzerinde iyi çalıştı .


2

Uzaktan kumandam yerel ile senkronize değildi, bu yüzden bu benim için çalıştı

git pull --rebase

ve git pulltekrar yaptığınızda "Zaten güncel" yazdığından emin olun ve şimdi başlangıç ​​noktasına geçmeye hazırsınız

zaten var olduğunu varsayarsak git remote add origin remote repository URL

yapmak

`git push origin master`  

Ekran Görüntüsü her şeyi söylüyor resim açıklamasını buraya girin

Alternatif olarak bunu yapabilirsiniz

  1. git stash (sıralanmamış işleri geçici olarak saklar)
  2. git pull (yerel ve uzaktan kumandanızı senkronize edin)
  3. git stash pop (sıra dışı değişiklikleri geri al)
  4. git push

1

Sorunla aynıydım. Git Totoise kullanıyorum. Sadece sağ tıklayın -> TotoiseGit -> Temizle. Şimdi Github'a itebilirsin Benimle iyi çalıştı: D


1

Bunun nedeni, efendisinde çakışan değişiklikler yapmış olmanızdır. Havuz sunucunuz size bu kelimelerle bunu söyleyemez, bu yüzden bu hatayı verir, çünkü bu sizin için bu çatışmalarla başa çıkma meselesi değildir, bu yüzden sizden tek başına yapmanızı ister. Gibi ?

1- git pull Bu, kodunuzu deponuzdan site yöneticinizin koduyla birleştirir. Böylece çatışmalar gösterilir.

2- bu el ile geçen ihtilafların ele alınması.

3-

git push origin master

Ve presto, sorununuz çözüldü.


0

Sadece bu sorunu çözmek mümkün yerel ve git repo silmek ve her iki ucunda da aynı oluşturmak oldu. Şimdilik iyi çalışıyor.


Git kutumun yedeklemesini her zaman Dropbox'ta saklıyorum. Bu şekilde yerel repoyu silmek zorunda değilim, sadece durum ortaya çıktığında ilgili dizinleri Dropbox'tan kopyalayıp yapıştırıyorum.
IgorGanapolsky

0

Herkes heroku'ya itmeye çalışırken bu hatayı alırsa, o zaman 'origin' yerine 'heroku' yazın: git push -f heroku master



0

Bu, Repo'ya ad verilirken oluşan bazı ad hatalarından da kaynaklanabilir. Yukarıdaki cevaplardan herhangi biri işe yaramadıysa, bu benim için çalıştı:

Bu repoyu silin ve yeni bir tane oluşturun ve aşağıdaki komutları tekrar deneyin:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

başlangıç ​​kaynağı gösterileri zaten varsa bunu kullanın:

git remote set-url origin *your_git_name.git*
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.