Sobes.tech
Middle

Негизги тармакта (main branch) өзгөртүүлөрдү кайра жазуу кандай ишке ашырылат?

sobes.tech AI

AIден жооп

Киргизүү үчүн git revert же git rebase (интерактивдүү режимде же git rebase --onto оор сценарийлер үчүн) менен кошо git push -f колдонуу.

git revert жаңы комит түзөт, ал көрсөтүлгөн комиттердин өзгөртүүлөрүн жокко чыгарат. Бул ыкма коопсузураак, анткени тарыхты сактайт.

# акыркы комитти жокко чыгарыңыз
git revert HEAD
# белгилүү бир комитти анын хеши менен жокко чыгарыңыз
git revert <commit-hash>
# комиттердин диапазонун жокко чыгарыңыз (акыргысын кошпогондо)
git revert <баштоо-хеш>..<аякталган-хеш>
# комиттердин диапазонун (эки жактан да)
git revert -n <баштоо-хеш>^..<аякталган-хеш>
# өзгөртүүлөрдү бир бүтүндүк катары колдонуп, ар бир үчүн жеке комиттер түзбөстөн жокко чыгарыңыз
git revert -n <commit-hash-же-диапазон>
# түзүлгөн комитти колдонуу
git commit -m "Revert changes"

git rebase тарыхты кайра жазууга мүмкүндүк берет. Ал өчүрүү, бириктирүү же тартипти өзгөртүү үчүн колдонулушу мүмкүн. Эскертүү керек, өзгөчө жалпы тармактарда:

# акыркы N комиттер үчүн интерактивдүү rebase баштоо
git rebase -i HEAD~N
# ачылган редактордо 'pick' дегенди 'drop' менен алмаштырыңыз, өчүргүңүз келген комиттер үчүн:
# файлды сактап, жабуу.

# rebase --onto сценарийи: feature тармактан A, B, C комиттерин masterка которуу,
# D комитин эске албастан, ал featureте болгон.
# Учурдагы feature тармак
# X -- Y -- Z -- D -- A -- B -- C (feature)
#             /
#            W (master)
# Максат: X -- Y -- Z -- W -- A -- B -- C (master)
git rebase --onto master D feature
# Кайда:
# master - максаттуу тармак, ага которуп жатабыз
# D - комит, ал аркылуу которуудан чыгарыла турган
# feature - баштапкы тармак, анда комиттерди алууда

git revert же git rebase колдонгондон кийин, өзгөртүүлөрдү мажбурлап жүктөө керек болот (git push -f же git push --force-with-lease), анткени жергиликтүү тарых алыстагы тарыхтан айырмаланат:

# rebaseден кийин мажбурлап жүктөө
git push -f origin main
# Коопсузураак мажбурлап жүктөө
git push --force-with-lease origin main

Маанилүү: Жалпы тармакта (main) тарыхты кайра жазуу өтө сунушталбайт, анткени ал башка иштеп жаткан кызматкерлердин ишин бузушу мүмкүн, алар мурдагы версия менен синхрондошкон. Жөнөкөй колдонуу үчүн git revert артыкчылыкка ээ. git rebase негизги тармакта гана колдонулушу керек, ал да өтө атайын учурларда жана толук ишеним менен, көбүнчө команданын макулдугусуз.