Git: विभिन्न शाखाओं में दो अलग-अलग फ़ाइलों को कैसे अलग करें?


170

मेरे पास अलग-अलग शाखाओं में दो अलग-अलग फाइलें हैं। मैं उन्हें एक आदेश में कैसे अलग कर सकता हूं?

कुछ इस तरह

# git diff branch1/foo.txt branch2/foo-another.txt

मैं दूसरी फ़ाइल को देख सकता था, इसे अलग कर सकता था और पुनर्स्थापित कर सकता था, लेकिन यह काफी गंदा समाधान है।


3
@EugenKonkov यह एक डुप्लिकेट नहीं है क्योंकि यह प्रश्न पूछ रहा है कि विभिन्न शाखाओं में विभिन्न फ़ाइलों को कैसे अलग किया जाए। जुड़ा हुआ प्रश्न केवल यह पूछता है कि विभिन्न शाखाओं में एक ही फाइल को कैसे अलग किया जाए।
स्टीव

जवाबों:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

आप सापेक्ष रास्तों का उपयोग भी कर सकते हैं:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
बहुत बढ़िया! मैं निश्चित रूप से यह अनुमान लगाने में सक्षम नहीं था कि से git help diff। वैसे, जिन्हें कॉलोनों से आगे शाखा के नाम नहीं हैं, लेकिन किसी भी तरह के प्रतिबद्ध संदर्भ (जैसे SHA-1 मान) हो सकते हैं।
स्टीव जोर्गेनसन

3
महत्वपूर्ण नोट: खिड़कियों पर गिट एक यूनिक्स नाम होने के लिए पूर्ण आइटम्स की आवश्यकता है। यानी Branch1: full \ path \ to to \ foo.txt विफल रहता है, जबकि Branch1: full / path / to / foo.txt ठीक काम करता है, जैसा कि full \ path \ to to \ foo.txt (कोई शाखा नहीं)
Eris

उपयोग करें git difftoolऔर फिर ड्रॉप करें branch2:और वह आपको वर्तमान कार्यशील पेड़ में एक फ़ाइल को संपादित करने की अनुमति देगा (से परिवर्तन लाने के लिए branch1)
galeale

Git संस्करण 1.8.3.1 के साथ linux पर कोशिश की गई, केवल सापेक्ष पथों की अनुमति है।
सोला यांग

21

सिडेनोट: पूर्ण पथों की आवश्यकता नहीं है, आप ./सापेक्ष पथों के साथ शुरू कर सकते हैं। यह कभी-कभी काम आ सकता है।

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

दो अलग-अलग शाखाओं से फाइलों की तुलना करने के कई तरीके हैं। उदाहरण के लिए:

  • यदि नाम समान या अलग है:

     git diff branch1:file branch2:file
    

    उदाहरण:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • केवल यदि नाम समान है और आप अपनी वर्तमान कार्यशील निर्देशिका की तुलना किसी शाखा से करना चाहते हैं:

    git diff ..someBranch path/to/file
    

    उदाहरण:

    git diff ..branch2 full/path/to/foo.txt
    

    इस उदाहरण में आप अपनी वास्तविक शाखा से फ़ाइल की तुलना मास्टर शाखा में फ़ाइल से कर रहे हैं।

आप इस प्रतिक्रिया की जाँच कर सकते हैं:

Git में दो अलग-अलग शाखाओं की फाइल की तुलना करें


1

ऑफ-टॉपिक उत्तर - टिप्पणियां देखें

बस इसे जोड़ने के लिए मुझे यह एक बहुत सरल वाक्यविन्यास लगता है:

git diff <branch1> <branch2> <filepath>

उदाहरण के लिए रिश्तेदार रेफल्स के साथ भी काम करता है:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
ओपी ने विशेष रूप से "विभिन्न फ़ाइलों" के लिए कहा। आपका उत्तर एक ही फाइल को दो अलग-अलग शाखाओं में तुलना करने के बारे में है।
इटियेन मिर्ट

@EtienneMiret आप बिल्कुल सही कह रहे हैं, मुझे वह महत्वपूर्ण बिंदु याद आ गया। ऑफ-टॉपिक उत्तर।
रोमेनैवेलेरी

-1

आप के लिए git diffलागू करने के लिए एक शुरुआत और सीमा निर्दिष्ट कर सकते हैं । सीमा को संकेत के साथ इंगित किया गया ..है।

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

यह केवल एक ही फाइल की दो शाखाओं में तुलना कर रहा है; सवाल दो शाखाओं में दो अलग-अलग फाइलों के बारे में था।
पिरान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.