Git'teki təkrar birləşmə

Bir problemim vardı: 28s xüsusi bir vəzifə üçün 28s var idi. Çox qısa müddətdə etdiyimi ortaya çıxdı, mən birləşməyi geri qaytarmaq üçün git-bərabər istifadə etdim. Ancaq indi 28s develop üçün birləşmə vaxtı gəldi, lakin birləşmə qrupu orijinal birləşməni görür və xoşbəxtlikdən hər şeyin gözəl olduğunu elan edir və filiallar artıq birləşir. İndi nə etməliyəm? "Geri al" yaradın "28s → inkişaf etdirmək" "törətmək"? Göründüyü kimi, bu, ən yaxşı yolu deyil, ancaq bir anda təsəvvür edə bilmirəm.

Ağacın strukturu nədir?

128
03 июля '09 в 10:15 2009-07-03 10:15 Toms Mikoss 3 iyul '09 saat 10:15 'da 2009-07-03 10:15 ' də soruşdu
@ 5 cavab

"Geri qaytarmaq lazımdır." Necə etdiyinizə bağlı olaraq, bu səsləndiyi kimi asan olmaya bilər. Bu bölmənin rəsmi sənədinə baxın.

 ---o---o---o---M---x---x---W---x---Y / ---A---B-------------------C---D 

imkan verəcəkdir:

 ---o---o---o---M---x---x-------x-------* / / ---A---B-------------------C---D 

Amma hər şey işləyir? Əlbəttə ki Birləşmə qayıdacağınız və tamamilə texniki cəhətdən gedə bilərsiniz.
O, sadəcə "dövlət birləşməsindən" birləşmədən sonra "dövlətə" dəyişiklik olduğunu düşünürdü və bu idi. Heç bir şey çətin deyil, qəribə bir şey yox, həqiqətən təhlükəli bir şey yoxdur. git bunu düşünmədən bunu edəcək.

Belə bir texniki baxımdan, birləşmə qayıtmaqla yanlış bir şey yoxdur, amma iş axınının köşesinden, bu, genelde kaçınmaya çalışmanız lazımdır .

Mümkün olduğu təqdirdə, məsələn, ana ağacın birləşməsinə və birləşməyinə qayıtmayan bir problem taparsanız, çox çalışın :

  • problemi birləşdiyiniz şöbəyə bölün və yalnız onu düzəldin,
  • və ya səbəb olan fərdi fiksasiya qayıtmaq üçün cəhd edin.

Bəli, daha çətindir və heç də həmişə işləməyəcəkdir (bəzən cavab: "Xeyir, həqiqətən də, hazır deyildir və mən bütün birləşməni ləğv etməməliyəm"). Beləliklə, həqiqətən birləşməni geri qaytarmalıyıq, ancaq birləşməni yenidən etmək istəyirsənsə, indi geri qaytarılması ilə bunu etmək lazımdır.

103
03 июля '09 в 10:35 2009-07-03 10:35 cavab J-16 SDiZ tərəfindən 03 iyul '09 saat 10:35 'da verilmişdir 2009-07-03 10:35

Belə bir hekayə olduğunu düşünürəm

 ---o---o---o---M---W---x-------x-------* / ---A---B 

A, B düzəlməmiş və W - M döndərə

Beləliklə, tapdığım problemləri həll etməyə başlamamdan əvvəl şöbəm üçün bir albalı seçimini edirəm.

 git cherry-pick -x W 

Sonra mövzuya bağlılığımı qaytarıram.

border=0
 git revert W 

Bundan sonra düzəltməyə davam edə bilərəm.

Son hekayə bu kimi görünə bilər:

 ---o---o---o---M---W---x-------x-------* / / ---A---B---W---W`----------C---D 

PR göndərdiyim zaman, PR-nin ləğv olunduğunu və yeni əməlləri əlavə etdiyini aydın şəkildə göstərəcəkdir.

29
26 марта '13 в 23:21 2013-03-26 23:21 Cavab Maksim Kotlyar tərəfindən 26 Mart '13 'də saat 23:21 ' də veriləcək 2013-03-26 23:21

Tərsini geri qaytarmaq üçün, çox iş bükülməz:

  • İnkişaf üçün zibillərin yerli bir kopyasını yaradın.
  • Yenidən inkişafın yerli nüsxəsini yenidən ləğv edin
  • Bu surəti funksiyaların filialına atın və git serverinizdə funksiyalarınızın şöbəsinə vurun.

İndi funksiyanız filialına hazır olduqda adi bir şəkildə birləşilməlidir. Buradakı yeganə dezavantaj, hekayənizdə bir neçə əlavə təkrarlama / təkrarlama olacaq.

2
22 мая '17 в 21:32 2017-05-22 21:32 cavab Sam Dufel tərəfindən 22 May '17 'da 21:32 2017-05-22 21:32' də verilir

git-revert istifadə etmək əvəzinə, bu əmri devel şöbəsində yanlış birləşmə düzəltmək (ləğv etmək əvəzinə) atmaq (ləğv etmək) üçün istifadə edə bilərsiniz.

 git checkout devel git reset --hard COMMIT_BEFORE_WRONG_MERGE 

Həmçinin iş kitabçasının məzmununu müvafiq olaraq düzəldəcəkdir. Ehtiyatlı olun :

  • Dəyişiklikləri inkişaf səhnəsinə (səhv birləşmə ilə) yazın, çünki onlar da git-reset istifadə edərək silinəcəklər. git reset arqumentinin necə aradan git reset təyin etdikdən sonra bütün git reset !
  • Yeniləmənin tarixini yenidən yazdıracağından, dəyişiklikləriniz artıq digər depolardan alındıqda da bunu etməyin.

Bunu etməyə çalışmadan əvvəl diqqətlə git-reset manual səhifəsini nəzərdən git-reset .

İndi yenidən qurduqdan sonra dəyişikliklərinizi devel etdirmək üçün yenidən tətbiq edə bilərsiniz

 git checkout devel git merge 28s 

Bu, əslində (keçmiş tarixdən silinən) orijinal kimi, 28s dən də 28s bir real birləşmə olacaq.

2
05 июля '09 в 17:29 2009-07-05 17:29 Cavab verildi knweiss 05 iyul '09 da 17:29 2009-07-05 17:29

Mən yalnız bu vəzifəni gördüm, eyni problemlə üzləşdim. Yenidən sıxışdırmaq üçün qorxudan daha yüksəkdir və s. Nəticədə mən istəmədiyim şeyləri aradan qaldıracağam və onu qaytaramam.

Bunun əvəzinə, düzəlişləri yoxladım, filialın geri dönməsini istəmişdim, məsələn. git checkout 123466t7632723 . Daha sonra, git checkout my-new-branch şöbənin git checkout my-new-branch çevrilir. Sonra mən artıq istədiyim bir filialı sildim. Əlbəttə ki, bu, yalnız siz ifrat etdiyiniz bir filial ata bilərsən.

1
13 нояб. Cavab Nikola tərəfindən 13 noyabr tarixində verilir. 2017-11-13 13:34 '17 də 13:34 'də 2017-11-13 13:34

etiketləri ilə bağlı digər suallar və ya bir sual verin