Maqolalar 14 daqiqa 467 ko‘rish
git config: commit muallifini sozlash
Git o‘rnatilgach, birinchi qiladigan ishimiz — unga kim ekanimizni aytish. Chunki Git har doim ham xato haqida ogohlantirmaydi: ba’zan noto‘g‘ri ism yoki email bilan commitni jimgina yaratib qo‘yadi. Natijada GitHub bu commitni profilingiz bilan bog‘lay olmasligi mumkin. Bu qismda oldingi tajriba natijasini ko‘rib chiqamiz, Git sozlamalarini to‘g‘rilaymiz va noto‘g‘ri muallif bilan yaratilgan commitni tuzatamiz.
Mundarija
- git commit - 3 xil holat
- git config - Ism va Email sozlash
- git config - Ism va Email tekshirish
- Qaysi emailni yozgan ma’qul?
- Yangi repositorylar main bilan boshlansin
- git config --show-origin — manbasi
- git commit --amend — tuzatish
- Davom etishdan oldin bitta maslahat
- O'zingizni tekshiring
- Shu qismning buyruqlari
- Keyingi qismda
Oldingi qismda Git'ni o'rnatib, test-project papkasida birinchi buyruqlarimizni bajardik: git init, git add va git commit. Endi o'sha oxirgi git commit buyrug'i turli kompyuterlarda nima qaytarishini birgalikda sinchiklab ko'rib chiqamiz.
Ogohlantirish!
To'g'ridan-to'g'ri shu qismdan boshlagan bo'lsangiz, bo'sh papkada shu buyruqlarni bajarib oling (har biri haqida oldingi qismda batafsil yozilgan):
pwd # Joriy papkani ko'rsatadi
mkdir test-project # Yangi test-project papkasini yaratadi
cd test-project # test-project papkasiga kiradi
git init # Joriy papkada yangi Git repository yaratadi
echo "salom" > a.txt # a.txt faylini yaratib, ichiga "salom" yozadi
git status # Git holatini ko'rsatadi
git add a.txt # a.txt faylini staging area'ga qo'shadi
git status # Git holatini qayta tekshiradi
git commit -m "sinov" # O'zgarishlarni "sinov" nomi bilan commit qiladi
git commit - 3 xil holat#
Git commit kimning nomidan yoziladi?: Git har bir commit'ga faqat o‘zgarishlarni emas, uni kim yaratganini ham yozadi. Buning uchun unga ism va email kerak bo'ladi.
Ogohlantirish!
Biz esa hali Git’ga git config ma’lumotlarni bermadik. Shuning uchun oxirgi git commit -m "sinov" buyrug‘i sizning kompyuteringizda 3 xil holatdan birini bergan bo‘lishi mumkin.
1-holat: Git commitni to‘xtatdi#
Windows va ko‘plab Linux kompyuterlarida odatda shunday xabar chiqadi:
Author identity unknown
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
fatal: unable to auto-detect email address
Git kimning nomidan commit yozishni bilmagani uchun to‘xtadi.
Bu yaxshi holat: commit hali yaratilmagan, demak tarixga noto‘g‘ri ism yoki email ham tushmagan. a.txt esa staging area'da kutib turibdi — sozlashni tugatgach, commit'ni qayta bajaramiz.
2-holat: Git commitni yaratdi#
Ba’zi tizimlarda, ayniqsa macOS’da, Git commitni to‘xtatmasdan yaratib yuborishi mumkin:
[main (root-commit) ca342dc] sinov
Committer: career <career@macshops-HN93RCWTNQ.local>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
1 file changed, 1 insertion(+)
create mode 100644 a.txt
Bu yerda eng muhim qator:
Committer: career <career@macshops-HN93RCWTNQ.local>
Biz bunday ism yoki email kiritmaganmiz.
Git ularni kompyuterdagi foydalanuvchi nomi va qurilma nomidan o‘zi taxmin qilgan. Email hatto haqiqiy manzil bo‘lmasligi ham mumkin.
Lekin commit allaqachon yaratildi.
Demak, Git xato bermagani hali hammasi to‘g‘ri degani emas.
Ogohlantirish!
Sizda main branch o‘rniga master branch chiqishi ham mumkin. Hozircha branch'larning farqi yo‘q — boshlang‘ich branch nomini birozdan keyin sozlaymiz.
3-holat: Hech qanday ogohlantirishsiz#
Agar commit odatdagidek yaratilib, Git ism yoki email haqida hech narsa demagan bo‘lsa, bu kompyuterda Git avvalroq sozlangan bo‘lishi mumkin.
Hozir qaysi ma’lumotlar ishlatilayotganini tekshirib ko'ring:
git config --global user.name
git config --global user.email
Ogohlantirish!
Agar terminal sizning ism va email'ingizni chiqarsa, ularni qayta sozlash shart emas. Agar qiymatlar noto‘g‘ri bo‘lsa yoki umuman hech narsa chiqmasa, hozir birgalikda to‘g‘rilaymiz.
git config - Ism va Email sozlash#
Git’ga commit'larda qaysi ism va email'dan foydalanishni aniq ko‘rsatamiz:
# Bu kodda ism familya yoki nickname'ni va emailni o'zingizga moslab yozing.
git config --global user.name "Asadbek Solijonov" # Ism Familya yoki nickname
git config --global user.email "asadbek@example.com" # GitHubga ulangan email
Eslatma
Bu yerdagi --global sozlamani faqat hozirgi loyiha uchun emas, shu foydalanuvchining barcha Git loyihalari uchun umumiy qilib saqlab qo'yadi.
Buyruqlarni bajarganingizdan keyin terminal hech qanday xabar chiqarmasligi mumkin. Bu normal — Git sozlamani jimgina saqlagan bo'ladi.
git config - Ism va Email tekshirish#
git config --global user.name
git config --global user.email
Endi terminal siz kiritgan qiymatlarni qaytarishi kerak.
Agar sizda 1-holat bo'lgan bo'lsa, ya'ni commit to'xtagan bo'lsa, uni hozir test-project ichida qayta bajaring:
git commit -m "sinov"
Bu safar Git hech narsa so'ramaydi va commit sizning ismingiz bilan yaratiladi.
Qaysi emailni yozgan ma’qul?#
Loyiha commitlarida email'ni ko'rsatishning 2 xil usuli bor: private va public
Public: Oddiy GitHub emailingizni ishlatsangiz ham bo‘ladi. Lekin Git emailni har bir commit ichiga yozadi. Repository ochiq bo‘lsa, bu manzil commit tarixida hammaga ko‘rinadi.
Private: Agar haqiqiy emailingizni oshkor qilishni xohlamasangiz, GitHub bergan noreply manzilidan foydalanishingiz mumkin. U quyidagicha ko'rinishda bo'ladi.
109437399+AsadbekSolijonov@users.noreply.github.com
GitHub bu manzil orqali commitlarni profilingizga bog‘lay oladi, haqiqiy emailingiz esa ochiq ko‘rinmaydi.
O‘zingizga tegishli manzilni GitHub’dagi Settings → Emails bo‘limidan topasiz. U Keep my email addresses private sozlamasi yoqilganda, shu sozlama matnining ichida ko'rinadi.

Agar GitHub akkauntingiz hali bo‘lmasa, shu yerda to‘xtash shart emas. Hozircha oddiy emailingizni yozib davom eting. Keyin uni bitta buyruq bilan almashtirish mumkin:
git config --global user.email "yangi@email"
Faqat bitta narsani yodda tuting: yangi email undan keyin yaratiladigan commitlarga ishlaydi. Eski commitlar o‘z-o‘zidan o‘zgarmaydi.
Yangi repositorylar main bilan boshlansin#
Yana bitta kichik sozlama qoladi:
git config --global init.defaultBranch main
Bu buyruqdan keyin yangi repository yaratganingizda:
git init
Git boshlang‘ich branchni main deb nomlaydi.
Eski Git versiyalarida bu nom ko‘pincha master edi. GitHub’da esa main keng ishlatiladi. Ikkalasini boshidan bir xil tutish keyinchalik birinchi push paytida ortiqcha chalkashlikning oldini oladi.
Shu bilan asosiy sozlamalar tayyor: Git endi commitni kimning nomidan yozishini va yangi repositorylarda qaysi branch nomidan boshlashini biladi.
Agar yuqoridagi tajribada Git noto‘g‘ri ism yoki email bilan commit yaratib ulgurgan bo‘lsa, aynan o‘sha commitni biroz keyinroq tuzatamiz. Undan oldin sozlamalar qayerda saqlanishini ko'rib olamiz.
git config --show-origin — manbasi#
Yuqorida qiymatlarni --global bilan tekshirgan edik. --globalsiz yozsangiz, Git hozir amalda qaysi qiymatni ishlatishini ko'rsatadi — commit'ga aynan shu yoziladi:
git config user.name
git config user.email
# Asadbek Solijonov
# 109437399+AsadbekSolijonov@users.noreply.github.com
Ikkalasi to'g'ri chiqsa, Git tayyor.
Yana bir foydali buyruq bor — u nafaqat qiymatni, balki qaysi fayldan kelayotganini ham ko'rsatadi:
git config --show-origin <kalit>
| Bo'lak | Vazifasi |
|---|---|
--show-origin |
qiymat bilan birga uning qaysi fayldan kelganini ham yozadi |
user.name |
qaysi sozlama qiziqtirayotgani |
git config --show-origin user.name
git config --show-origin user.email
# file:/Users/siz/.gitconfig Asadbek Solijonov
# file:/Users/siz/.gitconfig 109437399+AsadbekSolijonov@users.noreply.github.com
Fayl yo'li sizda boshqacha bo'ladi: Windowsda C:/Users/Siz/.gitconfig,
Linuxda /home/siz/.gitconfig.
Agar bu buyruqlar hech narsa chiqarmasa — demak sozlama hali yozilmagan.
Yuqoridagi ikkita git config --global buyrug'ini qaytadan bajaring.
Hozircha faqat bitta fayl ko‘rinadi, chunki biz hozircha faqat global sozlamani o‘rnatdik. Aslida Git sozlamalarni uch xil joydan o‘qiydi. Agar bir xil sozlama bir nechta joyda berilgan bo‘lsa, ustunlik darajasi yuqoriroq bo‘lgan sozlama ustun keladi:
| Qayerda | Kimga tegishli | Buyrug'i |
|---|---|---|
| Tizim | kompyuterdagi hamma | --system |
| Global | shu foydalanuvchi | --global |
| Local | faqat shu loyiha | (belgisiz) |
Pastdagi sozlama yuqoridagidan ustun turadi. Masalan, loyiha ichida boshqa email ko‘rsatsangiz, shu loyiha uchun global email emas, aynan loyiha ichidagi email ishlatiladi:
# loyiha papkasi ichida turib, --global YOZMASDAN faqat shu loyiha uchun:
git config user.email "ish@kompaniya.com"
Ogohlantirish!
Bu buyruqni hozir test-project ichida bajarmang. Aks holda keyingi bo'limda commit'ga global emailingiz emas, ish@kompaniya.com yoziladi. Bajarib qo'ygan bo'lsangiz, git config --unset user.email bilan local sozlamani olib tashlang. Buni xavfsiz sinab ko'rish uchun maqola oxirida alohida mashq bor.
Bu — shunchaki qo‘shimcha imkoniyat emas, balki amalda juda kerakli funksiya. Ish loyihalarida korporativ email, shaxsiy loyihalarda esa o‘z emailingizdan foydalanish kerak bo‘lsa, aynan shu sozlama qo‘l keladi. Seriyaning oxirgi qismida bitta kompyuterda ikkita GitHub akkaunt bilan ularni aralashtirmasdan ishlashni ham amalda ko‘rib chiqamiz.
git commit --amend — tuzatish#
Bu holat ko'p uchraydi: odam bir necha commit qilib, keyin sozlashni o'qiydi. Tarixda esa allaqachon notanish nom qolib ketgan bo'ladi.
Yuqoridagi tajribada ikkinchi holat sizda ham chiqqan bo'lsa, test-project ichida aynan shunday commit turibdi. Quyidagi buyruqlarni o'sha papkaning ichida mashq qilib ko'rishingiz mumkin.
Oxirgi commitni tuzatish oson. Avval kim yozilganini ko'ramiz — Git'dan "faqat kim yozganini ayt" deb so'raymiz:
| Bo'lak | Vazifasi |
|---|---|
git log |
commitlar tarixini ko'rsatadi |
-1 |
faqat oxirgi bitta commit |
--format="..." |
chiqish ko'rinishini o'zingiz belgilaysiz |
%an, %ae |
muallif ismi va emaili (author name, author email) |
git log -1 --format="%an <%ae>"
# career <career@macshops-HN93RCWTNQ.local>
Endi Git'ga "shu commitni qayta yoz, muallifni esa yangi sozlamadan ol" deymiz:
| Bo'lak | Vazifasi |
|---|---|
--amend |
oxirgi commitni qaytadan yozadi |
--reset-author |
muallifni hozirgi sozlamadan qayta oladi |
--no-edit |
commit izohiga tegmaydi (aks holda matn muharriri ochiladi) |
git commit --amend --reset-author --no-edit
Tekshiramiz:
git log -1 --format="%an <%ae>"
# Asadbek Solijonov <109437399+AsadbekSolijonov@users.noreply.github.com>
Muallif almashdi.
Bitta ogohlantirish: --amend commitni tuzatmaydi, o'rniga yangisini
yozadi. Agar o'sha commit GitHub'ga hali yuborilmagan bo'lsa — muammo yo'q.
Yuborilgan bo'lsa, tarix ikkiga ayrilib qoladi va uni to'g'rilash alohida
ish. Bu haqda seriyaning keyingi qismlarida batafsil gaplashamiz; hozircha shu qoidani eslab
qoling: push qilingan commitni o'zgartirmang.
Bir necha eski commitning muallifini birdaniga almashtirish ham mumkin, lekin u ancha jiddiyroq amaliyot. Hozir bunga kirishmaymiz — yangi boshlaganlar uchun eng foydalisi shu xatoga umuman yo'l qo'ymaslik.
Tajriba tugadi — test-project endi kerak emas. Xohlasangiz, uni o'chirib tashlashingiz mumkin. Hozir uning ichida turgan bo'lsangiz, avval bir pog'ona yuqoriga chiqamiz:
| Bo'lak | Vazifasi |
|---|---|
cd .. |
bir pog'ona yuqoriga chiqadi |
rm |
o'chirish buyrug'i |
-r |
papkani ichidagisi bilan birga (recursive) |
-f |
tasdiq so'ramasdan (force) |
test-project |
nima o'chirilishi |
cd ..
rm -rf test-project
Bu buyruq bilan ehtiyot bo'ling: u tasdiq so'ramaydi va o'chirilgan fayllarni Savatga (Trash) ham yubormaydi. Enter bosishdan oldin papka nomini bir marta tekshirib oling.
Terminaldan o'chirishni xohlamasangiz, test-project ni Finder yoki Explorer orqali ham o'chirishingiz mumkin.
Davom etishdan oldin bitta maslahat#
Git’ning eng tushunarsiz mavzularidan biri — branch va merge. Ular haqida keyingi qismlarda batafsil gaplashamiz. Lekin terminalda ishlatishdan oldin ularni ko‘z bilan ko‘rib, qanday ishlashini tushunib olsangiz, keyingi qadamlar ancha oson bo‘ladi.
Buning uchun eng yaxshi joy — learngitbranching.js.org. Brauzerda ochiladi, hech narsa o'rnatish shart emas: buyruq yozasiz, ekranda commitlar daraxti darrov o'zgaradi.
git commit yozdik — daraxtda ikkita yangi tugun paydo bo'ldi. Buyruqning natijasi shu zahoti ko'z oldingizdaBirinchi bo‘limini taxminan 20 daqiqada ko‘rib chiqsangiz, keyingi qismlarni tushunish ancha oson bo‘ladi.
Men buni maqola oxirida emas, aynan shu yerda tavsiya qilyapman. Chunki oxirida berilgan havolalar ko‘pincha ochilmay qoladi.
O'zingizni tekshiring#
Ixtiyoriy bo'lim
Vaqtingiz tig'iz bo'lsa, bu bo'limni o'tkazib yuborib keyinroq qaytsangiz bo'ladi — maqolaning davomi bunga bog'liq emas.
Sozlash tugadi, lekin tushunganingizni bir sinab ko'rgan ma'qul. Uchta kichik topshiriq — har biri bir necha daqiqada bajariladi va hech narsani buzmaydi.
-
Hamma global sozlamalaringizni ko'ring.
Terminalda
git config --global --listdeb yozing. Ichidauser.name,user.emailvainit.defaultBranchbormi? Git sozlama nomlarini kichik harfda ko'rsatadi, ya'niinit.defaultbranchdeb chiqadi — bu xato emas. Yana nima bor: Git'ni o'rnatuvchi o'zi qo'shib ketgan sozlamalar ham ko'rinadimi?Kutilgan natija: kamida uchta qator —
user.name=...,user.email=...,init.defaultbranch=main. -
Local sozlama global'dan ustun turishini o'z ko'zingiz bilan ko'ring.
Yangi bo'sh papka yarating,
git initqiling va ichidagit config user.email "test@example.com"deb yozing. Endigit config user.emailnima chiqaradi? Papkadan chiqib (cd ..) xuddi shu buyruqni qayta yozing — javob o'zgardimi?Kutilgan natija: papka ichida
test@example.com, tashqarisida esa global emailingiz. Ya'ni local sozlama faqat o'sha loyihada ishlaydi. -
Sozlama qayerdan kelayotganini toping.
O'sha sinov papkasiga qayta kiring va
git config --show-origin user.emailyozing. Fayl yo'li.git/configni ko'rsatadimi? Tashqarida esa qaysi faylni ko'rsatadi?Kutilgan natija: ichida
file:.git/config, tashqarisida esa uy papkangizdagi.gitconfigfaylining to'liq yo'li. Mashq tugagach o'sha sinov papkasini o'chirib tashlang.
Uchalasi kutgandek chiqsa, Git sozlamalari qanday ishlashini tushundingiz — seriyaning qolgan qismida bu bilim ko'p asqotadi.
Shu qismning buyruqlari#
| Buyruq | Vazifasi |
|---|---|
git config --global user.name "Ism" |
Barcha loyihalarning commitlarida turadigan ismni o'rnatish |
git config --global user.email "email" |
Barcha loyihalarning commitlarida turadigan emailni o'rnatish |
git config --global init.defaultBranch main |
Yangi loyihalarda boshlang'ich branch nomini main qilish |
git config user.email |
Joriy loyihada qaysi email ishlayotganini ko'rish |
git config --show-origin user.email |
Sozlama qaysi fayldan kelayotganini ko'rish |
git config --global --list |
Barcha global sozlamalar ro'yxati |
git log -1 --format="%an <%ae>" |
Oxirgi commitni kim yozgani |
git commit --amend --reset-author --no-edit |
Oxirgi commit muallifini to'g'rilash |
Git'niki bo'lmagan bitta buyruq ham uchradi:
| Buyruq | Vazifasi |
|---|---|
rm -rf <papka> |
Papkani ichidagisi bilan o'chirish ⚠️ |
Keyingi qismda#
Git tayyor, lekin hali bironta loyihamiz yo'q. Keyingi qismda xarajat
degan kichik Python skriptini boshlaymiz va Git'ning eng asosiy mexanizmini birgalikda
ochamiz: fayl commitgacha uch bosqichdan o'tadi va ko'pchilikni
boshida chalkashtiradigan git add aynan shu yerda tushuniladi.