किसी अन्य शाखा की प्रतिबद्ध प्रति के साथ फ़ाइल की वर्तमान कार्य प्रतिलिपि को अलग करें


158

मेरे पास fooमास्टर शाखा में फ़ाइल के साथ रेपो है । मैंने बार शाखा में स्विच किया और कुछ बदलाव किए foo। अब मैं git diffइस प्रति (जो अभी तक प्रतिबद्ध नहीं है) और मास्टर शाखा की प्रतिलिपि के बीच कैसे चला सकता हूं ?

जवाबों:


151

निम्नलिखित मेरे लिए काम करता है:

git diff master:foo foo

अतीत में, यह हो सकता है:

git diff foo master:foo


9
हर बार जब मैं के बारे में आपका कोई जवाब देखने के git diff, मैं हमेशा के बारे में सोच stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/...
VonC

@VonC: धन्यवाद, यह जानकर अच्छा लगा कि यह उन लोगों को आकर्षित करने के लायक था :) संयोग से, क्या आप उस विषमता को समझने के लिए होते हैं जिसे मैंने अपना उत्तर अपडेट किया था?
मार्क लोंगेयर

2
क्या आपने --पथ तर्कों से मापदंडों को अलग करने के लिए प्रयास किया था ? git diff -- master:foo foo
VonC

1
1.8 पर, git diff -- master:foo fooयह काम नहीं करता है - यह master:fooएक फ़ाइल के रूप में शाखा के बजाय एक गैर-मौजूद फ़ाइल नाम (और इसे अनदेखा करता है) के रूप में arg का इलाज करता है । अंतिम 2 आर्गों को स्विच करने का प्रयास करें - यदि यह काम करता है, तो अंतर की तुलना उलट होनी चाहिए, लेकिन आउटपुट नहीं बदलता है।
केल्विन

9
मेरे लिए यह विपरीत है - मैं कर सकता हूं git diff master:foo fooलेकिन इसके विपरीत नहीं। मुझे यह समझ में नहीं आता है। जीआईटी 1.7.9.5 / उबंटू 12.04 के साथ मैं कम से कम git diff -R master:foo fooउस अंतर को प्राप्त करने के लिए कर सकता हूं जो मैं वास्तव में चाहता हूं। जब मैं कोशिश करता हूं कि msysgit 1.9.4 / Windows 7 x64 के साथ मैं प्राप्त करूं fatal: unable to read 0000000000000000000000000000000000000000। बिना -Rमुझे आपको 1.7.9.5 git के साथ एक ही त्रुटि संदेश मिलता है, लेकिन 1.9.4 के साथ fatal: master:foo: no such path in the working tree
जेएमएम

100

आप अपने काम के पेड़ की तुलना एक विशेष शाखा के नाम से करने की कोशिश कर रहे हैं, इसलिए आप यह चाहते हैं:

git diff master -- foo

जो git-diff के इस रूप से है (git-diff मैनपेज देखें)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

FYI करें, आपके काम करने वाले पेड़ की हर चीज के बजाय आपने जो भी मंचन किया है, उसका अंतर देखने के लिए एक --cached(उर्फ --staged) विकल्प भी है :

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
धन्यवाद। पता नहीं क्यों, लेकिन केवल इस जवाब ने मेरे लिए लिनक्स में 1.8.1 के साथ काम किया।
srking

बहुत बड़िया धन्यवाद। मैं अपनी वर्तमान शाखा का नाम अलग कमांड में शामिल करना चाहता था, लेकिन मुझे लगता है कि इसकी आवश्यकता नहीं है।
योय

यह मेरे लिए कुछ महीने पहले काम किया था, लेकिन अब ऐसा नहीं लगता। वर्तमान में मैं git संस्करण 2.7.4 पर हूँ (Apple Git-66); मुझे नहीं पता कि मेरे पास पहले क्या था।
hbrent

@ यह अभी भी मेरे लिए OSX 10.11 पर git 2.7.3 के साथ काम करता है। यहां निर्देश के साथ एक त्वरित नमूना रेपो है यदि यह सहायक है: github.com/jordan-brough/git-diff-test
जॉर्डन ब्रॉट

धन्यवाद @JordanBrough
hBrent

14

इसके अलावा: git diff master..feature foo

चूंकि git diff foo master:fooमेरे लिए निर्देशिकाओं पर काम नहीं होता है।


न ही मैं। क्या यह विंडोज की बात है?
स्कॉट स्टैफोर्ड

@ScottStafford मैं उबंटू में हूं, इसलिए नहीं, ऐसा नहीं लगता कि यह सिर्फ एक विंडोज चीज है।
ArtBIT

जब तक मैं स्पष्ट रूप से दोनों शाखा नाम (विंडोज़) देता हूं, तब तक मेरे लिए काम करता है git diff branch1:foo master:foo
20

12
git difftool tag/branch filename

यह एकमात्र उत्तर है जो किसी फ़ाइल की स्थानीय कार्य प्रतिलिपि के बीच तुलना के लिए मेरे लिए काम करता है, और वह फ़ाइल संस्करण दूरस्थ रेपो ("मूल" नहीं) में है। धन्यवाद, अदिर और बाज
माउस

git difftool-vडॉक्स git-scm.com/docs/git-difftool के अनुसार कोई विकल्प नहीं है । क्या आपका मतलब था -y?
ks1322

10
git diff mybranch master -- file

काम भी करना चाहिए


4
यह केवल mybranch के लिए प्रतिबद्ध फ़ाइलों के लिए काम करता है, न कि फ़ाइल की वर्तमान कार्य प्रतिलिपि।
योयो

ऊपर "-" का क्या अर्थ है
पुष्पराज

यह दोनों दिशाओं में तुलना करने की अनुमति देता है: git diff deployment master -- fileऔर किसी भी 2 शाखाओं के साथgit diff master deployment -- file अपेक्षित रूप से काम कर रहे हैं ।
विक्टोरखो

0

अपनी वर्तमान शाखा की तुलना में स्थानीय परिवर्तन देखने के लिए

git diff .

किसी अन्य मौजूदा शाखा की तुलना में स्थानीय परिवर्तन देखने के लिए

git diff <branch-name> .

किसी विशेष फ़ाइल के परिवर्तनों को देखने के लिए

git diff <branch-name> -- <file-path>

सुनिश्चित करें कि आप git fetchशुरुआत में दौड़ते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.