SORU
14 NİSAN 2011, PERŞEMBE


Git olmayan ileri reddetti

Bu soru birçok kez soruldu ama çözüm genellikle "dizin ve taze bir ödeme ile işim re-mi sildim." gibi hissediyorum Bir commit ve push yaptım ama mesaj commit yanlış bilet numarası belirtilen fark etti. Bu KADAR solution hızlıca bir baktım ve terminal içine aşağıdaki komutu yazıp sona erdi:

$ git reset --soft HEAD^
$ git commit -m "... correct message ..."

Tek sorun, aşağıdaki hata iletisini alıyorum

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

Şube geliştirmek üzerine gıt-akış modeli ve ben işçi kullanıyorum. Nasıl git mutlu dön şeyleri tekrar birleştirebilir miyim?

CEVAP
14 NİSAN 2011, PERŞEMBE


Eğer itme işlemek için sunucu ve sonra yeniden taahhüt olarak ile git reset, git rebase, git filter-branch, ya da başka bir tarih manipülasyon) ve sonra itti yeniden işlemek için sunucu, olur berbat bir başkası kim vardı çekti. Burada örnek; Bir taahhüt var, ve sunucuya itti.

-*-*-A <-- master

-*-*-A <-- origin/master

Şimdi, size söz, Bir sıfırlama yeniden yazmaya karar ve yeniden yapılıyor. Bu sonunda erişilebilir değil gibi çöp toplanacak olan sarkan tamamlama, bir Bir, bırakır unutmayın.

-*-*-A
    \
     A' <-- master

-*-*-A  <-- origin/master

Eğer bir başkası, diyelim ki Fred, bunu yaparken aşağı sunucudan master tehlikeli çalışmaya başlayacak olabilecek Bir başvuru olacaktır:

-*-*-A' <-- master

-*-*-A  <-- origin/master

-*-*-A-B <-- fred/master

Şimdi eğer senin olmayan ileri bir yaratacak origin/master, için, bugüne kadar olmazdı. itmek mümkün olsaydı Eğer öyleyse Fred tekrar çekmek ise, aniden birleştirmek zorunda, yeniden getirecek Bir taahhüt:

-*-*-A' <-- master

-*-*-A  <-- origin/master

-*-*-A-B-\ 
    \     * <-- fred/master
     A'--/

Eğer Fred bu haber olursa, o zaman yine yeniden görünmesini önlemek için Bir taahhüt olan bir rebase, o olabilir. Ama öyle yapmak zorunda kalırdı fark bu, ve unutmayın bu işlem için; ve eğer birden fazla kişi kim çekti Bir aşağı, hepsi için rebase önlemek için almak ekstra Bir taahhüt ağaç.

Bu yüzden, genellikle diğer insanlardan çekin bir repo tarih değiştirmek için iyi bir fikir değil. Eğer, ancak, biliyor musun hiç kimse çekerek bu repo (örneğin, kendi özel repo, ya da sadece başka bir geliştirici bu proje üstünde çalışıyorsun kim olabilir koordinat ile kolayca), sonra zorla güncelleme ile çalışan:

git push -f

ya

git push origin  master

Bu iradeyi görmezden onay için bir non-hızlı ileri itin ve güncelleme ne sunucu için yeni Bir revizyon, terk edilmiş Bir revizyon çok daha kolay olacak eninde sonunda olacak çöp topladı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009
  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005