git merge
Branch дээр хөгжүүлсэн кодоо үндсэн branch-д нэгтгэхэд git merge ашиглана. Merge хийхэд Git хоёр branch-ийн түүхийг нэгтгэж, нэг шугам болгоно.
git merge — үндсэн хэрэглээ
Merge хийхдээ хүлээн авах branch дээр байх хэрэгтэй. Ихэвчлэн main branch-д буцаж ирж, feature branch-аа merge хийнэ:
git switch main
git merge feature/login
Git хоёр branch-ийн commit-уудыг харьцуулж, нэгтгэнэ.
Fast-forward merge
Хамгийн энгийн тохиолдол — main branch дээр шинэ commit гараагүй, feature branch зөвхөн урагш явсан үед:
Өмнө:
main: A → B
↘
feature: C → D
Дараа (fast-forward):
main: A → B → C → D
Git main-ийн заагчийг feature-ийн сүүлийн commit руу шилжүүлнэ. Нэмэлт "merge commit" үүсдэггүй — түүх шулуун үлдэнэ.
git switch main
git merge feature/login
Updating 9f8e7d6..a1b2c3d
Fast-forward
app/(auth)/login/page.tsx | 47 ++++++++++++++++++
1 file changed, 47 insertions(+)
"Fast-forward" гэж мэдэгдэнэ.
3-way merge
main branch дээр шинэ commit гарсан байхад feature branch merge хийх үед Git гурван цэгийг харьцуулна:
- Хоёр branch-ийн нийтлэг өвөг commit (common ancestor)
main-ийн сүүлийн commitfeature-ийн сүүлийн commit
Өмнө:
main: A → B → E
↑
feature: A → B → C → D
Дараа (3-way merge):
main: A → B → E → M
↗ ↗
feature: C → D
M нь merge commit — хоёр салааг нэгтгэсэн тусгай commit.
git switch main
git merge feature/login
Git editor нээж merge commit мессеж оруулахыг хүснэ. Анхдагч мессежийг (Merge branch 'feature/login' into main) хадгалж болно эсвэл өөрчилж болно. Editor-с гарахад merge дуусна.
Merge commit мессеж
Editor нээгдэхэд харагдах анхдагч мессеж:
Merge branch 'feature/login'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
Ихэвчлэн анхдагч мессежийг үлдээдэг. Хэрэв Pull Request ашиглаж байгаа бол GitHub өөрөө merge commit мессеж үүсгэдэг.
--no-ff тугийг — merge commit үүсгэхийг шаардах
Fast-forward боломжтой ч merge commit үүсгэхийг хүсвэл:
git merge --no-ff feature/login
Merge made by the 'ort' strategy.
Ингэснээр түүхэнд "энэ feature branch дээр хийсэн ажил" гэдэг нь тодорхой харагдана.
--no-ff ашигласан үед:
main: A → B → M
↗
feature: C → D
--squash — бүх commit-ийг нэг болгох
feature branch-ийн бүх commit-ийг нэг commit болгож нэгтгэх:
git merge --squash feature/login
git commit -m "feat(auth): нэвтрэх хуудас нэмэх"
feature branch-ийн 10 commit нэг цэвэр commit болж main-д орно. Ажлын явцын "wip", "засвар" гэх мэт commit-ууд main-д харагдахгүй болно.
Merge хийх өмнө шалгах
# feature branch-ийн юу main-д орохыг урьдчилан харах
git log main..feature/login --oneline
# Ямар файл өөрчлөгдөхийг харах
git diff main feature/login --stat
Дараагийн хичээлд:
Merge хийхэд conflict гарсан үед хэрхэн шийдвэрлэхийг судална.