Bugun terminalda birinchi repozitoriyni yaratamiz, commit qilamiz, shox ochamiz va birlashtiramiz
11-sinfProfessional IT development1-hafta · 2-darsVersiyalarni boshqarish va snapshot g'oyasi
init, add, commit, status, diff
Parallel ish, konflikt, log
Natija: o'z dev-journal repozitoriyingiz, 3-darsda GitHub'ga yuklanadi.
Versiyalarni boshqarish tizimining g'oyasi
Birinchi buyruqlar, o'zingizni Gitga tanishtirish
$ git --version
git version 2.50.1
$ git config --global user.name "Aziz Karimov"
$ git config --global user.email "[email protected]"
Commit muallifi shu ikki qiymatdan olinadi. Pastga ↓ o'rnatish va config darajalari
git-scm.com dan installer; Git Bash terminali bilan keladi
git --version yoki Xcode CLT, yoki brew install git
sudo apt install git (Debian/Ubuntu)
| Daraja | Bayroq | Qamrovi |
|---|---|---|
| system | --system | butun kompyuter |
| global | --global | sizning foydalanuvchingiz |
| local | (bayroqsiz) | faqat shu repo, eng kuchli |
$ git config --global init.defaultBranch main
$ git config --list --show-origin
Git ishining asosiy sikli
.git/ ni o'chirsangiz, butun tarix yo'qoladi. Fayllar qoladi, lekin Git ularni endi bilmaydi.Zonaning ustiga olib boring yoki bosing.
$ mkdir dev-journal && cd dev-journal
$ git init -b main
Initialized empty Git repository in .../dev-journal/.git/
$ echo "# Dev Journal" > README.md
$ git status -s
?? README.md
$ git add README.md
$ git commit -m "docs: add README"
[main (root-commit) bd42656] docs: add README
1 file changed, 1 insertion(+)
?? = kuzatilmayapti (untracked). A = stagingda. Qator-qator tushuntiring.
??Yangi, Git kuzatmaydi
AYangi fayl stagingga qo'shildi
_MO'zgardi, hali stagingda emas
M_O'zgardi va stagingda
$ git diff # ishchi papka va staging farqi
$ git diff --staged # staging va oxirgi commit farqi
$ git commit -m "ozgardi"
$ git commit -m "feat: add greeting by name"
Conventional Commits: tur: qisqa tavsif. Buyruq maylida, 50 belgigacha.
$ echo 'print("Ikkinchi qator")' >> hello.py
$ git diff
--- a/hello.py
+++ b/hello.py
@@ -1 +1,2 @@
print("Salom, Git!")
+print("Ikkinchi qator")
$ git commit -am "feat: add second line"
$ git log --oneline
3280c5a feat: add second line
-a faqat allaqachon kuzatilayotgan fayllarni oladi. Yangi fayl uchun avval git add.Asosiy shoxga tegmasdan xavfsiz tajriba
Branch — commit'ga ko'rsatkich (yorliq). Yaratish deyarli bepul va bir lahzada bo'ladi.
$ git switch -c feature/greeting
Switched to a new branch 'feature/greeting'
$ git commit -am "feat: greet by name"
[feature/greeting 245556f] feat: greet by name
$ git switch main
Switched to branch 'main'
$ git merge feature/greeting
Updating 3280c5a..245556f
Fast-forward
hello.py | 4 ++--
$ git branch -d feature/greeting
$ git merge feature/title
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
$ cat README.md
<<<<<<< HEAD
# Dasturchi kundaligi
=======
# Aziz Dev Journal
>>>>>>> feature/title
Bitta qatorni ikki shox turlicha o'zgartirgan. Pastga ↓ yechish tartibi
Faylni oching, ikkala variantni o'qing
Qoldiradigan matnni yozing, <<< === >>> belgilarini o'chiring
git add README.md
git commit (merge'ni yakunlaydi)
git merge --abort hammasini merge'dan oldingi holatga qaytaradi.
$ git log --oneline --graph
* 79a25f9 Merge branch 'feature/bye'
|\
| * 03c5311 feat: add goodbye
* | d76ee7f docs: describe project
|/
* 245556f feat: greet by name
* 3280c5a feat: add second line
git restore hello.py
faylni oxirgi commit holatiga
git restore --staged hello.py
fayl o'zgarishi saqlanadi
git revert <hash>
teskari commit, tarix buzilmaydi
git restore saqlanmagan o'zgarishni qaytarib bo'lmaydigan qilib o'chiradi.Tarixdan o'chirish juda qiyin. Maxfiy fayllarni .gitignore ga yozing.
Ish boshlashdan oldin git branch yoki git status.
Keraksiz fayl (node_modules, .env) tushadi. Avval status.
Tarix foydasiz bo'lib qoladi. Nima va nega ekanini yozing.
hello.py ni o'zgartirdingiz, git add qilmadingiz va git commit -m "x" yozdingiz. Commitga nima tushadi?
git commit -am kuzatiladigan faylni o'zi stagingga oladi.README.md va hello.py uchun 2 ta commitfeature/skills shoxida skills.md yozing, main'ga merge qilinggit log --graph bilan isbotlanginit, add, commit; uch zona; branch, merge, konflikt; log va restore
dev-journal ga 3 kunlik yozuv, shox va merge; log --graph natijasi
Keyingi dars: repozitoriyni GitHub'ga yuboramiz (remote, push, pull, fork).