Ինչպես պահպանել մաքուր 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-ի հետ վերաբաժանումը կպահի կատարման պատմությունը մաքուր և հետևելի: