SORU
24 NİSAN 2011, Pazar


Nasıl master/kökenli müstakil KAFA uzlaştırmak miyim?

Git dallanma karmaşıklığı yeniyim. Ben her zaman tek bir dal üzerinde çalışmak ve değişiklikleri uygulamak ve düzenli olarak uzak, benim kökeni itin.

Bir yerlerde son zamanlarda, bazı dosyaların bir reset hazırlama tamamlama çıkmak için yaptım, ve daha sonra bir rebase -i bir çift son yerel tamamlar kurtulmak için yaptı. Şimdi anlayamadığım bir durumdayım.

Çalışma alanım tam olarak ne beklediğiniz gösterir gitmiş istemedim tamamlar ve yeni olanlar var, vs ile doğru iz üstündeyim.

Ama ben sadece uzaktan depoyu itti, ve var olan bir kaç değişik. ne rebase itildi şehit olurum taahhüt ve yenilerini yerel olarak kararlı değil.

"KAFASI kopuk, ama komut satırı araçları ile görselleştirmek için nasıl, ve nasıl düzeltebilirim. 100% bu ne demek, anlamış değilim "master/kökeni bence

CEVAP
24 NİSAN 2011, Pazar


İlk olarak, müstakil olduğunda ne anlama geldiğini KAFASI olduğunu açıklamaya bakalım.

KAFASI işlemek dışında şu anda kontrol için sembolik ismi. KAFASI kopuk değilken (“normal”1durum: şube teslim), BAŞ aslında bir şube “” ve şube noktaları işlemek için. hakeme puan KAFASININ içinde böyle bir şube. bir bağlı. Yeni bir taahhüt yaptığınızda, işaret KAFASI bu şube yeni işlemeye noktası için güncellendi. KAFA sadece bu şube için puan beri otomatik olarak takip eder.

  • git symbolic-ref HEAD refs/heads/master verir
    Dalı “master” olarak denetlenir. adlı
  • git rev-parse refs/heads/master verim 17a02998078923f2d62811326d130de991d1a95a
    Ya da “” ana dalın. başıyla ucu taahhüt
  • git rev-parse HEAD 17a02998078923f2d62811326d130de991d1a95a verir
    Bu bir olmanın ne anlama geldiğini “sembolik ref”. Başka bir referans ile bir nesneyi işaret ediyor.
    (Sembolik hakem aslında sembolik bağlantılar olarak uygulanan, ama daha sonra sembolik olmayan platformlarda kullanılabilir, böylece ekstra yorumu ile düz dosyalar değiştirildi.)

13* → refs/heads/master17a02998078923f2d62811326d130de991d1a95a *var

KAFASI kopuk olduğunda, doğrudan veya dolaylı olarak bir şube ile bir işaret tamamlama yerine bir işaret. Adı açıklanmayan bir şube olarak ayrılmış bir KAFA düşünebilirsiniz.

  • git symbolic-ref HEAD fatal: ref HEAD is not a symbolic ref ile başarısız olur
  • git rev-parse HEAD 17a02998078923f2d62811326d130de991d1a95a verir
    Sembolik bir hakem olmadığı için, doğrudan adamaya noktası olmalı.

* → 17a02998078923f2d62811326d130de991d1a95a *20 var

Önemli olan hatırlamak ile bir müstakil BAŞI eğer commit işaret etmektir aksi halde başvurulmayan (başka ref ulaşabilir BT), sonra dönecek “sarkan” ne zaman ödeme başka bir taahhüt. Sonunda, bu sarkan işleyen çöp toplama işlemi (varsayılan olarak, en az 2 hafta boyunca tutulur ve daha uzun KAFASI reflog tarafından başvurulan tarafından tutulması) ile budanmış olacak.

1 Gayet iyi “müstakil bir KAFA ile balık reflog dışında tarih bırakılan zorunda kalmamak için ne yaptığını izlemek için.” normal yapmak çok önemlidir


İnteraktif rebase Ara adımları müstakil bir KAFA (kısmen aktif şubenin reflog kirletici önlemek için) ile yapılır. Eğer tam rebase işlemi tamamlamak rebase işlemi toplu sonuç ile orijinal şube güncelleme ve özgün Şube BAŞKANI yeniden bağlayın. Benim tahminim asla tam rebase işlemi tamamlandı, bu en son rebase işlemi tarafından işlendiği müstakil bir KAFA işlemeye işaret bırakacaktır.

Durumu kurtarmak için, müstakil kafana göre şu anda işaret tamamlama işaret eden bir şube oluşturmak gerekir:

git branch temp
git checkout temp

(bu iki komut* *23) olarak yazılabilir.

Bu temp yeni şube için BAŞINI bağlayın.

Sonra, üzerinde çalışmak için beklenen normal şube ile (ve tarihi) mevcut taahhüt karşılaştırmak gerekir:

git log --graph --decorate --pretty=oneline --abbrev-commit master origin/master temp
git diff master temp
git diff origin/master temp

(Muhtemelen günlük seçenekler ile deneme yapmak isteyeceksiniz: -p bırakın --pretty=… bütün günlük mesaj vb. görmek ekleyin)

Eğer temp yeni şube iyi görünüyorsa (örneğin) master üzerine güncellemek isteyebilirsiniz:

git branch -f master temp
git checkout master

(bu iki komut git checkout -B master temp olarak yazılabilir.)

Sonra geçici şube silebilirsiniz:

git branch -d temp

Son olarak, muhtemelen yeniden tarih itmek isteyeceksiniz:

git push origin master

Sana çok ihtiyacımız kullanın. --force bas eğer uzak bir şube olamaz “fast-forward” yeni tamamlama (yani düşürdün, ya da yeniden yazdı varolan bazı işlemek, ya da aksi takdirde yeniden bazı bit tarihi).

Eğer rebase bir işlemin ortasında olsaydı muhtemelen onu temizlemek gerekir. Bir rebase işlemi olup dizin .git/rebase-merge/ bakarak kontrol edebilirsiniz. El ile sadece dizin (eğer artık aktif rebase operasyonun amacı ve bağlamı hatırlar gibi) silerek devam eden rebase temizleyebilirsin. Genellikle kullanırsınız git rebase --abort ama bu fazladan sıfırlama, muhtemelen önlemek istiyorsanız (hareket BAŞ, özgün şube ve sıfırlar geri orijinal taahhüt edecek geri bazı çalışmaları yaptık yukarıda).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011