Ինչպես փոխել նշանը հանձնարարության մեջ?
sobes.tech AI
Պատասխան AI-ից
Կան մի քանի եղանակներ՝ փոփոխելու նշանը կոմիտեում.
-
Վերջին կոմիտեի փոփոխություն (երբ դեռ չի ուղարկվել).
Կարող եք օգտագործել
git commit --amendհրամանը։ Դա թույլ է տալիս փոխել վերջին կոմիտեի հաղորդագրությունը կամ ավելացնել/հեռացնել ֆայլեր։# Վերջին կոմիտեի հաղորդագրության փոփոխություն git commit --amend -m "Նոր հաղորդագրություն այլ նշանով"Այս հրամանի կատարման հետո բացվում է տեքստային խմբագիր, որտեղ կարող եք խմբագրել կոմիտեի հաղորդագրությունը։
-
Ամենահին կոմիտեների փոփոխություն (օգտագործելով ինտերակտիվ rebase):
Այս մեթոդը ավելի բարդ է, բայց թույլ է տալիս փոխել ցանկացած կոմիտե պատմության մեջ։ Այս հրամանի օգտագործումը վերագրում է պատմությունը, ուստի խորհուրդ չի տրվում այն օգտագործել այն կոմիտեների հետ, որոնք արդեն ուղարկվել են ընդհանուր ռեպոզիտորին, որի վրա աշխատում են ուրիշներ։
# Ինտերակտիվ rebase սկսելը այն կոմիտեից, որը պետք է փոխվի git rebase -i HEAD~N # որտեղ N - է վերադարձի կոմիտեների քանակըԱյս հրամանի կատարման հետո բացվում է տեքստային խմբագիր՝ վերջին N կոմիտեների ցանկով։ Գտեք այն կոմիտեն, որը ցանկանում եք փոխել, և փոխեք
pickբառըreword-ով (կամr)։Պահպանեք և փակեք խմբագիրը։ Այնուհետև Git-ը առաջարկում է փոխել նշված
reword-ով նշված յուրաքանչյուր կոմիտեի հաղորդագրությունը։Օրինակ՝ ինտերակտիվ rebase-ի խմբագրողի բովանդակությունը:
pick a1b2c3d Կոմիտ 1: Առաջին հաղորդագրություն pick e4f5g6h Կոմիտ 2: Մյուս հաղորդագրություն pick i7j8k9l Կոմիտ, որը պետք է փոխելՓոխեք այն՝
pick a1b2c3d Կոմիտ 1: Առաջին հաղորդագրություն pick e4f5g6h Կոմիտ 2: Մյուս հաղորդագրություն reword i7j8k9l Կոմիտ, որը պետք է փոխելՊահպանեք և դուրս եկեք։ Git-ը կանգ կառնի երրորդ կոմիտեի վրա և առաջարկում է փոխել նրա հաղորդագրությունը։
-
git filter-branchօգտագործելը (ավելի բարդ փոխակերպումների համար):Այս մեթոդը ավելի հզոր է, բայց պետք է օգտագործել զգուշությամբ։ Այն թույլ է տալիս վերագրել պատմությունը՝ կիրառելով սցրիպտ յուրաքանչյուր կոմիտեի վրա։ Կարող է օգտագործվել զանգվածային նշանների փոփոխության համար կոմիտեների հաղորդագրություններում։
# Օրինակ՝ `filter-branch`-ի օգտագործում նշանի `_`-ը փոխելու համար `-`-ով կոմիտեների հաղորդագրություններում git filter-branch --msg-filter 'sed "s/_/-/"' -- --allԴա վերագրում է բոլոր ճյուղերի պատմությունը։ Օգտագործել զգուշությամբ։
Մեծ կարևորություն ունի: Փոփոխել պատմությունը՝ արդեն ուղարկված կոմիտեների, կարող է առաջացնել խնդիրներ մյուս ծրագրավորողների համար։ Նրանք պետք է սինխրոնիզացնեն իրենց տեղական ռեպոզիտորիաները փոփոխված պատմության հետ, ինչը կարող է պահանջել ուժեղացված ներբեռնում (git pull --rebase կամ git fetch && git reset --hard origin/branch)։