Last chance! 50% off DataCamp Premium
Sale ends in
क्या आपके कमिट Git हिस्ट्री में गलत नाम के साथ दिख रहे हैं?
आपने कमिट किया, टीम रिपो पर पुश किया, और अचानक आपका सहकर्मी पूछता है कि "unknown" कौन है। या इससे भी बुरा, आपके व्यक्तिगत ईमेल का नाम वर्क प्रोजेक्ट पर दिख रहा है। यह नौसिखिया-स्तर की गलती है, लेकिन हम सभी वहां रहे हैं। Git हर कमिट के साथ एक नाम और ईमेल सेव करता है ताकि टीमें ट्रैक रख सकें कि किसने क्या बदला, और जब यह सेटअप ठीक से नहीं होता, तो आपके कमिट किसी और के लगते हैं।
समाधान सरल है: Git आपके कॉन्फ़िग सेटिंग्स से user.name और user.email का उपयोग करता है। जब लोग "git config username" कहते हैं, तो उनका मतलब user.name होता है। और नहीं, यह आपका GitHub username नहीं है।
इस लेख में, मैं आपको ग्लोबली या लोकली Git username सेट करने, वर्तमान कॉन्फ़िग जांचने, अलग-अलग प्रोजेक्ट्स के लिए अलग नाम इस्तेमाल करने, और सामान्य username समस्याओं को ठीक करने की प्रक्रिया समझाऊंगा।
ये दो कमांड पर्याप्त हैं:
# Set Git username globally (all repos)
git config --global user.name "Your Name"
# Set Git username for the current repo only
git config user.name "Your Name"
ग्लोबल कॉन्फ़िग आपकी मशीन के सभी रिपॉज़िटरी पर लागू होती है, जब तक कोई विशेष रिपो इसे ओवरराइड न कर दे।
साधारण git config कमांड (--global के बिना) केवल उसी रिपॉज़िटरी को प्रभावित करता है, जिसमें आप अभी हैं।
अगले कमिट के लिए Git क्या उपयोग करेगा, यह जांचने हेतु यह कमांड चलाएं:
git config user.name
यह आपके वर्तमान स्थान के लिए सक्रिय username दिखाता है — या तो लोकल रिपो सेटिंग, या यदि लोकल सेटिंग नहीं है तो ग्लोबल फॉलबैक।
git config user.name
यह आपके वर्तमान स्थान के लिए सक्रिय username दिखाता है — या तो लोकल रिपो सेटिंग, या यदि लोकल सेटिंग नहीं है तो ग्लोबल फॉलबैक।

Git हर कमिट में दो जानकारियाँ जोड़ता है: एक लेखक का नाम और एक लेखक का ईमेल।
ये सीधे आपके Git कॉन्फ़िग के user.name और user.email से आते हैं। जब आप git commit चलाते हैं, Git उस समय सेट वैल्यू लेता है और उन्हें उस कमिट के मेटाडाटा में हमेशा के लिए दर्ज कर देता है। आपके साथी इन्हें git log, ब्लेम व्यूज़, और पुल रिक्वेस्ट्स में देखते हैं।
Git इन जानकारियों को वैलिडेट नहीं करता।
आप अपना नाम "Batman," "Linus Torvalds," या केवल अपना पहला नाम और उपनाम के शुरुआती अक्षर पर भी सेट कर सकते हैं। प्राइवेसी पर ध्यान देने वाले डेवलपर्स अक्सर सार्वजनिक ओपन-सोर्स काम के लिए अपने पूरे कानूनी नाम के बजाय उपनाम या हैंडल का उपयोग करते हैं। Git को फर्क नहीं पड़ता। वह वही रिकॉर्ड करता है जो आप बताते हैं।
बस एक बात याद रखें कि आपका Git username, आपका GitHub username नहीं है।
आपका Git username (user.name) वही है जो आप लोकली कॉन्फ़िगर करते हैं। आपका GitHub username आपके अकाउंट का हैंडल है, यानी URL जैसे github.com/your-handle में दिखने वाली चीज़। ये पूरी तरह अलग सिस्टम हैं और मेल खाना ज़रूरी नहीं।
GitHub और GitLab जैसे होस्टिंग प्लेटफ़ॉर्म आपके ईमेल पते का उपयोग करके कमिट्स को आपके अकाउंट से जोड़ते हैं। नाम केवल डिस्प्ले के लिए होता है। यदि आपका कमिट ईमेल आपके GitHub अकाउंट पर जोड़े गए किसी ईमेल से मेल खाता है, तो GitHub आपका प्रोफ़ाइल चित्र दिखाएगा और अकाउंट से लिंक करेगा। user.name में सेट नाम टेक्स्ट के रूप में दिखता है, लेकिन वास्तविक लिंकिंग का काम ईमेल करता है।
user.name बदलने से केवल आगे के कमिट प्रभावित होते हैं। पहले से किए और पुश किए गए पुराने कमिट अपने मूल लेखक नाम को ही रखेंगे।
Git तीन अलग-अलग स्थानों पर कॉन्फ़िगरेशन सेटिंग्स स्टोर करता है। मैं अब बताता हूँ ये क्या हैं, ताकि आपके नाम अनपेक्षित रूप से न बदलें।
सिस्टम-स्तरीय कॉन्फ़िग (--system) मशीन के हर यूज़र पर लागू होता है। व्यवहार में यह दुर्लभ है और अधिकांश डेवलपर्स इसे नहीं छूते।
ग्लोबल कॉन्फ़िग (--global) आपके OS यूज़र अकाउंट पर लागू होता है और आपकी सभी रिपॉज़िटरी को कवर करता है।
लोकल कॉन्फ़िग (--local) किसी एक रिपॉज़िटरी की .git/config फ़ाइल में रहता है और सिर्फ उसी रिपो को प्रभावित करता है।
Git यह तय करने के लिए प्राथमिकता नियमों का उपयोग करता है कि कौन-सी वैल्यू मान्य होगी।
लोकल सेटिंग्स ग्लोबल को ओवरराइड करती हैं, और ग्लोबल सिस्टम को। यदि आपने तीनों स्तरों पर user.name सेट किया है, तो उस रिपो के अंदर Git लोकल वैल्यू का उपयोग करेगा और बाकी को अनदेखा करेगा।
मान लीजिए आपके पास:
System: user.name = "System User"
Global: user.name = "Global User"
Local (किसी विशेष रिपो के अंदर): user.name = "Local User"
जब आप उस रिपो के अंदर कमिट करेंगे, Git "Local User" का उपयोग करेगा, क्योंकि यहाँ लोकल सबसे विशिष्ट है। उस रिपो के बाहर, Git आपके ग्लोबल कॉन्फ़िग से "Global User" पर लौटेगा।
आप सभी कॉन्फ़िग वैल्यू और उनका स्रोत देख सकते हैं:
git config --list
git config --list --show-origin

--show-origin फ़्लैग हर सेटिंग के साथ फ़ाइल पथ प्रिंट करता है। "Git यह नाम क्यों उपयोग कर रहा है?" जैसी दिक्कतें ऐसे ही डिबग होती हैं — आपको साफ दिखेगा कि कौन-सी कॉन्फ़िग फ़ाइल वैल्यू सेट कर रही है।
ये कॉन्फ़िग फ़ाइलें पूर्वानुमेय स्थानों पर रहती हैं: ग्लोबल सेटिंग्स के लिए ~/.gitconfig और लोकल सेटिंग्स के लिए हर रिपॉज़िटरी के अंदर .git/config। सिस्टम कॉन्फ़िग आमतौर पर Linux और macOS पर /etc/gitconfig में होती है।
जब आप git config --global user.name "Your Name" चलाते हैं, Git ~/.gitconfig में लिखता है और यह वैल्यू हर रिपो के लिए आपका डिफ़ॉल्ट बन जाती है, जब तक आप इसे लोकली ओवरराइड न करें।
आपको जानना चाहिए कि Git आपके अगले कमिट पर कौन-सा नाम दर्ज करेगा। यहाँ कुछ कमांड हैं जो चलानी चाहिए।
ये कमांड आपके Git username दिखाती हैं:
# Show the active user.name for the current repo (or global if outside a repo)
git config user.name
# Show specifically the global username
git config --global user.name
# Show everything and scan for user.name and user.email
git config --list

पहला कमांड — git config user.name — ज्यादातर समय वही चाहिए। यह वही वैल्यू दिखाता है जिसे Git वास्तव में उस रिपो में उपयोग करेगा। यदि आप किसी ऐसे रिपो में हैं जहाँ लोकल ओवरराइड है, तो आपको लोकल वैल्यू दिखेगी। अन्यथा, ग्लोबल फॉलबैक दिखेगा।
यदि आप पूरी कॉन्फ़िग सूची को फ़िल्टर करना चाहते हैं, तो इसे grep के ज़रिए पाइप कर दें:
git config --list | grep user.name
git config --list | grep user.name

यह Linux और macOS पर काम करता है। Windows पर, grep की जगह findstr का उपयोग करें।
यदि git config user.name किसी रिपो के अंदर कोई वैल्यू प्रिंट करता है, तो कमिट करते समय Git वही उपयोग करेगा।
लेकिन git config --global user.name कुछ अलग दिखा सकता है। यदि लोकल सेटिंग मौजूद है, तो Git ग्लोबल वैल्यू को अनदेखा करता है। यहीं लोग भ्रमित होते हैं। वे ग्लोबल कॉन्फ़िग बदलते हैं और सोचते हैं कि कमिट्स में पुराना नाम क्यों दिख रहा है।
इसे डिबग करने के लिए git config --list --show-origin का उपयोग करें:
git config --list --show-origin
git config --list --show-origin

यह बताता है कि हर सेटिंग किस फ़ाइल पथ से आई है — लोकल के लिए gitconfig, ग्लोबल के लिए ~/.gitconfig, या सिस्टम के लिए /etc/gitconfig। user.name को ढूंढकर आप देख पाएंगे कि कौन-सी कॉन्फ़िग फ़ाइल जीत रही है।
अधिकांश डेवलपर्स अपना Git username एक बार सेट करते हैं और फिर भूल जाते हैं। फिर भी, आवश्यकता होने पर आप इसे प्रति प्रोजेक्ट कस्टमाइज़ कर सकते हैं।
यह नया मशीन सेट करते समय वन-टाइम सेटअप है।
git config --global user.name "Your Name"
3. पुष्टि करें कि यह काम कर गया:
git config --global user.name
अब Git आपकी मशीन की हर रिपॉज़िटरी में, जब तक आप लोकली ओवरराइड न करें, हर कमिट के लिए यही नाम उपयोग करेगा।
यहीं पर अपना ईमेल भी सेट कर लें:
git config --global user.email "your.email@example.com"
कमिट्स के सही ढंग से काम करने और आपके GitHub या GitLab अकाउंट से लिंक होने के लिए दोनों वैल्यूज़ सेट होना ज़रूरी है।
git config --global user.email "your.email@example.com"
यदि आपको अलग-अलग प्रोजेक्ट्स के लिए अलग नाम चाहिए, जैसे वर्क रिपो के लिए वास्तविक नाम और ओपन-सोर्स के लिए उपनाम, उदाहरण के लिए।
एक रिपो के लिए ग्लोबल सेटिंग को ऐसे ओवरराइड करें:
1. रिपॉज़िटरी में जाएँ:
cd /path/to/your/repo
2. लोकल username सेट करें:
git config user.name "Project-Specific Name"
3. पुष्टि करें कि Git इसे उपयोग करेगा:
git config user.name
यह वैल्यू उस रिपॉज़िटरी के अंदर .git/config में रहती है और केवल उसी रिपो के लिए आपके ग्लोबल user.name को ओवरराइड करती है। आपकी मशीन के अन्य रिपो प्रभावित नहीं होंगे।
यदि आप कई प्रोजेक्ट्स पर अलग-अलग पहचान के साथ काम करते हैं, जैसे ~/work/ के अंतर्गत सभी रिपो में आपका वर्क नाम और ~/personal/ के अंतर्गत सबमें आपका उपनाम उपयोग हो, तो आप इसे includeIf से ऑटोमेट कर सकते हैं।
अपने ~/.gitconfig में यह जोड़ें:
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/personal/"]
path = ~/.gitconfig-personal
फिर ~/.gitconfig-work जैसी अलग कॉन्फ़िग फाइलें बनाएँ:
[user]
name = "Work Name"
email = "work@company.com"
और ~/.gitconfig-personal:
[user]
name = "Personal Handle"
email = "personal@email.com"
Git रिपो के स्थान के आधार पर सही पहचान अपने आप चुन लेता है। मैन्युअल स्विच करने की ज़रूरत नहीं।
बिना गड़बड़ी किए सबसे आम Git username स्थितियों को ऐसे संभालें।
अपना पर्सनल नाम ग्लोबल में सेट करें, फिर वर्क प्रोजेक्ट्स के लिए इसे ओवरराइड करें। इस तरह आपकी पर्सनल रिपो डिफॉल्ट रूप से आपकी पसंदीदा पहचान लेंगी, और वर्क रिपो आपकी प्रोफ़ेशनल पहचान।
सबसे साफ तरीका है includeIf का उपयोग कर फ़ोल्डर के आधार पर पहचान को स्वचालित रूप से स्विच करना:
# In ~/.gitconfig
[user]
name = "Personal Name"
email = "personal@email.com"
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
फिर अपनी वर्क पहचान के साथ ~/.gitconfig-work बनाएं। ~/work/ के अंतर्गत हर रिपो को वर्क नाम अपने आप मिल जाएगा। इसे मैंने पिछले सेक्शन में समझाया है।
यदि आपके पास केवल कुछ वर्क प्रोजेक्ट्स हैं, तो आप प्रति रिपो लोकल कॉन्फ़िग भी सेट कर सकते हैं, लेकिन जब आप कई रिपो में कई पहचानें संभाल रहे हों तो includeIf बेहतर स्केल करता है।
Git को फर्क नहीं पड़ता कि आप अपना कानूनी नाम इस्तेमाल करते हैं या नहीं।
आप user.name को हैंडल, पहले नाम + उपनाम के शुरुआती अक्षर, या अपनी प्राइवेसी पसंद के अनुरूप किसी भी रूप में सेट कर सकते हैं। यह ओपन-सोर्स काम में आम है जहाँ योगदानकर्ता कुछ गुमनामी चाहते हैं। बस ऐसा कुछ चुनें जिससे आपकी टीम आपके कमिट पहचान सके।
ऑटोमेटेड कमिट्स के लिए "CI Bot" या "Deploy Script" जैसे वर्णनात्मक नाम उपयोग करें ताकि वे हिस्ट्री में अलग नज़र आएँ।
git config user.name "CI Bot"
git config user.email "ci@company.com"
इस तरह, जब आप git log स्कैन करते हैं या ब्लेम एनोटेशंस की समीक्षा करते हैं, तो स्पष्ट रहता है कि कौन-से कमिट ऑटोमेशन से आए और कौन-से मानव डेवलपर्स से।
GitHub और GitLab आपके अकाउंट से कमिट्स को जोड़ने के लिए ईमेल पते का उपयोग करते हैं, नाम का नहीं। यदि आपका कमिट ईमेल आपके GitHub अकाउंट के ईमेल से मेल खाता है, तो GitHub कमिट को आपके प्रोफ़ाइल से लिंक करेगा और आपका अवतार दिखाएगा।
UI में user.name वैल्यू टेक्स्ट के रूप में दिखती है — पुल रिक्वेस्ट्स, ब्लेम व्यूज़, और कमिट हिस्ट्री में। इसे स्पष्ट रखें ताकि साथी जान सकें कि बदलाव किसने किया।
यदि git username से संबंधित कुछ भी काम नहीं कर रहा, तो कारण और समाधान संभवतः यहीं मिल जाएगा।
कमिट करने की कोशिश पर आपको ऐसा एरर दिखेगा:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
इसका मतलब Git के पास आपका user.email सेट नहीं है, और कभी-कभी user.name भी गायब होता है। दोनों को ग्लोबली सेट करके ठीक करें:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
इसके बाद, कमिट्स काम करेंगे।
देखें कि उस रिपो में Git वास्तव में कौन-सा नाम उपयोग कर रहा है:
git config user.name
यदि गलत नाम दिख रहा है, तो संभव है कोई लोकल ओवरराइड सेट हो। इसे इस कमांड से ठीक करें:
git config user.name "Correct Name"
नए कमिट्स सही नाम का उपयोग करेंगे, लेकिन पुराने कमिट (जो आपने पहले ही पुश कर दिए) अपना मूल लेखक नाम ही रखेंगे।
कमिट मेटाडाटा, कमिट बनाते समय Git हिस्ट्री में स्थायी रूप से दर्ज हो जाता है।
user.name बदलने से केवल भविष्य के कमिट प्रभावित होते हैं। यदि आपको पुराने कमिट्स पर लेखक नाम बदलना है, तो आपको git rebase --interactive या git filter-repo से हिस्ट्री फिर से लिखनी होगी। यह एडवांस्ड है, साझा ब्रांचों पर जोखिमभरा है, और अक्सर परेशानी के लायक नहीं होता।
रिपो के स्थान के आधार पर पहचान को स्वचालित रूप से स्विच करने के लिए includeIf का उपयोग करें।
इसे ~/.gitconfig में जोड़ें:
[includeIf "gitdir:~/company/"]
path = ~/.gitconfig-company
[includeIf "gitdir:~/personal/"]
path = ~/.gitconfig-personal
फिर ~/.gitconfig-company में अपनी वर्क पहचान और ~/.gitconfig-personal में अपनी पर्सनल पहचान बनाएँ। Git रिपो के स्थान के अनुसार अपने आप सही पहचान चुन लेगा — गलत नाम से कमिट करने की गलती खत्म।
संक्षेप में, अपना Git username सही सेट करना आपकी कमिट हिस्ट्री को साफ रखता है और सहयोग आसान बनाता है।
जब हर कमिट सही लेखक नाम दिखाता है, आपकी टीम बदलावों को ट्रैक कर सकती है। कोड रिव्यू तेज़ होते हैं, ब्लेम एनोटेशंस समझ में आते हैं, और प्रोजेक्ट हिस्ट्री पठनीय रहती है। जैसे-जैसे प्रोजेक्ट बढ़ते हैं और अधिक लोग योगदान देते हैं, यह और मायने रखता है।
यदि आप वर्क और पर्सनल प्रोजेक्ट्स के बीच स्विच कर रहे हैं, या अलग क्लाइंट्स के लिए अलग नाम इस्तेमाल कर रहे हैं, तो हर बार मैन्युअल रूप से कॉन्फ़िग बदलने की ज़रूरत नहीं। लोकल ओवरराइड्स या includeIf के साथ एक बार सेटअप करें, और Git हर बार सही पहचान चुन लेगा।
यदि आप बुनियादी बातों से आगे बढ़ने और Git तथा GitHub से जुड़ी सभी उलझनों को दूर करने के लिए तैयार हैं, तो ये DataCamp संसाधन आपके लिए अगला सर्वश्रेष्ठ पड़ाव हैं:
आपका Git username (user.name) वह होता है जो आप लोकली अपनी कॉन्फ़िग में सेट करते हैं। यह केवल मेटाडाटा है जिसे Git कमिट्स पर स्टैम्प करता है। आपका GitHub username आपका अकाउंट हैंडल है जो github.com/your-handle जैसे URLs में दिखता है। ये पूरी तरह अलग सिस्टम हैं और मेल खाना ज़रूरी नहीं। GitHub आपके अकाउंट से कमिट्स को जोड़ने के लिए username नहीं, बल्कि आपके ईमेल पते का उपयोग करता है।
किसी रिपो के अंदर git config user.name चलाएँ ताकि वह सक्रिय username दिखे जिसे Git आपके अगले कमिट के लिए उपयोग करेगा। यदि आपने लोकल ओवरराइड सेट किया है, तो ग्लोबल डिफॉल्ट की बजाय वही दिखेगा। वैल्यू किस कॉन्फ़िग फ़ाइल से आ रही है, यह ठीक-ठीक देखने के लिए git config --list --show-origin चलाएँ।
हाँ, और यदि आप पर्सनल और वर्क दोनों प्रोजेक्ट्स पर काम करते हैं तो ऐसा करना चाहिए। अपना पर्सनल नाम git config --global user.name "Your Name" से ग्लोबली सेट करें, फिर विशेष रिपो में git config user.name "Work Name" से ओवरराइड करें। बेहतर ऑटोमेशन के लिए, अपने ~/.gitconfig में includeIf का उपयोग करें ताकि फ़ोल्डर लोकेशन के आधार पर पहचान अपने आप स्विच हो।
कमिट मेटाडाटा, कमिट बनाते समय Git हिस्ट्री में दर्ज हो जाता है। user.name बदलने से केवल भविष्य के कमिट प्रभावित होते हैं। पुराने कमिट स्थायी रूप से अपना मूल लेखक नाम रखते हैं। पुराने नाम बदलने के लिए आपको git rebase --interactive या git filter-repo से हिस्ट्री फिर से लिखनी होगी, जो साझा ब्रांचों पर जोखिमभरा है और आमतौर पर आवश्यक नहीं।
अपने ~/.gitconfig में includeIf सेट करें ताकि रिपो के स्थान के आधार पर अलग-अलग पहचान अपने आप उपयोग हो। वर्क और पर्सनल के लिए अलग कॉन्फ़िग फाइलें बनाएँ, फिर Git रिपो के फ़ोल्डर पथ के आधार पर सही पहचान चुन लेगा। इस तरह आपको कभी मैन्युअल रूप से कॉन्फ़िग स्विच नहीं करनी पड़ेगी और न ही इस चिंता की कि आप किस नाम से कमिट कर रहे हैं।
DataCamp के साथ Git सीखें
{count, plural, one {कोर्स} other {कोर्स}}
{count, plural, one {कोर्स} other {कोर्स}}
{count, plural, one {कोर्स} other {कोर्स}}