Mahalliy filialni masofadan boshqaruvchi bilan qanday rebaza qilish mumkin?

Uzoq havzadan remote_repo dan magistral filialidan loyihani kopyaladım. Men yangi filialni yarataman va men o'sha filialga topshiraman. Boshqa programlovchilar filialni boshqarish uchun remote_repo -ga surildi. Endi mening shoximni RB kodini remote_repo masterga qayta yuklashim kerak. Buni qanday qilish kerak? Terminalga qanday buyruq yozish kerak?

586
Men uchun bu savol ikkilamchi emas, chunki "bilan" har ikki yo'nalishda ham rebasing bo'lishi mumkin. Javoblarni ko'rib chiqayapmanki, niyatingiz ustiga bo'lagingizni boshqa ustunga emas, balki masofadagi masterga qaytarishdir. Men birovning quyidagi javobni kuzatib, xohlagan narsalarning teskarisini olgan taqdirda eslayman.
qo'shib qo'ydi muallif Glenn Lawrence, manba
@GlennLawrence Fikrni qo'shishdan ko'ra original savolni tahrirlash yaxshiroq deb o'ylayman. Bu shuningdek, stackoverflow tomonidan tavsiya etiladi. Bundan tashqari, RB ga qayta ishlov berish ustun bo'lishi ehtimoldan yiroq, chunki RB RB ustasi tarixiga bog'liq.
qo'shib qo'ydi muallif daniel kullmann, manba

4 javoblar

Avvalo, yangi masterni yuqorida aytib o'tilgan ombordan oling va o'zingizning ish bo'limingizni quyidagicha yangilang:

git fetch origin            # Updates origin/master
git rebase origin/master    # Rebases current branch onto origin/master

Update: Please see Paul Draper's answer for a more concise way to do the same - recent Git versions provide a simpler way to do the equivalent of the above two commands.

895
qo'shib qo'ydi
Men bu erda bir savolga javob berishni boshladim:
qo'shib qo'ydi muallif Dror, manba
Sizning filialingiz va 'origin/b1' sizning nomingizdan farq qiladi, # va har biri uchun 3 va 2 xil vazifaga ega. Boshqa go pull kabi ko'rinishi kerak. Bu to'g'rimi yoki men bu erda biror narsani etishmayapmanmi?
qo'shib qo'ydi muallif Dror, manba
@ kayaker243 Yo'q, Pol Drapersning javobiga o'xshaydi, lekin uzoq formada, deb o'ylayman.
qo'shib qo'ydi muallif erik, manba
Sayyorlik Paul Draper kayaker243ning (va bu javobdan deyarli ikki yil o'tib) izohidan yarim yil oldin javobini yozganini eslang.
qo'shib qo'ydi muallif Frerich Raabe, manba
@Dror Yo'q, go pull kerak emas. Buning ma'nosi, oxirgi marta origine deposundan olinganligi sababli, siz uchta ishni qildingiz. Keyinchalik siz yana qaytib kelib, sizni oxirgi marta qo'lga kiritganingizdan beri, boshqa odamlarning ikki marta qilganini payqadingiz. Endi siz filialingizni origine ning filialiga (yoki bu savol va nima deb javob berganim) ochishingiz mumkin yoki siz mahalliy filialni va o'tish birlashma dan foydalaning.
qo'shib qo'ydi muallif Frerich Raabe, manba
@RGC Yo'q o'tish rebase master master dan boshlab ikkinchi kod buyrug'i bilan ishlamaydi ( o'tish rebase origin/master ) va Origin/master turli vazifalarga ishora qilishi mumkin (ayniqsa, birinchi buyruq origin/master ) ni o'zgartirishi mumkin bo'lgan
qo'shib qo'ydi muallif Frerich Raabe, manba
@reversiblean origin boshqa Git omboriga murojaat qiladi.
qo'shib qo'ydi muallif Frerich Raabe, manba
+1 to'lovchi uchun kerak emasligi uchun
qo'shib qo'ydi muallif CharlesB, manba
Muammo shundan keyin mening rebased xususiyat filialini masofadan uzoqlashtirish uchun. Men hal qila olmaydigan abadiy xatolarni olaman. Men odatda voz kechaman, - masofadagi repo-dagi funktsiyani o'chirib tashlang, keyin mahalliy tilimni yana bir marta bosing. Bu juda yaxshi emas. Xususan, filialni masofadan uzoqlashtirish uchun rebazani qanday yakunlashni bilib olishingiz mumkinmi?
qo'shib qo'ydi muallif Motti Shneor, manba
Bu erda manba yuqorida turgan repo yoki vilkaga qaratilganmi?
qo'shib qo'ydi muallif reversiblean, manba
@FrerichRaabe aytmoqchi, masalan yuqorida (o'qish) va kelib chiqish (vilkalar) bor. upstream yoki kelib chiqishi orqali qayta yuklash kerakmi?
qo'shib qo'ydi muallif reversiblean, manba
bu aslida nima so'ralgan yagona javob
qo'shib qo'ydi muallif kayaker243, manba
- Go rebase master # ikkinchi buyruq bilan bir xil ishni bajaradi? - Ikki buyruqlarimdan keyin mening mahalliy xo'jayinim va RB bir xil kod versiyasiga ega, to'g'rimi? Lekin men masterni masofadan usta sifatida buzmasliklarini xohlayman (RB ishlamasdan)
qo'shib qo'ydi muallif RGC, manba
@FrerichRaabe I tasodifan faqat git rebase origin/master emas, balki o'tish rebase kelib chiqishi ni amalga oshirdi. Nima bo'ladi?
qo'shib qo'ydi muallif Yoshita Arora, manba
git pull --rebase origin master
554
qo'shib qo'ydi
FYI bilan interaktiv rebazlarni go pull --rebase = interaktiv manba master
qo'shib qo'ydi muallif emmby, manba
(Frerichning javobiga teng)
qo'shib qo'ydi muallif Paul Draper, manba
Ushbu layneri yordamida interaktiv rebaza qilishning usullari bormi?
qo'shib qo'ydi muallif Andrew, manba
@adhominem - men go-pull hujjatlari ni tekshirdim va hech narsa ko'rmayapman Mahalliy boshqaruvchining o'zgartirilganligi haqidagi da'volarni qo'llab-quvvatlaydi. Agar dev ismli filialda ishlayotgan bo'lsam va git pull --rebase origin master dan foydalansangiz, faqat dev filiali o'zgartiriladi master . - rebase bayroq hujjatlari, kelgandan keyin yuqoridagi oqimning ust qismidagi joriy filialni qayta yuklashni va mahalliy tomosha qilish filiallarini o'zgartirish haqida hech narsa qilmaslikni bildiradi.
qo'shib qo'ydi muallif studro, manba
Yaxshi ahvol - bu mantiqan. Rahmat. Men aslida bu savolni master dan tashqari mahalliy filialda ( RB I think they called it?) Degan ma'noni anglatadi deb o'ylayman.
qo'shib qo'ydi muallif studro, manba
Muammo shundan keyin mening rebased xususiyat filialini masofadan uzoqlashtirish uchun. Men hal qila olmaydigan cheksiz xatolarim bor. Men odatda voz kechaman - masofali shoxni o'chirib tashlayman va mening mahalliy joyimdan yana uni itarib qo'yaman, lekin bu juda yaxshi emas. Rebazani uzoqdan qo'zg'atib, qanday qilib yakunlashni bilib olasizmi?
qo'shib qo'ydi muallif Motti Shneor, manba
Frerichning javobini sinab ko'rganimda invalid upstream 'origin/master' ni oldim, lekin bu javob ishlaydi. O'ylaymanki, bitta filni klonlashimga to'g'ri keldi.
qo'shib qo'ydi muallif Qi Fan, manba
bu Frerichning javobidan bir oz boshqacha emas, chunki bu usta ustadan mahalliy ustaga o'zgarishlarni amalga oshiradi, Frerichning javoblari esa mahalliy ustaga befarq bo'ladimi? (olish va boshqalar)
qo'shib qo'ydi muallif Jimmy Huch, manba
Yo'q, Frerichning javobida, rebaza mahalliy ustasini o'zgartiradi. Bir pull - rebase, bir rebase tomonidan ta'qib qilgan, bir xil narsa
qo'shib qo'ydi muallif adhominem, manba
@studro Mahalliy masterda esa - pull-rebase deb atagan edim. Aks holda, men noto'g'ri bo'lardi.
qo'shib qo'ydi muallif adhominem, manba

O'zingizning filialingizga topshirilgan o'zgarishlardan so'ng, to'lovni boshqaruvchisidan va repo ichidagi o'zgarishlarni olish uchun torting:

git checkout master
git pull origin master

Keyin filialni tekshiring va o'zgarishlarni masterda yangilang:

git checkout RB
git rebase master

yoki bitta ikki satrda ikki buyruqlar:

git rebase master RB
103
qo'shib qo'ydi
Xo'sh .... men buni aniq bilaman. men "RB" to'g'ri rebased, lekin rebase keyin itni urishga harakat doim abadiy xatolar olaman. Qochishdan tashqari, RB-dan kelib chiqadigan narsa - bu "yaxshi" (majburiy emas) usul bormi? Men bu yerda faqat tushunchalarni tushunishga harakat qilaman - va muvaffaqiyatsiz.
qo'shib qo'ydi muallif Motti Shneor, manba
Agar siz qaytadan/RB ga qaytsangiz, ehtimol xato bo'ladi. RB ustida ishlaydigan yagona ishchi bo'lsangiz, siz boshdan kechiruvchi kuch - RB ga o'tishingiz mumkin. manba: stackoverflow.com/questions/8939977 /; hellip;
qo'shib qo'ydi muallif joey baruch, manba
@MottiShneor Yo'q, yaxshi yo'l yo'q. Agar kimdir bu vaqtda filialga itarib qolsa, ularning o'zgarishi yo'qoladi! Agar siz GO'Bga tayyorgarlik tarixiga xush yoqishni istasangiz, o'zingizning filialga o'zingizning ustamingizni birlashtirishingiz kerak (bu o'tish tugmasi -f holda).
qo'shib qo'ydi muallif daniel kullmann, manba

Note: If you have broad knowledge already about rebase then use below one liner for fast rebase. Solution: Assuming you are on your working branch and you are the only person working on it.

git fetch && git rebase origin/master

Har qanday ixtilofni bartaraf qilish, kodingizni sinab ko'rish, majburiyatlarni bajarish va masofaviy tarmoqqa yangi o'zgarishlar kiritish.

                            ~:   For noobs   :~

Quyidagi qadamlar, go rebase uchun yangi bo'lgan har qanday kishiga yordam berishi mumkin va buni qiyinchiliksiz bajarishni xohlaysiz

Step 1: Assuming that there are no commits and changes to be made on YourBranch at this point. We are visiting YourBranch.

git checkout YourBranch
git pull --rebase

What happened? Pulls all changes made by other developers working on your branch and rebases your changes on top of it.

Step 2: Resolve any conflicts that presents.

3-qadam:

git checkout master
git pull --rebase

What happened? Pulls all the latest changes from master and rebases master on latest master.

Step 4: Resolve any conflicts that presents.

Step 5:

git checkout YourBranch
git rebase master

What happened? Rebase on master happens

Step 6: Resolve any conflicts, if there are conflicts. Use git rebase --continue to continue rebase after adding the resolved conflicts. At any time you can use git rebase --abort to abort the rebase.

7-qadam:

git push --force-with-lease 

What happened? Pushing changes to your remote YourBranch. --force-with-lease will make sure whether there are any other incoming changes for YourBranch from other developers while you rebasing. This is super useful rather than force push. In case any incoming changes then fetch them to update your local YourBranch before pushing changes.

Why do I need to push changes? To rewrite the commit message in remote YourBranch after proper rebase or If there are any conflicts resolved? Then you need to push the changes you resolved in local repo to the remote repo of YourBranch

Yahoooo ...! Siz rebasing bilan muvaffaqiyatli bajarilgansiz.

You might also be looking into doing:

git checkout master
git merge YourBranch

When and Why? Merge your branch into master if done with changes by you and other co-developers. Which makes YourBranch up-to-date with master when you wanted to work on same branch later.

                            ~:   (๑ơ ₃ ơ)♥ rebase   :~
34
qo'shib qo'ydi