Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

Git Diff: एक कैसे-करें गाइड

git diff कमांड दो कमिट्स में फ़ाइलों के बीच या आपके वर्तमान रिपॉजिटरी और पिछले कमिट के बीच अंतर दिखाता है। यह कमांड उन फ़ाइलों के लिए हेडर्स और मेटाडेटा द्वारा दर्शाए गए परिवर्तनों को प्रदर्शित करता है जो बदल गए हैं।

जब आप Git वर्जन कंट्रोल सिस्टम के साथ काम कर रहे होते हैं, तो आप अपने रिपॉजिटरी में डेटा की तुलना किसी अन्य डेटा स्रोत से करना चाह सकते हैं। उदाहरण के लिए, आप दो अलग-अलग कमिट्स की तुलना करना चाह सकते हैं, या दो फ़ाइलों की।

यहीं डिफ फंक्शन काम आता है। डिफिंग एक फंक्शन है जो दो इनपुट स्वीकार करता है और उन डेटा स्रोतों के बीच मौजूद परिवर्तनों को प्रस्तुत करता है। डिफ फंक्शन्स को ब्रांचेज़, फ़ाइलों और कमिट्स पर निष्पादित किया जा सकता है।

यह ट्यूटोरियल, उदाहरणों के साथ, Git के साथ डिफिंग की मूल बातें और git diff कमांड का उपयोग कैसे करें, इस पर चर्चा करेगा। इस ट्यूटोरियल को पढ़ने के अंत तक, आप git diff कमांड का उपयोग करने में विशेषज्ञ होंगे।

Git Diff कमांड

git diff कमांड दो कमिट्स में फ़ाइलों के बीच या एक कमिट और आपके वर्तमान रिपॉजिटरी के बीच अंतर प्रदर्शित करता है। आप देख सकते हैं कि किसी फ़ाइल में क्या टेक्स्ट जोड़ा गया, हटाया गया, और बदला गया है।

यहाँ git diff कमांड के लिए सिंटैक्स है:

git diff

डिफ़ॉल्ट रूप से, git diff कमांड आपके रिपॉजिटरी में किसी भी अनकमिटेड परिवर्तन को प्रदर्शित करता है।

हम अपने मूल फ़ाइल से हटाई गई लाइनों के साथ-साथ हमारी मूल फ़ाइल में जोड़ी गई या बदली गई किसी भी लाइन को देख सकते हैं। अक्सर, Git diff का उपयोग Git रिपॉजिटरी में ब्रांचेज़ की तुलना के लिए किया जाता है।

कमिट्स के बीच Git Diff

आप उन कमिट्स को संदर्भित करने वाले रेफ़ का नाम निर्दिष्ट करके दो Git कमिट्स के बीच फ़ाइलों की तुलना कर सकते हैं। एक रेफ़ एक कमिट ID या HEAD हो सकता है, जो वर्तमान ब्रांच को संदर्भित करता है।

git diff <commit1> <commit2>

आइए हमारे Git रिपॉजिटरी में दो कमिट्स की तुलना करें।

ऐसा करने के लिए, आपको पहले उन कमिट्स की ID पुनः प्राप्त करने की आवश्यकता है जिनकी फ़ाइलों की आप तुलना करना चाहते हैं। आप git log --pretty=oneline कमांड का उपयोग करके इस कार्य को पूरा कर सकते हैं, जो एक रिपॉजिटरी में सभी कमिट्स का संक्षिप्त सारांश लौटाता है:

git log --pretty=oneline

यह कमांड लौटाता है:

5141ea9c41cdc7152408bfcab54a910f34441855 (HEAD -> master) feat: Update README.md 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e docs: Create README.md

अब, मान लें कि हम इन दो कमिट्स की तुलना करना चाहते हैं। हम इस कमांड का उपयोग करके ऐसा कर सकते हैं:

git diff 5141ea9c41cdc7152408bfcab54a910f34441855 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e

उपरोक्त कमांड हमारे दो कमिट्स में एक डिफ ऑपरेशन करेगा।

ब्रांचेज़ के बीच Git Diff

diff कमांड का उपयोग करके दो Git ब्रांचेज़ की तुलना करने के लिए, उन दो ब्रांचेज़ को आर्गुमेंट के रूप में निर्दिष्ट करें जिन्हें आप तुलना करना चाहते हैं। आपको प्रत्येक ब्रांच नाम के बीच दो डॉट्स का उपयोग करने की आवश्यकता है। ये डॉट्स इंगित करते हैं कि आप प्रत्येक ब्रांच में नवीनतम कमिट को पढ़ना चाहते हैं और उनकी तुलना करना चाहते हैं:

git diff <branch1>..<branch2>

मान लें कि हम अपने रिपॉजिटरी में "master" ब्रांच की तुलना "dev-v0.9" नामक ब्रांच से करना चाहते हैं। हम इस कमांड का उपयोग करके ऐसा कर सकते हैं:

git diff master dev-v0.9

जब यह कमांड निष्पादित होता है, तो हमारे कोडबेस में "master" और "dev-v0.9" ब्रांचेज़ के बीच एक डिफ चलाया जाएगा।

इसी तरह, आप दो अलग-अलग ब्रांचेज़ में विशिष्ट फ़ाइलों की तुलना कर सकते हैं। ऐसा करने के लिए, आप उपरोक्त के समान सिंटैक्स का उपयोग कर सकते हैं और अतिरिक्त रूप से उस फ़ाइल को निर्दिष्ट कर सकते हैं जिसकी आप तुलना करना चाहते हैं।

मान लें कि हम अपने "master" और "dev-v0.9" ब्रांचेज़ में README.md फ़ाइल की तुलना करना चाहते हैं। हम इस कोड का उपयोग करके ऐसा कर सकते हैं:

git diff master dev-v0.9 ./README.md

यह README.md फ़ाइल की तुलना करेगा (जो हमारे वर्तमान डायरेक्टरी में है, जिसे ./ सिंटैक्स द्वारा दर्शाया गया है) "master" और "dev-v0.9" ब्रांचेज़ में।

Git Diff कमांड उदाहरण

मान लें कि हमने एक ब्लैंक रिपॉजिटरी इनिशियलाइज़ की है, और हम अपने रिपॉजिटरी को README.md फ़ाइल के साथ शुरू करना चाहते हैं। हमने अपने रिपॉजिटरी में एक README.md फ़ाइल बनाई है जिसमें निम्न वाक्य है:

This is an example of the Git diff feature.

फ़ाइलें और कमिट्स तैयार करें

हम git commit कमांड का उपयोग करके इस फ़ाइल के साथ एक कमिट बनाने जा रहे हैं:

git commit

यह हमें अपने रिपॉजिटरी में किए गए परिवर्तनों को सहेजने की अनुमति देता है। git कमांड लौटाता है:

[master (root-commit) 749055e] docs: Create README.md 1 file changed, 1 insertion(+) create mode 100644 README.md

यदि हम इस चरण में git diff कमांड चलाते हैं, तो कुछ नहीं होगा। ऐसा इसलिए है क्योंकि हमारे रिपॉजिटरी को इनिशियलाइज़ किया गया है, और हमारे रिपॉजिटरी में किसी भी फ़ाइल के बीच कोई परिवर्तन नहीं हैं। अब जब हमारे पास एक बुनियादी रिपॉजिटरी है, तो हम अपने रिपॉजिटरी में फ़ाइलों की सामग्री को बदल सकते हैं। यह हमें git diff कमांड को क्रिया में देखने की अनुमति देगा।

मान लें कि हम README.md फ़ाइल में वाक्य "We just added this line to our file." जोड़ना चाहते हैं। हम ऐसा इस कमांड का उपयोग करके कर सकते हैं:

echo "We just added this line to our file." >> README.md

उपरोक्त कमांड हमारे वाक्य को README.md फ़ाइल में जोड़ता है।

इसका मतलब है कि अब हमारे प्रारंभिक README.md फ़ाइल और हमारे रिपॉजिटरी में वर्तमान README.md फ़ाइल के बीच अंतर है।

git diff कमांड निष्पादित करके, हम इन दो फ़ाइलों के बीच अंतर देख सकते हैं। डिफ़ॉल्ट रूप से, git diff कमांड नवीनतम कमिट और रिपॉजिटरी की वर्तमान स्थिति के बीच सभी फ़ाइलों के लिए एक डिफ उत्पन्न करता है।

कमिट्स के बीच Git Diff चलाएं

जब हम कमांड चलाते हैं, तो निम्न प्रतिक्रिया लौटाई जाती है:

diff --git a/README.md b/README.md index f808522..f08e544 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ +We have just added this line to our file.

This is an example of the Git diff feature.

यह git diff कमांड से एक विशिष्ट परिणाम है। हमारा परिणाम दिखाता है कि हमारी फ़ाइल में क्या जोड़ा या हटाया गया है एक संयुक्त डिफ फॉर्मेट में।

git diff कमांड हमारे अंतिम कमिट और हमारे वर्तमान रिपॉजिटरी के बीच सभी फ़ाइलों में सभी परिवर्तनों की एक सूची लौटाता है।

यदि आप किसी रिपॉजिटरी में किसी विशिष्ट फ़ाइल में किए गए परिवर्तनों को पुनः प्राप्त करना चाहते हैं, तो आप उस फ़ाइल को तीसरे पैरामीटर के रूप में निर्दिष्ट कर सकते हैं। मान लें कि हम केवल README.md फ़ाइल में किए गए परिवर्तनों को देखना चाहते हैं।

इस उदाहरण में, हमने केवल README.md फ़ाइल को बदला है, इसलिए केवल वे परिवर्तन वैसे भी दिखाए जाएंगे। लेकिन यदि हम एक बड़े रेपो के साथ काम कर रहे थे, तो हम केवल एक फ़ाइल में परिवर्तनों की तुलना करना चाह सकते हैं। ऐसा करने के लिए, हम इस कमांड का उपयोग कर सकते हैं:

git diff README.md

यह कमांड हमें हमारी वर्तमान README.md फ़ाइल की तुलना हमारे रिपॉजिटरी में अंतिम बार कमिट किए गए संस्करण से करने की अनुमति देता है।

Git Diff ब्रेकडाउन

Git diffs में कई घटक होते हैं जिनका उपयोग हम रिपॉजिटरी में फ़ाइल के बीच परिवर्तनों का विश्लेषण करने के लिए कर सकते हैं। आइए उन्हें हमारे पिछले उदाहरण के संदर्भ में तोड़ते हैं।

इनपुट फ़ाइलें

हमारे डिफ का पहला घटक इनपुट फ़ाइलें है। डिफ का यह भाग हमें बताता है कि डिफ में किन फ़ाइलों की तुलना की जा रही है।

हम वर्तमान संस्करण में README.md फ़ाइल की तुलना हमारे कोड के अंतिम संस्करण में README.md फ़ाइल से कर रहे हैं। यह हमारे कोड की पहली पंक्ति पर बताया गया है:

diff --git a/README.md b/README.md

मेटाडेटा

इसके बाद, हमारे डिफ में हमारे Git रिपॉजिटरी के लिए मेटाडेटा होता है। यह मेटाडेटा Git द्वारा आपके द्वारा फ़ाइल में किए गए परिवर्तनों को ट्रैक करने के लिए उपयोग किए जाने वाले ऑब्जेक्ट वर्जन लेबल को प्रदर्शित करता है।

यह जानकारी डिफ कमांड के अधिकांश मामलों में शायद ही कभी उपयोग की जाती है। हमारे उपरोक्त उदाहरण में, मेटाडेटा इस तरह दिखता है:

index f808522..f08e544 100644

चेंज मार्कर्स

Git diff आउटपुट का अगला भाग चेंज मार्कर्स है। ये फ़ाइल पैटर्न मार्कर हमें बताते हैं कि हमारी फ़ाइलों में किस प्रकार के परिवर्तन किए गए हैं। हमारे उपरोक्त उदाहरण के लिए चेंज मार्कर्स हैं:

--- a/README.md +++ b/README.md

ये मार्कर हमें बताते हैं कि a/README.md से परिवर्तन किए गए हैं (माइनस साइन्स द्वारा दर्शाया गया), जो b/README.md में परिलक्षित होते हैं (प्लस साइन्स द्वारा दर्शाया गया)।

कोड परिवर्तन

अंत में, हमारे डिफ हमारे कोड में किए गए परिवर्तनों की सूची लौटाता है। एक पूर्ण फ़ाइल तुलना के विपरीत, diffs केवल फ़ाइल के उन खंडों को दिखाते हैं जिन्हें बदला गया है। हमारे उदाहरण में, हमने अपनी फ़ाइल में एक लाइन जोड़ी, जिसने निम्न परिणाम लौटाया:

@@ -1 +1,2 @@ This is an example of the Git diff feature. +We have just added this line to our file.

पहली लाइन हमारी फ़ाइल में किए गए परिवर्तनों का सारांश है। यह हमें बताता है कि हमने अपनी फ़ाइल में कोड की एक लाइन जोड़ी है (+1) जो दूसरी लाइन (2) से शुरू होती है।

फिर, हमें किए गए परिवर्तनों की एक सूची दिखाई जाती है। जैसा कि आप देख सकते हैं, क्योंकि हमने लाइन "We have just added this line to our file." जोड़ी, वह लाइन हमारे डिफ में दिखाई देती है। प्लस साइन हमें बताता है कि हमने उस लाइन को फ़ाइल में जोड़ा।

निष्कर्ष

डिफिंग Git में एक उपयोगी फंक्शन है जो आपको Git रिपॉजिटरी में दो फ़ाइलों, ब्रांचेज़, या कमिट्स की तुलना करने की अनुमति देता है। यह आपको यह देखने की अनुमति देता है कि आपके रिपॉजिटरी में एक निश्चित बिंदु से क्या परिवर्तन किए गए हैं।

इस ट्यूटोरियल ने Git के साथ डिफिंग की मूल बातें और डिफ ऑपरेशन करने के लिए git diff कमांड का उपयोग कैसे करें, इस पर चर्चा की। अब आप git diff कमांड का उपयोग विशेषज्ञ की तरह शुरू करने के लिए ज्ञान से लैस हैं!

Git पर अधिक शिक्षण संसाधनों के लिए, हमारा How to Learn Git गाइड देखें।

  1. Git Cherry Pick: चरण-दर-चरण गाइड Git Cherry Pick: चरण-दर-चरण गाइड

    शुरुआती डेवलपर्स के रूप में, हम दोहराव के माध्यम से Git सीखते हैं। हम जल्दी सीखते हैं कि git pull, git push, और git commit का प्रत्येक का क्या अर्थ है। जैसे-जैसे हम बड़े प्रोजेक्ट्स पर काम करने और टीमों के साथ सहयोग करने के लिए संक्रमण करते हैं, हम अधिक उन्नत Git कमांड्स सीखना शुरू करते हैं जो एक प्

  1. - Git Add के लिए चरण-दर-चरण गाइड

    git add कमांड फ़ाइल या फ़ोल्डर को स्टेजिंग एरिया में जोड़ता है। स्टेजिंग एरिया में वे फ़ाइलें होती हैं जिन्हें आप अपने अगले कमिट में जोड़ना चाहते हैं। Git add आपके रिपॉजिटरी या फ़ाइलों को संशोधित या अन्यथा प्रभावित नहीं करता। Git वर्जन कंट्रोल सिस्टम में एक साधारण सेव फीचर नहीं है। Git कमिटिंग नामक

  1. - SQL CREATE TABLE: एक हाउ-टू गाइड

    SQL CREATE TABLE स्टेटमेंट डेटाबेस में एक टेबल जोड़ता है। इस स्टेटमेंट का उपयोग करके, आप नई टेबल में कॉलम के नाम और प्रत्येक कॉलम द्वारा संग्रहीत किए जा सकने वाले डेटा के प्रकार निर्दिष्ट कर सकते हैं। आप टेबल में डेटा कैसे प्रस्तुत किया जाता है, उससे संबंधित किसी भी प्रतिबंध को भी बता सकते हैं। इसस