अपने Mac पर किसी Git रिपॉजिटरी में यह देखने के लिए कि कोई ट्रैक की गई फ़ाइल पुराने संस्करण से किस प्रकार भिन्न है, Terminal खोलें, रिपॉजिटरी में जाएँ, और git diff REVISION -- path/to/file चलाएँ। REVISION को HEAD~1 जैसे किसी कमिट से बदलें और पाथ को फ़ाइल के रिपॉजिटरी-सापेक्ष पाथ से बदलें। यह उस कमिट किए गए संस्करण की तुलना आपकी वर्किंग ट्री में वर्तमान में मौजूद फ़ाइल से करता है; यह फ़ाइल को नहीं बदलता है।

रिपॉजिटरी में Terminal खोलें

Finder में, रिपॉजिटरी फ़ोल्डर ढूँढें। Terminal खोलें, अंत में एक स्पेस के साथ cd टाइप करें, रिपॉजिटरी फ़ोल्डर को Terminal विंडो में खींचें (ड्रैग करें), फिर Return दबाएँ। Apple फ़ाइल और फ़ोल्डर पाथ निर्दिष्ट करने के एक तरीके के रूप में Terminal में आइटम ड्रैग करने का दस्तावेज़ीकरण करता है। जाँचें कि आप Git वर्किंग ट्री में हैं:

git status

यदि Git यह रिपोर्ट करता है कि वर्तमान डायरेक्टरी कोई रिपॉजिटरी नहीं है, तो रिपॉजिटरी के शीर्ष-स्तरीय फ़ोल्डर में बदलें और पुनः प्रयास करें। Apple के अनुसार, macOS पर Terminal डिफ़ॉल्ट रूप से zsh का उपयोग करता है। नीचे दिए गए कमांड उस शेल में काम करते हैं; वे कोटेड पाथ का उपयोग करते हैं ताकि नामों में स्पेस सुरक्षित रहें।

वर्तमान फ़ाइल की तुलना पुराने रिवीज़न से करें

इस प्रारूप का उपयोग करें:

git diff REVISION -- "path/to/file"

उदाहरण के लिए, वर्तमान HEAD से एक फ़र्स्ट-पैरेंट कमिट पहले के संस्करण के साथ वर्तमान Sources/Menu.swift फ़ाइल की तुलना करने के लिए, चलाएँ:

git diff 'HEAD~1' -- "Sources/Menu.swift"

-- रिवीज़न और विकल्प तर्कों (ऑर्ग्युमेंट्स) के अंत और पाथ की शुरुआत को चिह्नित करता है। Git इस प्रारूप को नामित कमिट के साथ वर्किंग ट्री की तुलना करने के रूप में प्रलेखित करता है। आउटपुट में, - से शुरू होने वाली पंक्तियाँ पुराने संस्करण से हैं, + पंक्तियाँ वर्तमान फ़ाइल से हैं, और आसपास की अचिह्नित पंक्तियाँ संदर्भ प्रदान करती हैं। Git diff documentation

HEAD~1 का अर्थ है वर्तमान कमिट का पहला पैरेंट; HEAD~2 दो फ़र्स्ट-पैरेंट चरणों का अनुसरण करता है। यह हाल के इतिहास के लिए आसान है, लेकिन हो सकता है कि यह आपके मनमुताबिक सटीक बदलाव की पहचान न करे, विशेष रूप से मर्ज के आसपास। Git का रिवीज़न सिंटैक्स ब्रांच नाम, टैग और कमिट आईडी भी स्वीकार करता है। जब आपको किसी विशिष्ट ऐतिहासिक बिंदु की आवश्यकता हो, तो आपके द्वारा पहचानी गई कमिट का उपयोग करें। Git revision syntax

फ़ाइल को बदलने वाले किसी कमिट को ढूँढने के लिए, उसके इतिहास का निरीक्षण करें:

git log --oneline -- "Sources/Menu.swift"

आउटपुट से प्रासंगिक कमिट आईडी कॉपी करें, फिर इसे diff कमांड में उपयोग करें:

git diff 4f2a9c1 -- "Sources/Menu.swift"

4f2a9c1 को अपनी रिपॉजिटरी में दिखाई गई वास्तविक आईडी से बदलें। Git एक स्पष्ट संक्षिप्त कमिट आईडी स्वीकार करता है; यदि यह अस्पष्ट या अमान्य है, तो लंबी आईडी या किसी अन्य रिवीज़न नाम का उपयोग करें।

वह तुलना चुनें जो आपके प्रश्न से मेल खाती हो

वर्किंग-ट्री तुलना में फ़ाइल के सभी वर्तमान संपादन शामिल होते हैं, चाहे वे staged हों या unstaged। यदि इसके बजाय आप दो कमिट किए गए संस्करणों की तुलना करना चाहते हैं, तो दोनों रिवीज़न प्रदान करें:

git diff OLD_REV NEW_REV -- "Sources/Menu.swift"

उदाहरण के लिए, git diff 'HEAD~3' HEAD -- "Sources/Menu.swift" कमिट की गई फ़ाइल की तुलना तीन फ़र्स्ट-पैरेंट चरण पीछे के संस्करण की वर्तमान कमिट के संस्करण से करता है। इसमें अनकमिटेड संपादन शामिल नहीं हैं। Git दो-कमिट वाले प्रारूप को दो मनमाने कमिट की तुलना करने के रूप में वर्णित करता है। Git diff documentation

यदि आप अगले कमिट के लिए staged संस्करण से तुलना करना चाहते हैं, तो Git का --cached प्रारूप इंडेक्स की तुलना किसी कमिट से करता है। उदाहरण के लिए:

git diff --cached HEAD -- "Sources/Menu.swift"

यह वर्तमान वर्किंग फ़ाइल की तुलना करने से एक अलग प्रश्न का उत्तर देता है: यह HEAD के सापेक्ष staged परिवर्तनों को दिखाता है।

खाली आउटपुट और सामान्य त्रुटियों को समझें

कोई diff आउटपुट न होने का सामान्यतः अर्थ है कि Git चुने हुए रिवीज़न और चयनित वर्तमान स्थिति के बीच उस पाथ के लिए कोई अंतर नहीं देखता है। पाथ की वर्तनी और कैपिटलाइज़ेशन की पुष्टि करें, और सुनिश्चित करें कि आप सही रिपॉजिटरी के अंदर हैं। यदि Git कहता है कि रिवीज़न में पाथ अज्ञात है, तो हो सकता है कि वह फ़ाइल तब तक मौजूद न रही हो, या पाथ बदल गया हो। नाम बदली गई या हटाई गई फ़ाइल का निरीक्षण करने के लिए, उसके ऐतिहासिक पाथ का उपयोग करें और प्रासंगिक कमिट की फ़ाइल सूची या लॉग की जाँच करें।

जिस फ़ाइल को Git ने कभी ट्रैक नहीं किया है, उसके पास तुलना करने के लिए कोई कमिट किया गया संस्करण नहीं होता है। साथ ही, Git का सामान्य टेक्स्ट diff बाइनरी फ़ाइलों के लिए पढ़ने योग्य पंक्ति-दर-पंक्ति तुलना प्रदान नहीं कर सकता है। कमांड परिवर्तन प्रदर्शित करता है; यह पुराने संस्करण को पुनर्स्थापित नहीं करता है। जब आपका लक्ष्य केवल निरीक्षण करना हो, तो git checkout या git restore से बचें, क्योंकि उन कमांड का फ़ाइलों पर अलग प्रभाव पड़ता है।

अधिक सटीक समीक्षा के लिए, एक छोटी संदर्भ संख्या जोड़ें, जैसे कि git diff -U1 'HEAD~1' -- "Sources/Menu.swift"। Git का -U विकल्प नियंत्रित करता है कि आसपास की कितनी संदर्भ पंक्तियाँ दिखाई देंगी। एक बार जब आपके पास वांछित रिवीज़न और पाथ हो, तो यह कमांड आपकी फ़ाइल को छुए बिना क्या भिन्न है, इसका सीधा और दोहराने योग्य दृश्य प्रदान करता है।

स्रोत