KhanSoft Academy
Цэс

Веб системийн үндэс · 4/5

Хичээл

Git ба GitHub-ийн үндэс

Working tree, staging area, commit, branch, remote-ийн ялгааг ойлгож, нэг файлын өөрчлөлтийг шалгаад аюулгүй commit хийх урсгал сурна.

  • beginner
  • 40 минут

Энэ хичээлээр

  • Git болон GitHub-ийн үүргийг ялгах
  • Working tree, staging area, commit хоорондын урсгалыг тайлбарлах
  • Нэг файлыг explicit stage хийж, staged diff шалгаад commit хийх

Яагаад Git урсгалыг ойлгох хэрэгтэй вэ?

Task Manager-ийн architecture diagram эсвэл API contract-оо өөрчиллөө гэж бодъё. Зөвхөн “Save” дарахад файл хадгалагдана, гэхдээ юу өөрчилсөн, яагаад, өмнөх хувилбар нь ямар байсныг системтэй баримтжуулахгүй.

Git өөрчлөлтийг шалгаж, сонгож, утгатай snapshot болгон хадгалах боломж өгнө. GitHub тэр repository-г network дээр байршуулж, бусадтай хуваалцах болон review хийх үйлчилгээ өгнө. Git ажиллахын тулд GitHub заавал хэрэгтэй биш.

Mental model: гурван ажлын төлөв

text
Working tree
→ Staging area
→ Commit history
  • Working tree: Та одоо нээж, засаж буй бодит файлууд.
  • Staging area (index): Дараагийн commit-д яг ямар өөрчлөлт орохыг сонгосон завсрын төлөв.
  • Commit: Сонгосон өөрчлөлтийн нэртэй, immutable snapshot.

Git, GitHub, repository

Git бол distributed version control system. Компьютер дээр repository, branch, commit history-тай ажиллана.

GitHub бол Git repository host хийх, pull request, issue, review зэрэг хамтын ажиллагааны боломжтой веб үйлчилгээ.

Repository нь project files болон Git-ийн history, references, configuration агуулсан хяналтын нэгж. .git directory нь local repository-ийн дотоод өгөгдлийг агуулдаг тул санамсаргүй засах, устгах ёсгүй.

Аюулгүй inspect-first урсгал

  1. Одоогийн төлөвөө хар

    git status нь branch, staged, unstaged, untracked файлыг ялгана. Ямар ажил аль хэдийн байгааг мэдэхээс өмнө reset, clean хийхгүй.

  2. Өөрчлөлтийн diff-ийг унш

    git diff нь working tree дэх, хараахан stage хийгээгүй өөрчлөлтийг харуулна. Нууц, debug log, unrelated formatting орсон эсэхийг шалга.

  3. Тодорхой файлыг stage хий

    git add docs/task-manager-flow.md шиг exact path хэрэглэ. Ингэснээр дараагийн commit-ийн scope ойлгомжтой байна.

  4. Staged diff-ээ дахин шалга

    git diff --cached нь commit-д орох яг тэр diff-ийг харуулна.

  5. Утгатай commit үүсгэ

    git commit -m "docs: describe task creation flow" шиг өөрчлөлтийн зорилгыг тайлбарласан message хэрэглэ.

  6. History-г баталгаажуул

    git log --oneline-оор шинэ commit зөв branch дээр орсныг шалга.

Нэг файлыг шалгаж commit хийх
git status
git diff
git add docs/task-manager-flow.md
git diff --cached
git commit -m "docs: describe task creation flow"
git log --oneline

git add .-ийг default safe workflow гэж ашиглахгүй. Энэ command одоогийн directory доорх олон өөрчлөлтийг хамтад нь stage хийж, өөр хүний эсвэл туршилтын unrelated файлыг commit-д оруулах эрсдэлтэй. Exact file path stage хийвэл intent харагдана.

Branch гэж юу вэ?

Branch нь commit history доторх хөдөлгөөнт нэрлэсэн заагч. Шинэ feature дээр тусдаа branch ашиглавал main-ийн одоогийн state-ийг шууд хутгалгүй ажиллаж болно.

Branch нь бүх project-ийн тусдаа copy биш. Commit нэмэгдэхэд branch pointer урагшилна. Branch солихын өмнө working tree дэх өөрчлөлтөө ойлгох хэрэгтэй: Git зарим өөрчлөлтийг авч явж болох ч conflict эсвэл overwrite эрсдэл үүснэ.

Remote, push, pull

Remote нь өөр Git repository-ийн URL-д өгсөн local нэр. Default нэр ихэвчлэн origin, гэхдээ заавал биш.

Push нь local commit болон branch reference-ийг remote руу илгээнэ:

bash
git push

Push хийхээс өмнө:

  1. зөв repository мөн үү — git remote -v;
  2. зөв branch мөн үү — git status;
  3. зөв commit-ууд уу — git log --oneline;
  4. tests, review дууссан уу

гэдгийг шалгана. Permission, branch protection, review policy push-ийг хязгаарлаж болно.

Pull нь remote өөрчлөлтийг fetch хийгээд current branch-д integrate хийх өндөр түвшний command. Working tree dirty үед шууд pull хийхээс өмнө local өөрчлөлтөө ойлгож, project-ийн merge/rebase policy-г мэднэ.

Нэг commit-ийн чанар

Сайн commit:

  • нэг ойлгомжтой зорилготой;
  • unrelated өөрчлөлтгүй;
  • build/test боломжтой үедээ давагдсан;
  • message нь “юу” гэхээс гадна intent-ийг ойлгуулдаг;
  • secret, generated noise, debug artifact агуулаагүй.

Task Manager flow-ийн diagram болон тайлбар нэг зорилго бол нэг commit байж болно. Харин dependency update, homepage redesign-ийг хамтад нь хийх шаардлагагүй.

Практик дасгал

Нэг файлыг inspect-first аргаар commit хийх

Туршилтын repository-д task-flow.md нэртэй нэг файл үүсгээд Task үүсгэх таван алхмыг бич. Дараах дарааллаар ажилла:

  1. Файл өөрчлөгдсөнийг status-аар хар.
  2. Diff-ийг унш.
  3. Зөвхөн task-flow.md-г stage хий.
  4. Staged diff-ээ шалга.
  5. docs: outline task creation flow message-ээр commit хий.

Хэрэв repository-д өөр untracked файл байвал түүнийг устгахгүй, stage хийхгүй.

Хүлээгдэж буй үр дүн

Зөвхөн сонгосон нэг файлын өөрчлөлт орсон local commit болон staged/committed diff-ээ шалгасан terminal evidence.

Дуусгах шалгах хуудас
Сонголттой зөвлөмж

Туршилтын шинэ repository ашиглавал бодит ажлаа эрсдэлд оруулахгүй. Unknown untracked файлыг устгах хэрэггүй.

Түгээмэл алдаа

  • Git болон GitHub-ийг ижил зүйл гэж ойлгох
  • git add . ажиллуулаад staged diff шалгалгүй commit хийх
  • Commit үүсэхэд автоматаар GitHub руу явсан гэж бодох
  • Push хийснийг deploy хийсэн гэж тайлагнах
  • Dirty working tree дээр recovery command сохроор ажиллуулах
  • Secret эсвэл .env файлыг history-д commit хийх
  • Хэт олон unrelated өөрчлөлтийг нэг commit-д холих

Мэдлэгээ шалгах

Staging area-ийн гол үүрэг юу вэ?
git diff --cached юу харуулах вэ?
Git ба GitHub-ийн зөв ялгаа аль вэ?
Push хийхийн өмнө хамгийн зөв алхам аль вэ?

Дүгнэлт

Git working tree-ийн өөрчлөлтийг staging area-аар сонгож commit history-д хадгална. GitHub remote hosting болон collaboration нэмнэ. Аюулгүй үндсэн урсгал бол status → unstaged diff → explicit add → staged diff → commit → log. Push болон pull shared state-д нөлөөлөх тул branch, remote, local work-ээ эхлээд ойлгоно.

Албан эх сурвалж