როგორ განახორციელოთ ცვლილებების გადაწერა მთავარი ფილიალში (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 საშუალებას გაძლევთ გადახაზოთ კომიტების ისტორია. შეიძლება გამოყენებულ იქნას წაშლის, ერთიანობის ან წესრიგის შეცვლისთვის. სიფრთხილე სჭირდება, განსაკუთრებით საერთო ფილიალებზე:
# ინტერფეისული rebase-ი ბოლო N კომიტისთვის
git rebase -i HEAD~N
# გახსნილ რედაქტორში შეცვალეთ 'pick' -დან 'drop'-ში, წაშლას საჭირო კომიტებისთვის:
# ფაილს შეინახეთ და დახურეთ.
# სცენარი rebase --onto-თან: გადატანა A, B, C კომიტების feature ფილიალიდან 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 მხოლოდ განსაკუთრებულ შემთხვევებში და სრული პასუხისმგებლობით უნდა გამოიყენოთ, ჩვეულებრივ მთელი გუნდის შეთანხმების შემდეგ.