कमिट लूप


मान लीजिए आप पिछले बीस मिनट से weather-app पर काम कर रहे हैं। आपने src/index.js में एक वास्तविक बग ठीक किया, तापमान रूपांतरण गलत था, और जब आप वहां थे तो आपने styles.css को रीस्टाइल करना भी शुरू किया, लेकिन वह परिवर्तन अधूरा है और किसी और को दिखाने के लिए तैयार नहीं है। आप बग फिक्स को अभी अपने आप में एक चेकपॉइंट के रूप में सहेजना चाहते हैं, बिना अधूरी स्टाइलिंग को इसके साथ खींचे।
यह बिल्कुल वही है जिसके लिए कमिट लूप है। यदि आपने अभी तक एक रिपोजिटरी सेट अप नहीं की है, Your first repository git init और क्लोनिंग के बारे में बताता है। यहां से, यह अध्याय मानता है कि आपके पास एक खुला है।
तीन स्टॉप: वर्किंग डायरेक्टरी, स्टेजिंग एरिया, कमिट
Git में आप जो भी परिवर्तन करते हैं वह स्थायी इतिहास बनने से पहले तीन स्टॉप से गुजरता है। आपकी वर्किंग डायरेक्टरी वह प्रोजेक्ट है जैसा वह अभी डिस्क पर दिखता है, वह फाइलें जिन्हें आप सक्रिय रूप से संपादित कर रहे हैं। स्टेजिंग एरिया एक होल्डिंग स्पॉट है जहां आप वास्तव में जो परिवर्तन अगली बार सहेजना चाहते हैं उन्हें रखते हैं। एक कमिट स्वयं सहेजा गया स्नैपशॉट है, एक बार जब आप इसे लिख देते हैं, साथ ही इसे वर्णित करने वाला संदेश।
एक चाल के लिए सामान पैक करने की कल्पना करें। आपका पूरा घर वर्किंग डायरेक्टरी है: आपके पास जो कुछ भी है, जो भी स्थिति में हो। वह बॉक्स जो आपने पैक किए हैं और सामने के दरवाजे के पास टेप किए हैं वह स्टेजिंग एरिया है: केवल वह जो आपने जानबूझकर ले जाने के लिए चुना है। वह मूविंग ट्रक जो उन बॉक्स के साथ दूर जाता है वह कमिट है: यह एक रिकॉर्ड है कि उस पल बिल्कुल क्या चला गया, बाहर की ओर एक लेबल के साथ जो कहता है कि अंदर क्या है।
यहां वह मानसिक मॉडल एक वास्तविक टर्मिनल में दिख रहा है। weather-app में दोनों फाइलों को संपादित करने के बाद, git status वर्तमान स्थिति को कुछ भी बदले बिना पढ़ता है:
$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: src/index.js
modified: styles.css
no changes added to commit (use "git add" to commit)दोनों फाइलें "अनस्टेजड" के रूप में दिखाई देती हैं क्योंकि फाइल को संपादित करना केवल आपकी वर्किंग डायरेक्टरी को बदलता है। git add के साथ Git को इसे वहां रखने के लिए कहने तक कुछ भी स्टेजिंग एरिया में नहीं जाता है, जो अगला भाग है।
यह वह जगह है जहां स्टेजिंग एरिया के अस्तित्व का पूरा कारण स्पष्ट हो जाता है। स्टेजिंग एरिया आपको बिल्कुल यह चुनने देता है कि आपके कमिट में क्या जाता है, जो कुछ भी अभी भी आपकी वर्किंग डायरेक्टरी में संपादित बैठा है उससे स्वतंत्र। इसके बिना, एक चेकपॉइंट को सहेजना आपको एक बार में डिस्क पर हर परिवर्तन लेने के लिए मजबूर करेगा, तैयार हों या न हों।
इसके साथ, आप src/index.js में समाप्त बग फिक्स को स्टेज कर सकते हैं, अधूरे styles.css को छोड़ सकते हैं, और केवल उस हिस्से को कमिट कर सकते हैं जो वास्तव में पूरा है। यह एक विवरण, कि स्टेजिंग और आपकी वर्किंग डायरेक्टरी एक ही समय में विभिन्न चीजें पकड़ सकते हैं, पहले हफ्ते में लगभग सभी को भ्रमित करता है। एक बार जब यह क्लिक हो जाता है, तो Git के बाकी दैनिक वर्कफ़्लो बहुत अधिक समझदारी में आता है।
git add के साथ क्या जाता है यह चुनते हैं, और यह वही है जो आपको एक समाप्त परिवर्तन को सहेजने देता है जबकि एक अधूरा परिवर्तन छोड़ देता है। परिवर्तन स्टेज करना: git add
git add एक परिवर्तन को आपकी वर्किंग डायरेक्टरी से स्टेजिंग एरिया में ले जाता है। उस फाइल की ओर इशारा करें जिसके परिवर्तन आप अगली कमिट में चाहते हैं:
$ git add src/index.js
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: src/index.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: styles.csssrc/index.js "कमिट के लिए तैयार परिवर्तन" में चला गया, बग फिक्स स्टेज किया गया है और तैयार है। styles.css अभी भी "अनस्टेजड" के तहत सूचीबद्ध है, बिल्कुल वह जगह जहां आप इसे चाहते हैं जबकि रीस्टाइल अधूरा है। git add styles.css भी चलाने से यह भी स्टेज हो जाएगा; git add . वर्तमान फोल्डर में हर बदली गई फाइल को एक बार में स्टेज करता है, जो सुविधाजनक है एक बार जब आप विश्वास करते हैं कि डिस्क पर सब कुछ वास्तव में जाने के लिए तैयार है।
git add <file> उस फाइल के वर्तमान परिवर्तनों को स्टेजिंग एरिया में ले जाता है, अगली कमिट के लिए तैयार। फाइलें जो आपने अभी तक जोड़ी नहीं हैं वह बाहर रहती हैं, इसलिए आप एक चीज को समाप्त कर सकते हैं और दूसरे को मध्य-संपादन में छोड़ सकते हैं। git add . एक बार में हर बदली गई फाइल को स्टेज करता है, एक बार सब कुछ वास्तव में तैयार होने के बाद सुविधाजनक। स्नैपशॉट सहेजना: git commit
एक बार स्टेजिंग एरिया में आप क्या चाहते हैं, git commit इसे एक स्थायी स्नैपशॉट के रूप में सहेजता है, -m फ्लैग के साथ (संदेश के लिए छोटा) विवरण प्रदान करते हुए जो इसके साथ जाता है:
$ git commit -m "Fix temperature conversion in Celsius-to-Fahrenheit formula"
[main 4f2a1c9] Fix temperature conversion in Celsius-to-Fahrenheit formula
1 file changed, 1 insertion(+), 1 deletion(-)केवल src/index.js चला गया, क्योंकि यह सब कुछ है जो आपने स्टेज किया। styles.css अभी भी आपकी वर्किंग डायरेक्टरी में संपादित बैठा है, अछूता, जब भी रीस्टाइल पूरा हो तब के लिए इंतजार कर रहा है। छोटी आईडी, 4f2a1c9, इस सटीक कमिट का नाम देता है, और History अध्याय इसी तरह एक प्रोजेक्ट की कमिट की पूरी सूची पढ़ने के बारे में बताता है।
git commit -m "संदेश" वर्तमान में स्टेजड को जो भी है एक स्थायी स्नैपशॉट के रूप में सहेजता है, आप जो संदेश देते हैं उसके साथ। कुछ भी आपने स्टेज नहीं किया वह बाहर रहता है और संपादन योग्य रहता है। संदेश को संक्षिप्त रखें और स्पष्ट करें कि कमिट क्या करता है, भविष्य आप इसे उम्मीद से अधिक बार वापस पढ़ेंगे। 
