Niyə git gitmiş -m variantının şikayətini qaytarır?

Beləliklə, mən digər insanlar ilə bir layihə üzərində işləyirəm və orada bir neçə fiş var. Biri problemi düzəldərdi və mən onun çəngəllə birləşdüm, amma daha yaxşı bir həll tapa biləcəyimi başa düşdüm. Mən etdiyim tövsiyəni ləğv etmək istəyirəm. Bunu git revert HEAD etməyə çalışdım, amma bu git revert HEAD verdi:

  ölümcül: Commit <SHA1> birləşmə, lakin heç bir variant verilməmişdir. 

Bu nə deməkdir? Birləşdirildikdə və bunu etdiyimdə, -m variantını istifadə edərək "Birləşmə ilə <username>" istifadə etdim.

Burada səhv nə edirəm?

92
12 мая '11 в 0:34 2011-05-12 00:34 icnhzabot 12 may 2011-ci il saat 11: 00-da başlayacaq
@ 3 cavab

Varsayılan olaraq, git revert imtina etməkdən imtina edir, çünki həqiqətən nə deməkdir birmənalı deyil. HEAD ki, HEAD həqiqətən bir fusion fix edir.

Birləşmə öhdəliyini ləğv etmək istəyirsinizsə, ana birləşmə xətti, yəni geri dönmək istədiyiniz nədirsə, hansı valideyn birləşməni işlətmək istədiyini göstərməlisiniz.

Tez-tez bu ana nömrə olacaq, məsələn, master olsanız və git merge unwanted qaytarmağa qərar unwanted . İlk valideyn əvvəlcədən birləşən master şöbə olacaq və ikinci valideyn unwanted sonu olacaq.

Bu halda, edə bilərsiniz:

 git revert -m 1 HEAD 
103
12 мая '11 в 0:48 2011-05-12 00:48 cavab 12 may 2011-ci ildə Çarlz Bailey tərəfindən 0:48 2011-05-12 00:48

Gəlin başqa bir adam foo üstündə bir panel meydana gətirdiyini söyləyək, amma eyni vaxtda bir baza yaratdıq, sonra birləşərək, hekayə verin

  $ git lola * 2582152 (HEAD, master) Birləşmə şöbəsi 'otherguy' | \   |  * c7256de (digərguy) bar * |  b7e7176 baz | |   * 9968f79 foo 

Qeyd: git lola qeyri-standart, lakin faydalı bir aliasdır.

git revert ilə heç bir kub.

  $ git geri qaytarır ölümcül: Commit 2582152 ... birləşmədir, lakin heç bir variant verilmədi. 

Charles Bailey adi bir şəkildə cavabı verdi. git revert istifadə edərək, git revert

  $ git revert - no-edit -m 1 HEAD [master e900aad] "Birləşdirin şöbəsi" digərini geri al ""  0 fayl dəyişdi, 0 əlavə (+), 0 silinmə (-)  100644 bar rejimini silmək 

bar təsirli bir şəkildə aradan qaldırır və tarixi yaradır

border=0
  $ git lola * e900aad (HEAD, master) "Birləşdirin şöbəsi" digərini geri al "" * 2582152 filialı "digərguy" | \   |  * c7256de (digərguy) bar * |  b7e7176 baz | |   * 9968f79 foo 

Amma birləşməni atmaq istədiyinizi düşünürəm:

  $ git sıfırlama - xard HEAD ^ HEAD indi b7e7176 bazında $ git lola * b7e7176 (HEAD, master) bazası |  * c7256de (digərguy) bar | |   * 9968f79 foo 

git rev-parse təlimatında təsvir edildiyi kimi

<rev>^ , məsələn. HEAD ^, v1.5.1^0
Yenidən baxma parametresinin sona çatması bu törətdiyi obyektin ilk valideynidir. ^<n> , nth ana elementi deməkdir (yəni, <rev>^ <rev>^1 bərabərdir). Xüsusi qayda olaraq, <rev>^0 özünü tövsiyə edir və <rev> əməl obyektinə aid olan tag obyektinin adı olduğunda istifadə olunur.

Buna görə, git reset əvvəl HEAD^ (və ya HEAD^1 ) b7e7176 idi və HEAD^2 c7256de, yəni birləşmənin birinci və ikinci valideynləri idi.

git reset --hard ilə diqqətli olun, çünki işi məhv edə bilər.

34
12 мая '11 в 1:20 2011-05-12 01:20 Cavab Greg Bekon 12 May 'da 11: 20' də verildi 2011-05-12 01:20

Mən bu problemi həll etdim, həll fiksasiya cədvəlinə baxmaq (gitk istifadə edərək) və mənə nə oldu:

 * commit I want to cherry-pick (x) |\ | * branch I want to cherry-pick to (y) * | |/ * common parent (x) 

İndi mən nə etmək istədiyimi başa düşürəm.

 git cherry-pick -m 2 mycommitsha 

Bu səbəbdən, -m 1 ümumi bir valideyn əsasında birləşəcək, çünki -m 2 y filialının əsasında birləşir, yəni albalı seçin.

3
24 окт. Cavab verilir shmish111 24 oct . 2014-10-24 15:56 '14 saat 15:56 2014-10-24 15:56

tags və ya bir sual