Git filialini masterga birlashtirishning eng yaxshi (va eng xavfsiz) usuli qanday?

master dan yangi filial yaratildi, biz uni test deb ataymiz.

Bir nechta ishlab chiquvchilar borki, ular master ga rozilik beradilar yoki boshqa filiallarni yaratadilar va keyinroq master ga birlashadilar.

Aytaylik, test ustida ishlash bir necha kun davom etadi va siz test ni master ichidagi majburiyatlar bilan doimiy ravishda yangilab turishni xohlaysiz.

Men test dan git pull origin master ni qilardim.

1-savol: Bu to'g'ri yondashuvmi? Boshqa ishlab chiquvchilar men btw ishlaganim kabi bir xil fayllar ustida osongina ishlashi mumkin edi.


test bo'yicha ishim tugadi va men uni yana master bilan birlashtirishga tayyorman. Mana men o'ylashim mumkin bo'lgan ikkita yo'l:

Javob:

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

B:

git checkout test
git pull origin master
git checkout master
git merge test

Men --rebase dan foydalanmayapman, chunki mening tushunishimga ko'ra, rebase master dan o'zgarishlarni oladi va uning ustiga menikini to'playdi, shuning uchun u boshqa odamlar tomonidan kiritilgan o'zgarishlarni qayta yozishi mumkin.

2-savol: Ushbu ikki usuldan qaysi biri to'g'ri? U erda qanday farq bor?

Bularning barchasidan maqsad mening test filialimni master da sodir bo'layotgan voqealar bilan yangilab turish va keyinroq vaqt jadvalini iloji boricha chiziqli saqlash umidida ularni yana master ga birlashtira olaman.


person moe    schedule 09.04.2011    source manba
comment
yo'q.. rebase hech qachon qayta yozmaydi, u shunchaki toza tarixga erishishga harakat qiladi. tarixni ustaning oxirgi nuqtasiga qayta biriktirish (yoki soxta) orqali   -  person Junchen Liu    schedule 23.12.2015
comment
rebase sizning majburiyatlaringizni qayta yozmaydi. U sizning majburiyatlaringizni bekor qiladi, asosiy filialdagi majburiyatlarni sinov bo'limiga qo'llaydi, so'ngra majburiyatlaringizni sinovga qaytaradi.   -  person zundi    schedule 20.06.2016
comment
Agar masterga yozish imkoniyati bo'lmasa-chi? Xususiyat bo'limidagi nizolarni oldindan hal qilishning har qanday usuli? Ehtimol, men o'ylamayman, chunki tarixlar bir-biridan farq qilgan   -  person information_interchange    schedule 22.07.2020


Javoblar (14)


Men buni qanday qilgan bo'lardim

git checkout master
git pull origin master
git merge test
git push origin master

Agar uzoqdan mahalliy filialim bo'lsa, bu filialdan boshqa filiallarni masofadan boshqarish pulti bilan birlashtirish menga qulay emas. Bundan tashqari, men o'z o'zgartirishlarimni turtmoqchi bo'lgan narsamdan mamnun bo'lmagunimcha, o'z o'zgartirishlarimni surishtirmayman, shuningdek, faqat men va mahalliy omborim uchun bo'lgan narsalarni umuman surmayman. Sizning tavsifingizda test faqat siz uchun bo'lganga o'xshaydi? Shuning uchun uni nashr qilish uchun hech qanday sabab yo'q.

git har doim sizni va boshqalarni hurmat qilishga harakat qiladi va --rebase ham o'zgaradi. Men buni to'g'ri tushuntira olmayman deb o'ylayman, shuning uchun Git kitobiga qarang. - Rebasing yoki git-ready: Rebasingga kirish kichik tavsif uchun. Bu juda ajoyib xususiyat

person KingCrunch    schedule 09.04.2011
comment
git merge test menga fatal: 'test' does not point to a commit beradi. Sinov bo'limidagi majburiyat nuqtasini git log dan qidirishim kerak, asosiy filialga qaytib, keyin git merge 0f37d3154abbf52a4cbbbb5109f08af6a7567234 ni bajaring. - person Duncanmoo; 02.12.2014
comment
@Duncanmoo Albatta, test filiali mavjud bo'lishi kerak. Albatta, siz uning o'rniga commit xeshni ishlatishingiz mumkin, lekin odatda filial nomidan foydalanish osonroq. Ichkarida u faqat filialning HEAD xeshini oladi. - person KingCrunch; 04.12.2014
comment
@shanyangqu masofadan boshqarish pultidagi so'nggi o'zgarishlarni olish uchun. Agar siz yolg'iz va faqat bitta tizim bilan ishlasangiz, hech qanday muammo bo'lmaydi. Ammo boshqa tizimdan (ehtimol, boshqa ishlab chiquvchidan) kiritilgan o'zgarishlar mavjud bo'lganda, birlashishni orqaga qaytarishga harakat qilganingizdan so'ng darhol ziddiyatni ko'rasiz (4-bosqich). Endi yagona yechim mahalliy masterni masofadan boshqarish moslamasiga birlashtirishdir, bu esa juda xunuk birlashtirilgan masterni kelib chiqish/master birlashtirish majburiyatiga olib keladi. Shuning uchun, birlashtirishdan oldin, har doim yaxshi fikr - person KingCrunch; 25.12.2015
comment
Agar u faqat markaziy git serveringizda bo'lsa, uning zaxira nusxasi bo'lsa, sinovdan o'tishni xohlashingiz mumkin. Agar siz o'zingizning vilkangizda ishlayotgan bo'lsangiz, bu ayniqsa yaxshi. - person Jordan Morris; 17.02.2016
comment
Bu fb (test bo'limi) ga topshiriqlarni asl fbda ko'rsatishdan farqli o'laroq, to'g'ridan-to'g'ri masterga topshirilgandek ko'rsatadi va shunchaki masterga birlashishni (gitk yoki gitlab tarmog'ida ko'rsatilganidek) ko'rsatadi. - person Joey Baruch; 11.05.2016
comment
Sinovni master bilan birlashtirishdan oldin, dastlab kelib chiqish/masterni testga birlashtirish xavfsizroq emasmi? Yuqoridagilar testni eskirib qo'ymaydimi? - person ziggy; 17.09.2016
comment
@ziggy Xo'sh ... Bu bog'liq. Ish jarayoni bo'yicha. Masalan, ko'pchilik faqat develop ga funksiyalar va xatolarni tuzatadi va master ga faqat tuzatishlar (va ehtimol muhim xatoliklar) kiritiladi. Keyin ular tuzatishlarni develop dan master ga yo'naltiradilar (texnik jihatdan siz aytganingiz). Biroq, agar tuzatish bo'lmasa (bu har doim yaxshi :)), u holda develop har doim master oldida bo'ladi. Ha, siz haqsiz, lekin ish jarayoniga qarab, bu shunchaki kerak emas. (Men bu erda develop dan foydalandim, chunki u test ga qaraganda keng tarqalgan). - person KingCrunch; 18.09.2016
comment
@sterling Archer kamon va o'q o'zgarmaydi, lekin maqsad va strategiya o'zgarishi mumkin :-) - person Prasad; 13.11.2016
comment
Sizning tavsifingizdan ko'rinib turibdiki, bu sinov faqat siz uchunmi? Shuning uchun uni nashr qilish uchun hech qanday sabab yo'q. Masalan, agar server mahalliy diskingizning ishlamay qolishi uchun zaxira nusxasini taqdim etsa yoki sizda zaxira nusxasini yaratish uchun boshqa vositangiz bo'lmasa, siz mahalliy filialingizni serverga yuklashingiz mumkin. - person Eric; 13.02.2017
comment
-1 Bu buyruqlarni qaysi omborda bajarish kerakligini tushuntirmaydi. Bu qanchalik foydasiz ekanligini hisobga olsak, hayratlanarli darajada yuqori ball. - person Felo Vilches; 03.10.2017
comment
@FeloVilches: Agar siz buyruqlarni tushunsangiz, bu buyruqlarni qaysi filialda bajarayotganingizni bilasiz. - person Nawaz; 03.10.2017
comment
@Nawaz to'g'ri nuqta, lekin sarlavhada safest way deb yozilgan, shuning uchun bu buyruqlarni tasodifiy filialda bajarish qanchalik xavfsiz ekanligiga ishonchim komil emas. - person Felo Vilches; 03.10.2017
comment
@FeloVilches: Bu tasodifiy filial emas! Xavfsizmi yoki yo'qmi, bu umuman boshqa savol. Ammo bu sizning dastlabki tashvishingiz emas edi! - person Nawaz; 03.10.2017
comment
@FeloVilches Javob git checkout master bilan boshlanadi. Agar siz gits chiqishini o'qigan bo'lsangiz, ehtimol keyin master ga o'tasiz. Siz hatto tasodifiy filialda git checkout master ni xavfsiz bajarishingiz mumkin :) - person KingCrunch; 13.11.2017
comment
...Shuningdek, men o'zgartirishlarimni o'zgartirmoqchi bo'lgan narsamdan mamnun bo'lmagunimcha... nima uchun mahalliy mashinalaringiz bo'lsa, kodingizning zahira nusxasini olish uchun surish kerak emas. o'ladi va urinishlar kun ketdi? - person Rich Steinmetz; 15.08.2018
comment
Bu javob menga noto'g'ri tuyuladi. OP test filialini master bilan yangilab turishni so'raydi - va bu javob faqat testni masterga qanday birlashtirishni ko'rsatadi. - person asimovwasright; 16.05.2019
comment
@KingCrunch Birlashgandan keyin filialni o'chirib tashlashim kerakmi? - person Oliver D; 12.03.2020
comment
@OliverD Albatta, nega emas? Agar filial birlashtirilgan bo'lsa, demak, majburiyatlar 1 dan ortiq filialda mavjud. Manba filialini o'chirish o'zgarishlarni to'xtatmaydi. Boshqa tomondan, filialni qayta yaratish faqat bir qator uzoqlikda :) git checkout -b foo master - person KingCrunch; 14.03.2020
comment
Agar git merge test fatal: refusing to merge unrelated histories ni bersa, git merge test --allow-unrelated-histories ishlaydi. - person Upulie Han; 23.10.2020
comment
Yana bir narsa .. yangi git master emas, balki main dan foydalanmoqda - person LonelySoul; 07.02.2021

Bu juda amaliy savol, lekin yuqoridagi barcha javoblar amaliy emas.

Kabi

git checkout master
git pull origin master
git merge test
git push origin master

Ushbu yondashuvda ikkita muammo mavjud:

  1. Bu xavfli, chunki test bo‘limi va asosiy filial o‘rtasida ziddiyat bor yoki yo‘qligini bilmaymiz.

  2. U barcha test topshiriqlarini masterda bitta birlashma majburiyatiga "siqib chiqaradi"; ya'ni asosiy filialda biz test filialining barcha o'zgarishlar jurnallarini ko'ra olmaymiz.

Shunday qilib, biz qandaydir ziddiyatlarga shubha qilsak, biz quyidagi git operatsiyalariga ega bo'lishimiz mumkin:

git checkout test
git pull 
git checkout master
git pull
git merge --no-ff --no-commit test

merge ni commit dan oldin sinab ko'ring, --no-ff gacha tez oldinga siljishdan qoching,

Agar ziddiyat yuzaga kelsa, biz git status ni ishga tushirib, mojarolar haqidagi tafsilotlarni tekshirishimiz va ularni hal qilishga harakat qilishimiz mumkin

git status

Biz mojarolarni hal qilgandan so'ng yoki ziddiyat bo'lmasa, biz ularni commit va push qilamiz

git commit -m 'merge test branch'
git push

Ammo bu yo'l test bo'limiga kiritilgan o'zgarishlar tarixini yo'qotadi va bu master filialni boshqa ishlab chiquvchilar uchun loyiha tarixini tushunishini qiyinlashtiradi.

Shunday qilib, eng yaxshi usul - biz merge o'rniga rebase dan foydalanishimiz kerak (deylik, bu vaqt ichida biz filial ziddiyatlarini hal qildik).

Quyida bitta oddiy misol keltirilgan, kengaytirilgan operatsiyalar uchun http://git-scm.com/book/en/v2/Git-Branching-Rebasing

git checkout master
git pull
git checkout test
git pull
git rebase -i master
git checkout master
git merge test

Ha, yuqori natijalarni tugatganingizdan so'ng, Test bo'limining barcha majburiyatlari Master filiali boshlig'iga o'tkaziladi. Qayta tiklashning asosiy afzalligi shundaki, siz chiziqli va ancha toza loyiha tarixiga ega bo'lasiz.

Siz qochishingiz kerak bo'lgan yagona narsa: hech qachon rebase ni asosiy filial kabi jamoat filialida ishlatmang.

Quyidagi kabi Hech qachon operatsiyalarni bajarmang:

git checkout master
git rebase -i test

https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

ilova:

person John Yin    schedule 14.03.2015
comment
Qayta tiklash operatsiyasiga ishonchingiz komil bo'lmasa, quyidagi manzilga murojaat qiling: git-scm .com/book/en/v2/Git-Branching-Rebasing - person John Yin; 05.03.2016
comment
Men test filialini keyinchalik masterga birlashtirish uchun qayta asoslashga roziman. Hatto boshqa javoblar ham to'g'ri bo'lsa ham, bu usta boshidagi filial testining o'zgarishlar tarixini saqlab qoladi, chunki muallif siz versiyani boshqarish tizimining maqsadi bo'lgan chiziqli va ancha toza loyihani olishingizni ta'kidlaydi. - person le0diaz; 05.05.2016
comment
Bu bitta xavfsizlik usuli emas, chunki test bo'limi va asosiy filial o'rtasida ziddiyat borligini bilmaymiz: har doim birlashishni bekor qilish mumkin. Va agar hech qanday nizolar bo'lmasa ham, agar u surilmagan bo'lsa, har doim oxirgi mahalliy majburiyatni bekor qilishingiz mumkin. Gitni to'g'ri tushunmasangiz, ba'zi narsalar biroz qo'rqinchli yoki tushunarsiz bo'lib tuyulishi mumkin, ammo xavfsiz emasligi har qanday tarzda noto'g'ri. Iltimos, noto'g'ri ma'lumotlar bilan boshqalarni adashtirmaslik uchun ehtiyot bo'ling. - person Paul van Leeuwen; 18.08.2016
comment
@PaulvanLeeuwen bilan rozi bo'ling, test shoxini masterga git birlashtirsangiz nizolar haqida sizga xabar beriladi va shu yerda siz o'zgarishlarni birlashtirasiz. Tugatganingizdan so'ng, siz birlashtirishni amalga oshirasiz va orqaga surasiz. Agar siz pushaymon bo'lsangiz yoki uni to'g'ri birlashtira olmasangiz, har doim ishingizni tashlab, yana ustadan tortib olishingiz mumkin. Shunday qilib, bu, albatta, xavfli emas .. - person Juan; 09.10.2016
comment
nega rebase -i? - person MushyPeas; 16.06.2017
comment
Qayta tiklash birlashishdan ko'ra xavfliroqdir. Birlashtirishning xavfsizroq varianti sifatida qayta asoslashni taklif qilish noto'g'ri. Qayta tiklash to'g'ri strategiyadir, lekin foydalanuvchi ehtiyot bo'lishi kerak bo'lgan ko'proq ogohlantirishlar bilan birga keladi. - person Ikke; 31.03.2018
comment
Qayta tiklashda nizolarga duch kelganlar uchun siz ziddiyatlarni hal qilishingiz va git rebase --continue ni ishga tushirishingiz mumkin. Men dev bo'limimni muvaffaqiyatli birlashtira oldim. Demak, agar men undan foydalanmayotgan bo'lsam, dev bo'limini o'chirib tashlash xavfsizmi? - person Lasithds; 10.05.2019

Qayta tiklash ham, birlashtirish ham hech kimning o'zgarishlarini qayta yozmasligi kerak (agar siz mojaroni hal qilishda buni tanlamasangiz).

Rivojlanishda odatiy yondashuv

git checkout master
git pull
git checkout test
git log master.. # if you're curious
git merge origin/test # to update your local test from the fetch in the pull earlier

Magistrga qaytishga tayyor bo'lganingizda,

git checkout master
git log ..test # if you're curious
git merge test
git push

Agar siz birlashmada biror narsani buzishdan xavotirda bo'lsangiz, git merge --abort siz uchun.

Birlashtirish vositasi sifatida surish va keyin tortishdan foydalanish ahmoqdir. Nega testni kelib chiqishga undayotganingizni ham bilmayman.

person raylu    schedule 10.04.2011
comment
Bu jarayon majburiyatlar sonini ko'paytiradi, har safar filiallar o'rtasida almashsangiz, filialingizni topshirishingiz kerak. - person iBug; 21.07.2014
comment
Nima? Har safar filialni almashtirganingizda, bu majburiyatlar sonini oshiradi, deyapsizmi? Yoki siz har safar filialni almashtirganingizda, filialingizni topshirishingiz kerakligini aytyapsizmi? Birinchisi noto'g'ri, ikkinchisi nimani anglatishini bilmayman. - person raylu; 21.07.2014
comment
To'lovdan oldin siz filialga murojaat qilishingiz kerak. men shuni aytyapman - person iBug; 22.07.2014
comment
Siz qilmaysiz: bu (narsalardan biri) git stash uchun. - person msanford; 13.08.2014
comment
Men git merge origin/test oʻrniga git checkout test; git pull ni tavsiya qilaman. Bundan ham yaxshiroq - git pull --rebase. Qanday bo'lmasin, siz o'zgarishlarni olib tashlashni unutdingiz, shuning uchun git merge origin/test dan oldin git fetch origin test kerak (git fetch .. && git merge .. aniq, git pull .. nima qiladi :)) - person KingCrunch; 25.12.2015
comment
Nazariy jihatdan, agar test master dan boshqa masofadan boshqarish pultida bo'lsa, ha. Ammo sizda odatda bitta masofadan boshqarish pulti borligi sababli, bir marta tortib olish ikkalasini ham yangilaydi va keyin siz shunchaki birlashishingiz (yoki qayta tiklashingiz mumkin). - person raylu; 27.12.2015
comment
Yoki oxirgi majburiyatingizni (mahalliy bo'limda) o'zgartirishingiz va uni bosishdan oldin uni mukammal qilishingiz mumkin. - person whihathac; 14.04.2016

Men birinchi navbatda birlashtiriladigan filialni iloji boricha toza qilib qo'yaman. Sinovlaringizni bajaring, holat siz xohlagandek ekanligiga ishonch hosil qiling. git squash yordamida yangi majburiyatlarni tozalang.

KingCrunches javobidan foydalanishni tavsiya qilaman

git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master

Siz boshqa filialda ko'plab majburiyatlarni bajargan bo'lishingiz mumkin, ular faqat asosiy filialda bitta majburiyat bo'lishi kerak. Qabul qilish tarixini iloji boricha toza saqlash uchun siz test bo'limidagi barcha topshiriqlaringizni asosiy bo'limda bitta topshiriqga bo'lishingiz mumkin (shuningdek qarang: Git: Squash yoki squash emasmi?). Keyin siz majburiyat xabarini juda ifodali narsaga qayta yozishingiz mumkin. Kodni chuqurlashtirmasdan o'qish va tushunish oson bo'lgan narsa.

tahrir: Sizni qiziqtirishi mumkin

Shunday qilib, GitHub-da men mybranch xususiyat bo'limi uchun quyidagilarni bajaraman:

Origindan eng soʻnggi maʼlumotlarni oling

$ git checkout master
$ git pull origin master

Birlashtirishning asosiy xeshini toping:

$ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f

Endi faqat birinchisi pick, qolgani s ekanligiga ishonch hosil qiling:

pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better

Keyin juda yaxshi topshiriq xabarini tanlang va GitHub-ga o'ting. Keyin tortish so'rovini qiling.

Pull so'rovini birlashtirgandan so'ng, uni mahalliy sifatida o'chirishingiz mumkin:

$ git branch -d mybranch

va GitHub-da

$ git push origin :mybranch
person Martin Thoma    schedule 21.04.2016
comment
bu asosiy filialda faqat bitta majburiyat bo'lishi kerakbu shart emas; Siz tarixni saqlashni xohlashingiz mumkin - person Cocowalla; 12.04.2018
comment
Albatta. Ammo keyin shunchaki majburiyatlarni siqib chiqarmang - person Martin Thoma; 12.04.2018
comment
Menimcha - birinchi ota-ona eng yaxshi yechim bo'lib tuyuladi. davidchudzicki.com/posts/first-parent - person bkribbs; 21.09.2018

Eski mavzu, lekin men mening yo‘limni topa olmadim. buni qilish. Bu rebase bilan ishlaydigan va masterning yuqori qismidagi (xususiyat) filialidan barcha topshiriqlarni birlashtirmoqchi bo'lgan kishi uchun qimmatli bo'lishi mumkin. Agar yo'lda mojaro bo'lsa, ularni har bir majburiyat uchun hal qilishingiz mumkin. Jarayon davomida siz to'liq nazorat qilasiz va istalgan vaqtda bekor qilishingiz mumkin.

Magistr va filialni yangilang:

git checkout master
git pull --rebase origin master
git checkout <branch_name>
git pull --rebase origin <branch_name>

Magistr tepasida filialni birlashtirish:

git checkout <branch_name>
git rebase master

Ixtiyoriy: Qayta tiklash jarayonida ziddiyatlarga duch kelsangiz:

Birinchidan, fayldagi ziddiyatni hal qiling. Keyin:

git add .
git rebase --continue

Qayta tiklashni istalgan vaqtda bekor qilishingiz mumkin:

git rebase --abort

Qayta asoslangan filialingizni bosing:

git push origin <branch_name>

Agar sizda bu novda ilgari surilgan bo'lsa, uni kuch bilan bosish bilan bekor qilishingiz kerak:

git push origin -f <branch_name>

Buni amalga oshirishdan oldin, har doim joriy mahalliy filialingiz kutganingizga mos keladimi yoki yo'qligini tekshirib ko'ring, chunki kuchli surish masofaviy ombordagi eskisini bekor qiladi.

Endi sizda ikkita variant bor:

  • A) PR yarating (masalan, GitHub-da) va uni UI orqali u erda birlashtiring
  • B) Buyruqlar qatoriga qayting va filialni master bilan birlashtiring
git checkout master
git merge --no-ff <branch_name>
git push origin master

Bajarildi.

person Robin Wieruch    schedule 31.10.2018
comment
Menga ham bu usul yoqadi. Qayta tiklashdan so'ng siz ko'pincha ‹branch_name› ni majburlab bosishingiz kerakligini eslatib o'tishni unutgansiz. - person kenecaswell; 30.03.2021

Bu men jamoa bilan ishimda foydalanadigan ish jarayoni. Stsenariy siz ta'riflaganingizdek. Birinchidan, test ustida ishlashni tugatgandan so'ng, men test filialida ishlagan vaqtim davomida masterga qo'shilgan barcha narsalarni olish uchun master bilan qayta ishlayman.

git pull -r upstream master

Bu test novdasini vilkalar bilan bog'laganingizdan so'ng masterga o'zgartirishlarni tortadi va ularni qo'llaydi, so'ngra joriy master holatini "ustida" sinab ko'rish uchun kiritilgan o'zgarishlarni qo'llaydi. Agar testda siz tahrirlagan fayllarga boshqa odamlar o‘zgartirish kiritgan bo‘lsa, bu yerda ziddiyatlar bo‘lishi mumkin. Agar mavjud bo'lsa, ularni qo'lda tuzatishingiz va majburiyat olishingiz kerak bo'ladi. Buni qilganingizdan so'ng, siz asosiy filialga o'tishingiz va test ni muammosiz birlashtirsangiz yaxshi bo'ladi.

person djheru    schedule 16.03.2016

git checkout master
git pull origin master
# Merge branch test into master
git merge test

Birlashtirgandan so'ng, agar fayl o'zgartirilgan bo'lsa, uni birlashtirganda "Mojarolarni hal qilish" xatosi paydo bo'ladi.

Shunday qilib, avval siz barcha nizolarni hal qilishingiz kerak, keyin yana barcha o'zgarishlarni amalga oshirishingiz va keyin uni bosishingiz kerak

git push origin master

Sinov bo'limida kim o'zgarishlar qilgan bo'lsa, buni qilish yaxshiroqdir, chunki u qanday o'zgarishlar qilganini bilardi.

person Vinay Sikarwar    schedule 07.04.2015

Rebase usulidan foydalanardim. Ko'pincha, chunki u sizning holatingizni semantik jihatdan mukammal aks ettiradi, ya'ni. nima qilmoqchi bo'lsangiz, hozirgi filialingizning holatini yangilash va uni oxirgisiga asoslangandek "ko'rsatish".

Shunday qilib, hatto master ni tekshirmasdan, men:

git fetch origin
git rebase -i origin/master
# ...solve possible conflicts here

Albatta, faqat kelib chiqishidan olish master ning mahalliy holatini yangilamaydi (chunki u birlashishni amalga oshirmaydi), lekin bu bizning maqsadimizga to'liq mos keladi - vaqtni tejash uchun biz boshqa joyga o'tishdan saqlanmoqchimiz.

person user776686    schedule 13.09.2018

@KingCrunchning javobi ko'p hollarda ishlashi kerak. Mumkin bo'lishi mumkin bo'lgan muammo shundaki, siz boshqa mashinada bo'lishingiz mumkin, u sinovdan eng so'nggisini olishi kerak. Shuning uchun, avvalo, sinovdan o'tishni maslahat beraman. Tahrirlash quyidagicha ko'rinadi:

git checkout test
git pull
git checkout master
git pull origin master
git merge test
git push origin master
person cgnorthcutt    schedule 28.02.2020

Men ishlab chiqish va xususiyatlar bo'yicha javob beraman,

Agar siz xususiyat bo'limida bo'lsangiz va uni ishlab chiqish bilan yangilashingiz kerak bo'lsa, quyidagi buyruqlardan foydalaning:

git checkout develop
git pull
git checkout feature/xyz
git merge develop

Endi feature/xyz develop filiali bilan yangilandi va siz oʻzgartirishlaringizni masofaviy feature/xyz ga surishingiz mumkin.

person omkar    schedule 20.05.2020

Sarlavhada "Eng yaxshi yo'l" deyilganidek, menimcha, sabr birlashish strategiyasini ko'rib chiqish yaxshi fikr.

Manba: https://git-scm.com/docs/merge-strategies

Ushbu parametr yordamida "birlashma-rekursiv" ba'zan ahamiyatsiz mos keladigan chiziqlar (masalan, turli funktsiyalardagi qavslar) tufayli yuzaga keladigan noto'g'ri birikmalarning oldini olish uchun biroz qo'shimcha vaqt sarflaydi. Birlashtirilishi kerak bo'lgan novdalar vahshiy ravishda ajralib chiqqanda, bundan foydalaning. Shuningdek qarang: git-diff [1] --sabr.

Foydalanish:

git fetch
git merge -s recursive -X patience origin/master

Git Alias

Buning uchun har doim taxallusdan foydalanaman, masalan. bir marta yugurish:

 git config --global alias.pmerge 'merge -s recursive -X patience'

Endi siz shunday qilishingiz mumkin:

git fetch
git pmerge origin/master
person Julian    schedule 16.11.2019

Tortib olish uchun siz filialni tekshirishingiz kerak, chunki tortish usta bilan birlashishni anglatadi va birlashish uchun sizga ishchi daraxt kerak.

git checkout master
git pull

Avval tekshirish kerak emas; rebase ikkita argument bilan to'g'ri ish qiladi

git rebase master test  

git checkout master
git merge test

git push sukut bo'yicha bu erda va masofadan boshqarish pultidagi barcha filiallarni bosadi

git push
git checkout test
person Masoud Mokhtari    schedule 15.11.2019

Bu GitLab'dan: Faqat ko'rsatmalarga amal qiling:

rasm tavsifini shu yerga kiriting

person shdr    schedule 05.12.2019
comment
step-1 da siz ba'zi funksiyalar bo'limini, keyin step-2 da yana asosiy filialni tekshirmoqdasiz. Men chalkashib ketdim, nima uchun birinchi navbatda xususiyat filialini tekshirish kerak ?? Iltimos, tushuntiring - person Muhammad Tariq; 17.01.2021
comment
Buning sababi, bu stsenariyda u birinchi marta kelib chiqish (masofaviy) xususiyat bo'limidan olingan. Shundan so'ng, xususiyatni o'zlashtirishga birlashtirish uchun siz masterni tekshirishingiz va unga xususiyatni birlashtirishingiz kerak. - person shdr; 18.01.2021
comment
Birinchi holda, git fetch origin feature mahalliy masofaviy xususiyat bilan sinxronlash uchun masofaviy xususiyat filialini tekshirgandan so'ng ikkinchi buyruq bo'lmasligi kerakmi? - person Muhammad Tariq; 18.01.2021

Men har doim git merge feature-branch ni bajarayotganda birlashma nizolariga duch kelaman. Bu men uchun ishlayotganga o'xshaydi:

git checkout -b feature-branch

Bir qator kod o'zgarishlarini qiling ...

git merge -s ours master 
git checkout master
git merge feature-branch

or

git checkout -b feature-branch

Bir qator kod o'zgarishlarini qiling ...

git checkout master
git merge -X theirs feature-branch
person mchavezi    schedule 27.09.2020