Ачааллж байна...
Өмнөх хичээлд бид хоёр сумыг хоёуланг нь ажиллуулсан. Хуулбараас push хийж, анхны фолдерт pull хийсэн. Гэхдээ тэр үед бид маш эмх цэгцтэй ажилласан: нэг газар өөрчлөлт хийж илгээгээд, нөгөө газар нь татаж авсан. Бодит амьдрал тийм эмх цэгцтэй байдаггүй. Та ажлын компьютер дээрээ өдөр ажиллаад push хийнэ, орой гэртээ ирээд pull хийхээ мартаж шууд ажиллаж эхэлнэ. Хоёр газар зэрэг өөрчлөлт хуримтлагдаж, тэгээд push хийхэд GitHub татгалзана. Энэ хичээл яг тэр нөхцөлийн тухай.
Бид хоёр фолдероо хоёр компьютерийн бүрэн дүр төрх болгоно. Эхлээд санаатайгаар pull хийхээ "мартаж", GitHub-ийн татгалзсан мессежийг өөрийн нүдээр харна. Тэр мессежийг мөр мөрөөр уншиж, юу болсныг ойлгоод, pull-ээр засна. Дараа нь хоёр газар яг нэг мөрийг өөрчилсөн, илүү хэцүү нөхцөлийг шийднэ. Эцэст нь энэ бүх асуудлаас урьдчилан сэргийлдэг энгийн дадлыг тогтооно: ажил эхлэхийн өмнө pull, ажил дуусахад push.
Танай гэр бүл гал тогооны хананд өлгөөтэй нэг тэмдэглэлийн дэвтэртэй гэж төсөөлөөрэй. Тэнд хүн бүр худалдан авах зүйлсээ бичдэг. Та өглөө дэвтрийн хуулбарыг утсандаа зураг авч явсан. Өдрийн турш та утсан дээрх хуулбартаа хэдэн зүйл нэмж бичжээ. Орой гэртээ ирээд хананы дэвтэрт өөрийн нэмсэн зүйлсээ хуулах гэтэл ээж тань өдөр нь тэр дэвтэрт өөр зүйлс нэмсэн байна. Хэрвээ та хананы дэвтрийг өөрийн өглөөний зураг дээрх хувилбараар зүгээр дарж бичвэл ээжийн нэмсэн бүх зүйл алга болно.
Ухаалаг хүн яах вэ? Эхлээд хананы дэвтрийг уншиж, ээжийн юу нэмснийг харна. Дараа нь өөрийн нэмсэн зүйлсийг тэдгээрийн хажууд нэмнэ. Хэрвээ хоёулаа нэг мөрөнд өөр зүйл бичсэн бол, жишээ нь ээж "сүү 1 литр", та "сүү 2 литр" гэж бичсэн бол, аль нь зөвийг шийднэ. GitHub бол тэр хананы дэвтэр. Таны push татгалзагдах нь GitHub "би таныг хэн нэгний ажлыг дарж бичихийг зөвшөөрөхгүй, эхлээд уншиж, нэгтгэ" гэж хэлж байгаа хэлбэр юм.
Энэ хичээлд хоёр фолдероо тусдаа нэрээр дуудна. expense-tracker фолдер бол таны гэрийн компьютер. expense-tracker-copy фолдер бол таны ажлын компьютер. Хоёуланг нь хоёр тусдаа VS Code цонхонд нээгээрэй, ингэснээр тэдгээрийн хооронд шилжихэд хялбар болно. Цонх бүрийн гарчгийн мөрөнд фолдерын нэр харагдах тул аль компьютер дээр байгаагаа тэндээс шалгаарай.
Эхлээд хоёр компьютерийг ижил байдалд оруулъя. Өмнөх хичээлийн "туршаад үзээрэй" хэсэгт GitHub дээр шууд өөрчлөлт хийсэн байж магадгүй тул хоёуланд нь pull хийнэ.
Гэрийн компьютерийн terminal-д:
Command:
git pullГаралт:
Already up to date.Ажлын компьютерийн terminal-д мөн git pull бичнэ үү. “Already up to date” буюу "аль хэдийн шинэчлэгдсэн" гэсэн хариу нь GitHub дээр шинэ зүйл алга, таны компьютер аль хэдийн ижил байна гэсэн утгатай. Хэрвээ аль нэг дээр нь “Fast-forward” гэсэн гаралт гарвал тэр компьютер шинэ commit авсан гэсэн үг, энэ ч хэвийн. Одоо хоёулаа ижил цэгээс эхэлж байна.
Алхам 1: Ажлын компьютер дээр ажиллах
Ажлын компьютерийн VS Code цонхонд report.py-г нээж, төгсгөлд нь дундаж тооцоолох функц нэмж хадгална уу.
python
def average(expenses):
return total(expenses) / len(expenses)Command:
git add report.py
git commit -m "Add average function"
git pushГаралт (сүүлийн мөрүүд):
[main c4d8e2a] Add average function
1 file changed, 3 insertions(+)
...
To https://github.com/bat-dorj/expense-tracker.git
b2a7f1c..c4d8e2a main -> mainАжлын өдөр дууслаа. GitHub одоо дундаж функцтэй.
Алхам 2: Гэрт pull хийхээ "мартах"
Одоо гэрийн компьютерийн VS Code цонх руу шилжинэ үү. Та гэртээ ирээд, ажил дээрээ юу хийснээ мартаж, шууд шинэ ажил эхэллээ гэж бодъё. Pull хийхгүй. storage.py-г нээж, зарлагуудыг файлд хадгалах функц нэмж хадгална уу.
python
def save_expenses(path, expenses):
with open(path, "w", encoding="utf-8") as f:
json.dump(expenses, f, ensure_ascii=False, indent=2)Энэ функц json.dump()-ийг ашиглан зарлагуудыг файлд бичнэ. “ensure_ascii=False” нь кирилл үсгийг “\u0445” гэх мэт кодоор биш, жинхэнэ үсгээр нь хадгалахыг, “indent=2” нь файлыг уншихад хялбар, догол мөртэй болгохыг хэлдэг. Эдгээрийг өмнөх сургалтын JSON-ий хичээлээс санаж байгаа байх.
Command:
git add storage.py
git commit -m "Add save function"Гаралт:
[main 5a1f7e3] Add save function
1 file changed, 4 insertions(+)Одоо хоёр компьютер тус бүр GitHub-д байхгүй, эсвэл өөртөө байхгүй commit-тэй боллоо. Ажлын компьютерийн c4d8e2a GitHub-д байгаа ч гэрт байхгүй. Гэрийн 5a1f7e3 хаана ч байхгүй, зөвхөн гэрийн компьютер дээр. 3.3 дугаар хичээлийн зураглалаар бол хоёр гол b2a7f1c-оос салаалж, тус тусын замаар урссан.
Алхам 3: Push хийх гэж оролдох
Command:
git pushГаралт:
To https://github.com/bat-dorj/expense-tracker.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/bat-dorj/expense-tracker.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.GitHub татгалзлаа. Энэ мессеж олон мөртэй, “rejected”, “error”, “failed” гэсэн айдас төрүүлэх үгстэй ч бид түүнийг тайван, мөр мөрөөр нь уншина.
“To https://github.com/...” нь хаашаа илгээх гэж оролдсоныг заана.
“! [rejected] main -> main (fetch first)” бол гол мэдээ. Анхаарлын тэмдэг “!” болон “rejected” гэдэг үг "татгалзсан" гэсэн утгатай. “main -> main” нь аль салааг аль салаа руу илгээх гэж байсныг харуулна. Хаалтан доторх “fetch first” нь "эхлээд тат" гэсэн богино зөвлөгөө.
“error: failed to push some refs to ...” нь "зарим салааг илгээж чадсангүй" гэсэн Git-ийн дүгнэлт. “refs” гэдэг нь салаа зэрэг хавчуургуудын техникийн нэр.
Дараагийн “hint” мөрүүд бол хамгийн хэрэгтэй хэсэг, Git юу болсныг энгийн хэлээр тайлбарлаж байна. “Updates were rejected because the remote contains work that you do not have locally” нь “remote таны local-д байхгүй ажил агуулж байгаа тул шинэчлэлтийг татгалзлаа” гэсэн утгатай. “This is usually caused by another repository pushing to the same ref” нь "энэ нь ихэвчлэн өөр нэг repository ижил салаа руу push хийснээс болдог" гэсэн утгатай, яг бидний нөхцөл: ажлын компьютер push хийсэн. “If you want to integrate the remote changes, use ‘git pull’ before pushing again” нь “remote-ийн өөрчлөлтийг нэгтгэхийг хүсвэл дахин push хийхээсээ өмнө git pull ашигла” гэсэн шийдэл. Сүүлийн мөр нь нэмэлт баримт бичгийн тухай бөгөөд одоохондоо хамаагүй.
Энэ мессежийн хамгийн чухал санаа: GitHub таныг шийтгэж байгаа юм биш, хамгаалж байна. Хэрвээ GitHub таны push-ийг хүлээж авсан бол таны түүх GitHub-ийн түүхийг орлож, ажлын компьютерийн “Add average function” commit алга болох байсан. Хананы дэвтрийн зүйрлэлээр бол ээжийн бичсэн зүйлсийг дарж бичих байсан. Git тэр боломжийг танд өгөхгүй. Юу ч алдагдаагүй: гэрийн commit тань гэрийн компьютер дээр, ажлын commit GitHub дээр аюулгүй байна.
Алхам 4: Pull-ээр нэгтгэх
Git-ийн зөвлөснөөр pull хийнэ.
Command:
git pullЭнэ удаад pull fast-forward хийж чадахгүй, учир нь хоёр тал хоёулаа урагшилсан. Тиймээс pull жинхэнэ merge хийж, merge commit үүсгэнэ. 3.3 дугаар хичээлд үзсэнчлэн merge commit-д message хэрэгтэй тул VS Code-д MERGE_MSG нэртэй шинэ таб нээгдэж, terminal-д дараах мөр гарна.
hint: Waiting for your editor to close the file...Нээгдсэн табын эхний мөрөнд Git-ийн бэлдсэн message байна: “Merge branch ‘main’ of https://github.com/bat-dorj/expense-tracker”. Энэ message-ийг өөрчлөх шаардлагагүй, табыг хаахад л хангалттай. Хэрвээ хаахад VS Code хадгалах эсэхийг асуувал хадгална уу. Табыг хаасны дараа terminal-д үлдсэн гаралт гарна.
Гаралт:
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), 318 bytes | 31.00 KiB/s, done.
From https://github.com/bat-dorj/expense-tracker
b2a7f1c..c4d8e2a main -> origin/main
Merge made by the 'ort' strategy.
report.py | 3 +++
1 file changed, 3 insertions(+)Өмнөх хичээлд pull-ийн гаралт хоёр хэсэгтэйг харсан. “From ...” мөр хүртэлх хэсэг нь fetch: ажлын компьютерийн c4d8e2a commit-ыг GitHub-аас авч, origin/main-ийг шинэчилсэн. “Merge made by the ‘ort’ strategy” нь merge хэсэг бөгөөд энэ удаад fast-forward биш, 3.3 дугаар хичээлийн жинхэнэ бэлчир болсон. Доорх мөрүүд нэгтгэлээр юу орж ирснийг харуулна: report.py-д 3 мөр, өөрөөр хэлбэл дундаж функц. VS Code-д report.py-г харвал average функц гарч ирсэн, storage.py-д таны save_expenses хэвээрээ байна. Хоёр компьютерийн ажил гэрийн компьютер дээр нэгдлээ.
Хэрвээ та энэ таб нээгдэхийг хүсэхгүй байвал git pull --no-edit гэж бичиж болно, 3.3 дугаар хичээлийн merge-тэй адил. Аль ч арга зөв.
Алхам 5: Одоо push хийх
Command:
git statusГаралт:
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean“2 commits-оор түрүүлж байна”. Яагаад хоёр вэ? Нэг нь таны “Add save function”, нөгөө нь pull-ийн үүсгэсэн merge commit. Хоёулаа GitHub-д хараахан байхгүй.
Command:
git pushГаралт (сүүлийн мөрүүд):
To https://github.com/bat-dorj/expense-tracker.git
c4d8e2a..8e2c4b9 main -> mainЭнэ удаад GitHub хүлээж авлаа. “c4d8e2a..8e2c4b9” нь GitHub дээрх main ажлын компьютерийн commit-оос шинэ merge commit руу урагшилсныг харуулна. GitHub-ийн хувьд энэ бол асуудалгүй урагшлалт, учир нь таны түүх GitHub-ийн бүх ажлыг агуулж байна. Ингээд түүхийг харъя.
Command:
git log --oneline --graph -4Гаралт:
* 8e2c4b9 (HEAD -> main, origin/main) Merge branch 'main' of https://github.com/bat-dorj/expense-tracker
|\
| * c4d8e2a Add average function
* | 5a1f7e3 Add save function
|/
* b2a7f1c Show number of expensesЭнэ зураг 3.3 дугаар хичээлийн бэлчиртэй яг ижил хэлбэртэй. Ялгаа нь гэвэл энэ удаад хоёр салаа хоёр өөр branch биш, хоёр өөр компьютер дээрх нэг main салаа байсан. Баруун талын шугам нь ажлын компьютерийн ажил, зүүн талынх нь гэрийнх.
Алхам 6: Ажлын компьютерийг шинэчлэх
Эцэст нь ажлын компьютерийн VS Code цонх руу шилжиж, маргааш өглөө ажилдаа ирлээ гэж бодъё. Эхний хийх зүйл нь pull.
Command:
git pullГаралт (сүүлийн мөрүүд):
From https://github.com/bat-dorj/expense-tracker
c4d8e2a..8e2c4b9 main -> origin/main
Updating c4d8e2a..8e2c4b9
Fast-forward
storage.py | 4 ++++
1 file changed, 4 insertions(+)Ажлын компьютерт шинэ ажил байгаагүй тул энгийн fast-forward боллоо. Гэрийн save_expenses функц болон merge commit хоёулаа энд ирлээ. Гурван газар, гэр, ажил, GitHub бүгд одоо ижил.
Дээрх жишээнд хоёр компьютер өөр өөр файл өөрчилсөн тул Git бүгдийг автоматаар нэгтгэсэн. Харин хоёр газар яг нэг мөрийг өөрчилбөл юу болох вэ? Хариулт: 3.3 дугаар хичээлийн conflict, гэхдээ pull-ийн дотор. Товч харцгаая.
Ажлын компьютерт main.py-ийн "Зарлагын тоо" мөрийг дараах байдлаар өөрчилж, commit, push хийнэ.
python
print("Зарлагын тоо:", count(expenses), "ширхэг")Command:
git add main.py
git commit -m "Add unit to expense count"
git pushГэрийн компьютерт pull хийхгүйгээр, ижил мөрийг өөрөөр өөрчилж commit хийнэ.
python
print("Нийт бичлэг:", count(expenses))Command:
git add main.py
git commit -m "Rename count label"
git pushPush Алхам 3-тай яг ижил мессежээр татгалзагдана. Одоо pull хийнэ.
Command:
git pullГаралт (сүүлийн мөрүүд):
From https://github.com/bat-dorj/expense-tracker
8e2c4b9..c9f3a1d main -> origin/main
Auto-merging main.py
CONFLICT (content): Merge conflict in main.py
Automatic merge failed; fix conflicts and then commit the result.Fetch хэсэг ердийнхөөрөө, харин merge хэсэг нь 3.3 дугаар хичээлийн conflict-ийн гурван мөр. VS Code-д main.py-г нээвэл тэмдэглэгээнүүдийг харна.
<<<<<<< HEAD
print("Нийт бичлэг:", count(expenses))
=======
print("Зарлагын тоо:", count(expenses), "ширхэг")
>>>>>>> c9f3a1d6e2b84f07a1d5c3e9b2f6a8d4e7c1b0a5Тэмдэглэгээнүүд танил, нэг л ялгаа бий. Доод тэмдэглэгээний ард салааны нэрийн оронд урт hash байна. Учир нь pull GitHub-аас авсан commit-ыг нэрээр биш, таних тэмдгээр нь нэгтгэдэг. Таны Git-ийн хувилбараас хамаараад энэ нь богино hash болон commit message хэлбэрээр харагдаж болно. Утга нь ижил: “======= доорх хэсэг GitHub-аас ирсэн, ажлын компьютерийн хувилбар”.
Шийдвэрлэх алхмууд 3.3 дугаар хичээлийнхтэй яг ижил. Эцсийн мөрийг сонгож эсвэл бичиж, гурван тэмдэглэгээг устгаад, кодоо ажиллуулж шалгана. Жишээ нь хоёр санааг нэгтгэе.
python
print("Нийт бичлэг:", count(expenses), "ширхэг")Command:
python main.py
git add main.py
git commit --no-edit
git pushPush энэ удаад амжилттай болно. Дараа нь ажлын компьютерт pull хийхэд fast-forward-оор таны шийдвэр тэнд хүрнэ. Хэрвээ conflict-ийн дунд ойлгохоо больсон бол 3.3 дугаар хичээлийн гарц энд ч ажилладаг: git merge --abort нь pull-ийн merge хэсгийг цуцалж, таныг pull-ийн өмнөх байдалд буцаана.
Энэ хичээлийн хоёр жишээ хоёулаа нэг шалтгаанаас үүдсэн: гэрийн компьютер ажил эхлэхийн өмнө pull хийгээгүй. Хэрвээ тэр өглөө ажлын эхэнд pull хийсэн бол ажлын компьютерийн commit-ыг аль хэдийн авч, түүн дээрээ үргэлжлүүлэн ажиллах байсан. Push татгалзагдахгүй, бэлчир, conflict үүсэхгүй байх байсан. Тиймээс хоёр ба түүнээс олон газар ажилладаг хөгжүүлэгч бүр нэг энгийн дадлыг баримталдаг.
Ажил эхлэхдээ: git status-ээр ажлын фолдер цэвэр эсэхийг шалгаад, git pull-ээр GitHub дээрх хамгийн сүүлийн ажлыг авна. Ажил дуусгахдаа: git status-ээр юу өөрчлөгдсөнийг харж, утга бүхий commit-ууд хийгээд, git push-ээр GitHub руу илгээнэ. Энэ хоёр зуршил нь хоёр компьютер, гурван компьютер, эсвэл ирээдүйд багийн гишүүд хоорондоо зөрчилдөх магадлалыг эрс багасгадаг. Зөрчил бүрмөсөн алга болохгүй, учир нь заримдаа хоёр газар зэрэг ажиллах шаардлага гардаг. Гэхдээ тэр үед ч та одоо юу хийхээ мэднэ: pull, нэгтгэх, шаардлагатай бол conflict шийдэх, дараа нь push.
Нэг зүйлийг тодорхой анхааруулъя. Интернэтээс push татгалзагдсан тухай хайхад git push --force гэсэн зөвлөгөө таарч болно. “--force” нь GitHub-ийн хамгаалалтыг хүчээр давж, GitHub дээрх түүхийг таны түүхээр дарж бичдэг. Энэ нь яг хананы дэвтэр дээрх ээжийн бичсэнийг арилгахтай адил: ажлын компьютерийн commit-ууд GitHub-аас алга болно. Энэ сургалтын хүрээнд force push-ийг хэзээ ч бүү ашиглаарай. Татгалзсан push-ийн хариу үргэлж pull байна.
Хүсвэл энэ дадлыг гурав дахь "компьютер" дээр туршиж үзээрэй: GitHub-ийн вэб хуудас. Өмнөх хичээлийн "туршаад үзээрэй" хэсэгт харсанчлан GitHub дээр шууд файл засаж commit хийж болно. GitHub дээр data/expenses.json эсвэл аль нэг файлд өөрчлөлт хийгээд, дараа нь гэрийн компьютер дээр pull хийлгүйгээр өөр файлд commit хийж push хийгээд үзээрэй. Татгалзсан мессеж гарах ёстой бөгөөд та түүнийг энэ хичээлийн аргаар шийдэж чадна.
Pull хийхэд “divergent branches” алдаа гарах.
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.“divergent branches” нь "салаалсан салаанууд", өөрөөр хэлбэл хоёр тал хоёулаа урагшилсан нөхцөл. Сүүлийн мөр "салаалсан салааг хэрхэн нэгтгэхийг зааж өгөх хэрэгтэй" гэж байна. Git хоёр тал урагшилсан үед merge хийх үү, өөр арга хэрэглэх үү гэдгийг танаас асууж байна. Бүлэг 1-ийн 3 дугаар хичээлд суулгагчийн 12 дугаар дэлгэц дээр “Fast-forward or merge” сонголтыг үлдээсэн бол энэ асуулт гарахгүй, учир нь тэр сонголт хариултыг аль хэдийн өгсөн. Хэрвээ Git өөр аргаар суусан бол энэ мессеж гарна. Hint-ийн эхний сонголт бол бидний энэ сургалтад ашиглаж буй merge арга юм. Үүнийг бүх төсөлд нэг удаа тохируулахын тулд дараах command-ыг бичээд pull-ээ дахин оролдоно уу.
git config --global pull.rebase falseМессежид дурдагдсан rebase бол түүхийг өөр аргаар нэгтгэдэг хүчтэй хэрэгсэл бөгөөд энэ сургалтын хүрээнээс гадуур.
Push хийсэн commit-оо amend хийх. 2.5 дугаар хичээлд "зөвхөн хуваалцаагүй commit-ыг amend хий" гэж хэлсэн. Одоо яагаад гэдгийг харж болно. Хэрвээ та push хийсэн commit-оо amend хийгээд дахин push хийвэл дараах мессеж гарна.
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/bat-dorj/expense-tracker.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart.“non-fast-forward” нь “fast-forward биш” гэсэн утгатай, “the tip of your current branch is behind its remote counterpart” нь "таны салааны орой remote дахь хувилбараасаа хоцорсон" гэсэн утгатай. Amend хуучин commit-ыг шинээр солисон тул таны түүх GitHub-ийн түүхтэй зөрчилдөж байна: GitHub хуучин commit-тэй, таных түүний оронд шинэтэй. Энэ үед pull хийвэл хуучин болон шинэ хоёр commit хоёулаа түүхэнд орж, ойлгомжгүй болно. Хамгийн энгийн дүрэм: push хийсэн commit-ыг хэзээ ч amend бүү хий. Хэрвээ message эсвэл кодод алдаа олдвол шинэ commit-оор засна.
Буруу компьютер дээр ажиллах. Хоёр VS Code цонх нээлттэй үед буруу цонхонд command бичих нь хялбар. Хэрвээ гаралт таны хүлээснээс өөр байвал, жишээ нь commit хийсэн файл тань pull-ийн дараа өөрчлөгдөөгүй байвал, эхлээд цонхны гарчиг болон pwd-ээр аль фолдерт байгаагаа шалгаарай. Бодит амьдрал дээр хоёр компьютер тусдаа байх тул энэ асуудал гарахгүй, энэ бол зөвхөн бидний дадлагын онцлог.
Pull-ийн дараа MERGE_MSG таб нээгдээд terminal зогсох. Энэ бол алдаа биш, Git таныг merge commit-ын message-ийг шалгахыг хүлээж байна. “hint: Waiting for your editor to close the file...” мөр үүнийг илтгэнэ. VS Code-д нээгдсэн табыг олж хаана уу. Хэрвээ таб олдохгүй байвал VS Code-ийн бүх цонхыг шалгаарай, заримдаа өөр цонхонд нээгддэг.
Хоёр газар ажиллахад нэг газрын push-ийн дараа нөгөө газар pull хийлгүйгээр ажиллаж, push хийвэл GitHub “! [rejected] main -> main (fetch first)” мессежээр татгалзана. Энэ нь GitHub таныг өөр газар хийгдсэн ажлыг дарж бичихээс хамгаалж байгаа хэлбэр бөгөөд юу ч алдагдаагүй. Hint мөрүүд шийдлийг шууд зааж өгдөг: эхлээд git pull. Хоёр тал хоёулаа урагшилсан бол pull merge commit үүсгэж, VS Code-д message-ийн таб нээнэ, эсвэл git pull --no-edit ашиглаж болно. Pull-ийн дараа push амжилттай болно. Хоёр газар нэг мөрийг өөрчилсөн бол pull conflict үүсгэдэг бөгөөд 3.3 дугаар хичээлийн аргаар шийдвэрлэнэ, доод тэмдэглэгээнд салааны нэрийн оронд commit-ын hash харагдана. “divergent branches” алдаа гарвал git config --global pull.rebase false тохируулна. Push хийсэн commit-ыг amend хийхгүй, force push-ийг хэзээ ч ашиглахгүй. Хамгийн чухал дадал: ажил эхлэхдээ pull, ажил дуусахад push.
Ингээд Бүлэг 4 дууслаа. Та одоо кодоо GitHub руу илгээх, тэндээс авах, хоёр газар аюулгүй ажиллах чадвартай боллоо. Дараагийн Бүлэгт бид таны repository-г мэргэжлийн хэлбэрт оруулна. Бүлэг 5-ын эхний хичээлд Markdown хэлийг сурч, таны төслийн нүүр хуудас болох README файлыг бичнэ. Энэ нь таны repository-г нээсэн хүн бүрийн хамгийн түрүүнд уншдаг зүйл юм.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.