2012-09-19 27 views
11

Gerrit'i ve sürecini kullanmayı öğrenmeye çalışıyor. Aynı dalda başka bir şeye Gerrit'teki gözden geçirme sorunlarını nasıl değiştirebiliriz?

  • Çalışma geliştirmek ve HEAD için incelenmek üzere gerrit için change2 itmek ref// için: ref/için/geliştirmek

    1. itin ilk change1 BAŞ gözden geçirilmesi için gerrit nereye Adımlar yaptım

    Her iki hareketin kaydedilmesini

  • Ben change1 için sorunu gidermek için bu yüzden

    istemedin Şimdi Değişim-ID hatları

    gerrit var 63.210

    git checkout -b change1 <change 1's commit id> 
    

    benim değişiklikler yapıldı ve ben

    git push origin HEAD:refs/for/develop 
    

    yapmam nasıl

    ! [remote rejected] HEAD -> refs/for/develop (squash commits first) 
    error: failed to push some refs to 'ssh://[email protected]:29418/CommunicationsLibrary' 
    

    olsun Şimdi zaman

    git add . 
    git commit 
    

    (işlemek mesaja Değişim-ID ekleme) işlenen Yığılmış incelemelerde sorunları gideririm ve başka bir inceleme oluşturmaya gerek kalmadan gerriti yayınladım mı?

    +0

    Eğer Gerrit itildi 2 değişiklik, bir bağımlılık olarak itilmiş 1 şey var mı? – xshoppyx

    +0

    Evet, bağımlılık olarak 1 değişiklik var –

    +0

    Bugün bunu denemek için zamanım olmadı - yarınlar için yarın deneyecekler için teşekkürler - bunu unutmamış :-) –

    cevap

    15

    Gerrit'te (yani, aynı anda incelenmekte olan daha önceki bir değişikliğe bağlı olan incelemede bir değişiklik) bağımlı incelemeleriniz olduğunda ve daha önceki değişikliklerde değişiklikler yapmanız gerektiğinde, her ikisini de yeniden göndermeniz gerekir.

    o master 
    \ 
    o Commit A (in review, requires change) 
    o Commit B (in review, no changes required) 
    

    : değişiklikler

    Yani durum böyle, ana gelişme dalı kapalı tek dalda iki hareketin olması (ikinci değişiklik farklı bir "ebeveyn" bağımlı hale beri taahhüt) Bu durumda genel olarak yaptığım şey, üçüncü bir taahhütte A'nın talep ettiği değişiklikleri yapmaktır.

    Şimdi
    o master 
    \ 
    o Commit A (in review, requires change) 
    o Commit B (in review, no changes required) 
    o Commit C (modifications to Commit A) 
    

    ben git rebase -i master yapmak ve sonra gelip A Teslim ama daha önce B Commit C Teslim yeniden sıralamak ve sonra şimdi şuna benzer grafik işlemek A. Teslim içine onu ezmek:

    Bizim taahhüt grafik şimdi şöyle
    o master 
    \ 
    o Commit A' (Commit A, incorporating the changes from Commit C) 
    o Commit B' (the same changes made in Commit B, but applied to Commit A' instead of A) 
    

    Son olarak, git review (ya da her ne gerrit değişiklikleri göndermek için kullanmak komutu) hem Gerrit taahhüt yeniden göndermek için.

    Bunun gibi birçok komplikasyonun nedeni, çoğu insanın ayrı bir daldaki her farklı değişiklik üzerinde çalışmayı ve ardından Gerrit'e teslim etmeden önce tek bir taahhütte yer almasını şiddetle tavsiye etmektir. bağımlı değişiklikler aynı anda gözden geçirilir.

    +0

    Teşekkürler - mükemmel çalıştı –

    +4

    Bir güncelleme, bir yıl sonra: Yukarıda özetlediğim prosedür yerine, şimdi sadece tek bir 'git rebase -i master' yapıp, Commit A komutunun" edit "(Komut B komutu için" pick "olarak bırak) komutunu ayarlayın.Bu, çalışma kopyanızda A işlemini yaparak rebasing modunda sizi bırakacaktır. Daha sonra A işlemini 'git commit --amend' kullanarak yapabilirsiniz. A işlemini değiştirmeyi tamamladıktan sonra, reb rebase --continue' yazabilirsiniz ve B işlemini tekrar uygulayacaksınız ve işiniz bitti. –

    +0

    Git rebase -i master'dan önce ne yaparsınız? Bunu soruyorum çünkü bence en yeni bağımlı yama kümesini (örneğin, gözden geçirme -d ), düzeltmek istediğinizi değil. Aksi takdirde, sadece Taahhüt A'yı alacak ve rebase'de A ve Commit B'yi kabul etmeyeceksiniz. – Fl0R1D3R

    2

    Sanırım probleminiz, 1. Taahhütte yapılan değişikliğin şimdi bir bağımlılık olarak ikinci taahhüdün bulunması gerçeğiyle ilgilidir. Şahsen böyle yapardım ama daha iyi bir yol olabilir. Yaptığın işlerin şeklini yeniden inşa etmek istediğin gibi bakıyorum ve son 3 ile uğraşıyorsun. O zaman git git rebase -i HEAD ~ 3 '. Bu, siparişi değiştirerek veya birbirine karıştırarak son 3 teslimi yeniden elde etmenizi sağlar.İşlemleri en eski ilk sırada listelediğini bilmelisiniz. İşte bir örnek:

    bilgi taahhüt: şu şekildedir:

    git günlüğü olduğunu ......

    mesajı: foo2

    bilgi taahhüt: ......

    mesajı: bar1

    taahhüt bilgi: ......

    mesajı: foo1

    Yukarıdaki komutu çalıştırdıktan sonra bir düzenleyici aşağıdaki dışarı çıkar:

    bahis foo1.

    seçim çubuğu1.

    foo2'yi seçin.

    (Bu ikinci foo değişikliğinizin, değişmemiş olabileceği için herhangi bir değişiklik yapılmadığı varsayılır, aksi halde bu işlemi değiştirmiş olmanız gerekirdi.) Daha sonra listeyi şu şekilde değiştirin:

    düzeltme foo1

    tek işlemek ve bar1 taahhüt aşağıdaki olacak içine foo1 ve foo2 ezilmiş olacak Bundan sonra foo2

    seçim bar1

    seç. Daha sonra 'git reset --soft HEAD ~ 1' komutunu en yeni işlemi sıfırladıktan sonra, ilk inceleme için taahhüt mesajını değiştirmenize ve değişiklik kimliğini eklediğinizden emin olmanıza izin veren 'git commit --amend' komutunu çalıştırdım. . O zaman itmeyi dene. Bundan sonra yeni bir yama oluşturmalısınız ve ikinci değişiklik olan tüm dosyalar değiştirilecek ve hala çalışma dizininizde olacak. senin 2 değişim için yerine arama

    commit --ammend 
    

    +0

    Cevabınız için teşekkür ederiz - Trevor'ı kabul ettim çünkü ilk defa –

    +1

    Hayır, endişelerim kabul edilip edilmediğimi umursamıyorum. Sadece sana yardım ettiğine sevindim :) – xshoppyx

    0

    -2

    Ben

    1. git rebase -i usta
      o
    2. ardından son işe yaramadı vermedi bu girişimleri ile çalıştı Ne yaptım, dosyaların yedeğini aldım. Tüm proje silindi. sonra tekrar klonladı. Gerekli klasördeki dosyaları yedeklemeden yapıştırın ve ardından tekrar deneyin ve ardından itin. İşe yaradı .
    0

    sadece taahhüt Git --amend sonra git yorumu

    İlgili konular