Ինչպես պահպանել մաքուր git պարտավորությունների պատմությունը
Լուծում 1.
Ենթադրենք, դուք աշխատում եք մի հատկանիշի վրա և ստեղծել եք գործառույթի ճյուղ F1՝ ստուգելով վարպետից: F1 ֆունկցիայի ճյուղի վրա աշխատելիս դուք ստեղծել եք բազմաթիվ միջանկյալ պարտավորություններ: Այնուամենայնիվ, երբ ստուգում եք կատարման պատմությունը, դուք գտնում եք, որ այդ պարտավորություններից մի քանիսը ավելորդ են: Նման դեպքում դուք կարող եք սեղմել commit-ները, այսինքն՝ կարող եք միավորել մի քանի commit-ներ և դարձնել այն մեկ commit:
Ստորև ներկայացված է ֆունկցիոնալ ճյուղի commit պատմությունը squash-ից առաջ և հետո:
Ինտերակտիվ վերաբաժանման միջոցով վերջին X պարտավորությունները սեղմելու հրամանը հետևյալն է.git rebase -i HEAD~[X]
Հանձնարարությունների սեղմումը նույնպես օգտակար է, երբ ցանկանում եք միավորել ձեր առանձնահատկությունների ճյուղը գլխավոր ճյուղին: Կծկելով՝ բոլոր ավելորդ պարտավորությունները կարող են հեռացվել, և ֆունկցիաների ճյուղը յուրացնելուն միացնելուց հետո git commit պատմությունը մաքուր է:
Ճզմելու առավելությունները.
Git պատմությունը մնում է մաքուր
Ճզմելու թերությունը.
Մանրամասն մասնաճյուղի պատմությունն այլևս հասանելի չէ:
Նախքան երկրորդ լուծմանը անցնելը, եկեք հասկանանք git merge-ի և git-rebase-ի տարբերությունը:
git միաձուլում VS git rebase
Ե՛վ git merge, և՛ git rebase օգտագործվում են ծածկագիրը ֆունկցիայի ճյուղից հիմնական (հիմնական) ճյուղին միացնելու համար:
git միաձուլում
Երբ մենք օգտագործում ենք git merge հրամանը՝ ծածկագիրը ֆունկցիայի ճյուղից հիմնականին միացնելու համար, այնուհետև git-ը կվերցնի իմ գործառույթների ճյուղից կատարվող բոլոր փոփոխությունները և կստեղծի հատուկ հանձնառություն իմ commit-ի վերևում, որը կոչվում է merge commit, որը պարունակում է իմ բոլոր փոփոխությունները: հատկանիշի ճյուղը և տեղադրում է այս միաձուլման կատարումը գլխավոր ճյուղի վերևում: Git commit-graph-ը այսպիսի տեսք կունենա
Հիմնական ճյուղում fetaure_branch-ը միացնելու հրամանը հետևյալն է.
git checkout master
git merge feature_branch
Եկեք հասկանանք git rebase-ը Solution 2-ով
Լուծում 2.
Մաքուր կատարման պատմությունը պահպանելու համար git merge-ի փոխարեն արեք git-rebase: Այն, ինչ կանի rebase-ը, այն է, որ այն կվերցնի բոլոր commit-ները գործառույթների ճյուղից և կտեղափոխի դրանք master commit-ների վերևում: Հանձնարարությունների գրաֆիկի կառուցվածքն այսպիսի տեսք ունի
Հիմնական ճյուղով fetaure_branch-ը վերահիմնավորելու հրամանը հետևյալն է.
git checkout master
git rebase feature_branch
Git rebase-ի առավելությունները.
Այն մաքուր է պահում հիմնական մասնաճյուղի պարտավորությունների պատմությունը և հետևաբար հեշտ է դառնում հետևելը
Git rebase-ի թերությունները.
Մանրամասն մասնաճյուղի պատմությունն այլևս հասանելի չէ:
Այսպիսով, ստորաբաժանումների սեղմման օգտագործումը և այնուհետև Master-ի հետ վերաբաժանումը կպահի կատարման պատմությունը մաքուր և հետևելի: