स्थानीय गिट शाखा की दूरस्थ शाखा से तुलना कैसे करें?


1049

मैं diffस्थानीय शाखा और दूरस्थ शाखा के बीच कैसे देख सकता हूँ ?


5
यह प्रश्न बाद में फिर से पूछा गया था। इसका एक अच्छा जवाब है: stackoverflow.com/questions/11935633/…
rustybeanstalk

3
उदाहरण: git diff गुरु मूल / मास्टर (जहां गुरु स्थानीय मास्टर शाखा है और मूल / मास्टर दूरस्थ मास्टर शाखा है)।
गोबर

@klyngbaek, विशेष रूप से इस उत्तर ;-)

मैं मूल रूप से कोशिश कर रहा था git diff HEAD origin/HEADजो मेरे द्वारा की गई तुलना में एक अलग दूरस्थ शाखा को इंगित करता है। पूर्ण शाखा नाम का उपयोग करना अपेक्षित है।
डीनना

जवाबों:


590

दूरस्थ-ट्रैकिंग शाखाओं को अपडेट करने के लिए, आपको git fetchपहले टाइप करना होगा और फिर:

git diff <masterbranch_path> <remotebranch_path>

आप git branch -aसभी शाखाओं (स्थानीय और दूरस्थ) को सूचीबद्ध करने के लिए सूची से शाखा का नाम चुन सकते हैं (बस remotes/दूरस्थ शाखा के नाम से हटा दें) ।

उदाहरण: git diff master origin/master(जहां "मास्टर" स्थानीय मास्टर शाखा है और "मूल / मास्टर" एक दूरस्थ अर्थात् मूल और मास्टर शाखा है।)


23
उसे पहले ( git fetch)
होम्स बद्री सेप

यह बस बैश में होने वाले बदलाव को दर्शाता है, क्या वीएस कोड जैसे आईडीई में सभी परिवर्तनों को खोलने का कोई तरीका है?
हर्ष फौजदार

@ हर्ष फौजदार अपनी .गित / .ITconfig फ़ाइल में नीचे कोड जोड़ें [diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = falseसुनिश्चित करें कि कोड। Exe फ़ाइल के लिए आपका मार्ग सही है।
अमन

1307
git diff <local branch> <remote>/<remote branch>

उदाहरण के लिए git diff master origin/master, याgit diff featureA origin/next

बेशक कहा गया है कि रिमोट-ट्रैकिंग शाखा आपको git fetchपहले चाहिए; और आपको दूरस्थ रिपॉजिटरी में शाखाओं के बारे में जानकारी रखने की आवश्यकता है।


98
अधिक सटीक होना: git diff <स्थानीय शाखा> <रिमोट> / <दूरस्थ शाखा>
nalply

38
मैं आमतौर पर यह git diff <remote>/<remote branch> <local branch>देखने के लिए करता हूं कि मेरा धक्का रिमोट रेपो को क्या करेगा।
माइकल टैटेरिएनिक्ज़

76
git diff originयदि आप अपनी अपस्ट्रीम शाखा से तुलना करते हैं तो भी छोटा पर्याप्त है।
११:४० बजे लुडर

12
कृपया git fetchशुरुआत में जोड़ें , यह मेरे जैसे नौसिखिया के लिए परेशानी का कारण बनता है
सैफ

1
अरे, यह नहीं होना चाहिए git diff <remote>/<remote branch> <local branch>? अन्यथा, मुझे मेरे कंप्यूटर पर जोड़े गए और हटाए गए स्विच मिलते हैं (git संस्करण 2.7.0.windows.2)
Martín Coll

183

पहला प्रकार

git branch -a

उपलब्ध शाखाओं की सूची प्राप्त करना। आउटपुट पर आप कुछ ऐसा देख सकते हैं

* master
  remotes/main/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mt
  remotes/upstream/master
  remotes/upstream/mt

फिर फर्क दिखा

git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master

1
इसके ...बजाय नहीं होना चाहिए ..?
एलिरन मलका

9
मैंने निश्चित रूप से इसे उत्तर के रूप में चुना होगा। आपके निर्देशों के बाद, मैं एक स्थानीय शाखा और एक दूरस्थ शाखा के बीच के अंतरों को देखने में सक्षम था। धन्यवाद!
Tass

1
मैं आमतौर पर करता हूं git log origin/my_branch..जो ले जाएगाHEAD स्थानीय रिफ के रूप में , जो कि ज्यादातर आप का मतलब है।
रुडी

4
मेरी विनम्र राय में सर्वश्रेष्ठ जवाब के लिए +1। +2 के योग्य होगा यदि आपने क्लोन स्रोत की "दूरस्थ" छवि को सिंक्रनाइज़ करने के लिए "लाने" का उल्लेख किया है। स्टेट / कलर ओवरव्यू कदम विशेष रूप से सहायक है।
bvj

3
एक जवाब के लिए धन्यवाद जो आखिर में सात या आठ "जवाब" से काम किया, जिसके परिणामस्वरूप fatal: bad revisionया उससे थोड़ा अधिक था fatal: ambiguous argument। मैं बस यही चाहता था कि दूसरी शाखा से एक ही फाइल में अंतर देखा जाए, क्या यह पूछने के लिए बहुत ज्यादा था? हाँ, हाँ यह था। :-) git diff remotes/origin/<base branch> <current branch> -- <filename>git 1.8.3.1 पर महान काम करता है
स्टीव बॉन्ड्स

143

यदि आप किसी दिए गए शाखा पर हैं, और आप इसे उस अपस्ट्रीम शाखा के साथ तुलना करना चाहते हैं जिसे आप ट्रैक कर रहे हैं, उपयोग करें

git diff @{upstream}

यदि आपका अपस्ट्रीम सेट नहीं किया गया है (आमतौर पर मामला, टिप्पणियों में एरजून का धन्यवाद )

git diff @{push}

इस जवाब के सौजन्य से , संशोधन को निर्दिष्ट करने के लिए गिट प्रलेखन है:

<branchname>@{upstream}, उदाहरण के लिए master@{upstream}, एक शाखा (लघु रूप ) के लिए @{u}
प्रत्यय उस शाखा को संदर्भित करता है जिसके द्वारा निर्दिष्ट शाखा ऊपर (कॉन्फ़िगर और साथ कॉन्फ़िगर ) के निर्माण के लिए निर्धारित है । एक लापता@{upstream}<branchname>@{u}branchnamebranch.<name>.remotebranch.<name>.mergebranchname वर्तमान के लिए एक चूक चूक।


10
बहुत अच्छा जवाब बस थोड़ा सा हिस्सा गायब है। को लाइन बदलें git diff @ @{upstream}। अतिरिक्त @है HEAD, जो कि आप अभी हैं, इसलिए आप HEADऊपर की ओर अपनी शाखा को ट्रैक कर रहे हैं के साथ तुलना कर रहे हैं । आप @{push}उस शाखा के बीच का उपयोग करने के लिए उपयोग कर सकते हैं जिसे आप धक्का देने के लिए सेट कर रहे हैं
Arijoon

3
सबसे अच्छा जवाब, रिमोट लाने की आवश्यकता नहीं है। अधिक upvotes की जरूरत है!
jcomeau_ictx

3
मछली के खोल में मुझे परिणाम मिला fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree:। git diff @\{upstream\}इसके बजाय उपयोग करना था। Ku
लैंडन कुह्न

आपको git fetchपहले की आवश्यकता है , अन्यथा यह कुछ भी नहीं करता है, कोई आउटपुट नहीं दिखाता है; रेपो मूल में एक फ़ाइल को हटाकर परीक्षण किया गया और स्थानीय रूप से इस कमांड को चलाया। ..शादी के बाद ही आतिशबाजी।

साथ ही, जैसा कि उत्तर दिया गया है, इसमें कोई भी स्थानीय परिवर्तन शामिल हैं। कभी-कभी यह वांछित है, अन्य बार, नहीं।
डीनना

44

मैं इसके बेहतर आउटपुट को समझता हूं:

git diff <remote-tracking branch> <local branch>

मुझे पता चलता है कि क्या गिराया जा रहा है और स्थानीय शाखा को धक्का देने पर क्या जोड़ा जा सकता है। बेशक, यह वही है, बस उलटा है, लेकिन मेरे लिए अधिक पठनीय है और जो कुछ भी होने जा रहा है, उसे देखते हुए मैं और अधिक आरामदायक हूं।


मुझे इसके समान परिणाम मिलते हैं: git diff <स्थानीय शाखा> <रिमोट-ट्रैकिंग शाखा> या git भिन्न <रिमोट-ट्रैकिंग शाखा> <स्थानीय शाखा>
user2928048

32

आसान तरीका:

git fetch
git log -p HEAD..FETCH_HEAD

यह पहले आपके डिफ़ॉल्ट रिमोट (मूल) से बदलाव लाएगा। जब आप रेपो क्लोन करेंगे तो यह अपने आप बन जाएगा। आप यह भी स्पष्ट किया जा सकता है: git fetch origin master

फिर गिट लॉग का उपयोग आपकी वर्तमान शाखा की तुलना करने के लिए किया जाता है। ( -pपैच उत्पन्न) विकल्प वह है जो अंतर दिखाता है ।)


14

यह मेरा इसे करने का तरीका है।

#To update your local.
git fetch --all

यह रिमोट से सब कुछ लाएगा, इसलिए जब आप अंतर की जांच करते हैं, तो यह दूरस्थ शाखा के साथ अंतर की तुलना करेगा।

#to list all branches
git branch -a

उपरोक्त कमांड सभी शाखाओं को प्रदर्शित करेगा।

#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
    (or)
git status

अब, आप निम्नानुसार अंतर की जांच कर सकते हैं।

git diff origin/<branch_name>

यह आपकी स्थानीय शाखा की तुलना दूरस्थ शाखा से करेगा


2
git fetch --all से सभी रीमेक से सब कुछ मिलेगा। यदि आप डिफ़ॉल्ट मूल रिमोट का उपयोग करते हैं तो git fetch पर्याप्त होना चाहिए।
क्रिस्टोफ़ केलर

कमाल है कि 8 साल बाद, हमें एक पूर्ण उत्तर मिलता है जो ठीक से चरणों की व्याख्या करता है। हम कमांड प्राप्त करने के लिए a -help कर सकते हैं। एसओ उन्हें समझने के बारे में है।
gdbj

11

आपकी कार्य शाखा विकास है और स्थानीय विकास शाखा और दूरस्थ विकास शाखा के बीच अंतर करना चाहते हैं, उस मामले में, वाक्यविन्यास की तरह होना चाहिए git diff remotes/origin/development..development
या

git fetch origin git diff origin/development


11

tl; डॉआर :git diff <local branch> <remote branch>

शेल पर गिट का उपयोग करते समय, मैं चारों ओर देखकर खुद को पहले उन्मुख करना पसंद करता हूं। यहाँ सभी शाखाओं को दिखाने की आज्ञा है

$ git branch -a  # (or git branch --all) 
* my-branch
  master
  remotes/origin/some-branch
  remotes/origin/HEAD -> origin/master
  remotes/origin/my-branch
  remotes/origin/some-other-branch
  remotes/origin/master

यहाँ मैं दो स्थानीय शाखाओं (है my-branchऔर masterदूरस्थ) और 4 ( some-branch, some-other-branch, master, और my-branch)।

इसके अलावा, तारांकन चिह्न my-branchइस तथ्य को इंगित करता है कि मैं वर्तमान में उस शाखा में हूं (आपको यह भी पता git statusहोगा कि कमांड का उपयोग करके जो आउटपुट होगा:) On branch my-branch.

नोट: गिट बश शेल में दूरस्थ शाखाएं लाल रंग में दिखाई जाती हैं जबकि स्थानीय हरे रंग में दिखाई जाती हैं।

यदि आप केवल दूरस्थ शाखाएँ दिखाना चाहते हैं :

$ git branch -r # (or git branch --remotes)
  origin/some-branch
  origin/HEAD -> origin/master
  origin/my-branch
  origin/some-other-branch
  origin/master

सिर्फ स्थानीय शाखाओं को दिखाने के लिए आपको उपयोग करने के लिए लुभाया जा सकता है git branch -lलेकिन यह पूरी तरह से अलग कमांड है। करने के लिए स्थानीय शाखाओं दिखाने के उपयोग git branchकोई विकल्प के साथ

$ git branch
* my-branch 
  master

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

$ git branch --list 'my*'
* my-branch

तुम भी गठजोड़ कर सकते हैं --listविकल्प के साथ -aऔर -rलेकिन उसके अनुसार अपनी पैटर्न अनुकूल करने के लिए सुनिश्चित करें ( याद रखें: दूरस्थ शाखाओं "रिमोट" से शुरू )। उदाहरण:

# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch

# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
  remotes/origin/my-branch

डॉक्स: https://git-scm.com/docs/git-branch

अब आप किसी भी दो शाखाओं की तुलना कर सकते हैं सभी उपलब्ध लोगों से कर सकते हैं (आप दो स्थानीय या दो रीमोट की तुलना भी कर सकते हैं)।

यहां मैं रिमोट के साथ स्थानीय की तुलना कर रहा हूं my-branch, वे सिंक्रनाइज़ हैं इसलिए मुझे कोई आउटपुट नहीं मिलता है:

$ git diff my-branch remotes/origin/my-branch

नोट: आपको शाखाओं का पूरा नाम देना होगा जिसमें कोई उद्धरण चिह्न नहीं है।

मैं स्थानीय की तुलना my-branchरिमोट से भी कर सकता हूं master। यहाँ मुझे कुछ आउटपुट मिलते हैं क्योंकि रिमोट my-branchको मास्टर ब्रांच में मर्ज नहीं किया गया है।

$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
   /*
    *  Function: doCall
[ . . . ]

11

यदि आप अंतर को केवल फ़ाइलों के नाम के रूप में देखना चाहते हैं तो उपयोग करें: अन्यथा

git diff --name-status <remote-branch> <local-branch>,

यह दोनों शाखाओं के बीच सभी अंतर दिखाएगा:

git diff <remote-branch> <local-branch>


9

यहाँ एक संक्षिप्त जवाब है यदि आप अपनी वर्तमान शाखा और किसी ऐसी चीज़ की तुलना कर रहे हैं जिसे आप चाहते हैं git pull

git fetch
git diff FETCH_HEAD

पहला कमांड यह पता लगाएगा कि कौन सी रिमोट शाखा आपकी वर्तमान शाखा से मेल खाती है। FETCH_HEADसंदर्भ में उस गणना की एक कलाकृति । फिर दूसरी कमांड उस संदर्भ का उपयोग करती है, जिसकी तुलना आपकी वर्तमान शाखा से होती है।


6

मुझे पता है कि इस सवाल के कई उत्तर पहले से ही हैं, लेकिन उनमें से अधिकांश को आज़माते समय मुझे एक अजीब त्रुटि मिली।

मेरे मामले में मेरे पास एक दूसरा रिमोट है, जो herokuकि नहीं है originऔर क्योंकि यह सिंक में नहीं था, मुझे यह त्रुटि मिली जब चलाने की कोशिश कर रहा था git diff master heroku/master:

fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.

या यह जब दूसरे दृष्टिकोण की कोशिश कर रहा है git diff master..heroku/master:

fatal: bad revision 'master..heroku/master'

समाधान स्पष्ट रूप git fetchसे git diff, मेरे मामले में चलने से पहले दूरस्थ नाम का उल्लेख कर रहा था :

$ git fetch heroku
$ git diff master heroku/master

आशा है कि इसी मुद्दे के साथ दूसरों की मदद करता है।


4
git difftool <commit> .

यह आपकी स्थानीय फ़ाइलों के साथ इच्छित कमिटमेंट की तुलना करेगा। अंत में (स्थानीय के लिए) डॉट मत भूलना।

उदाहरण के लिए, कुछ प्रतिबद्ध के साथ अपनी स्थानीय फ़ाइलों की तुलना करने के लिए:

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341

(और आपको git लाने की आवश्यकता नहीं है, जब तक कि नए कमिट्स की तुलना करने की आवश्यकता न हो)


मुझे लगता है कि tis दिलचस्प है क्योंकि एक तुलना है जिसे मैं प्रतिबद्ध और धक्का देने से पहले कर सकता हूं। दुर्भाग्य से खिड़कियों में दिखावा बदसूरत है; क्या नोटपैड ++ की तरह कुछ भी बेहतर उपयोग करने का कोई तरीका है?
स्टेफानो स्कार्पेंटी

3

उदाहरण

git diff 'master' 'testlocalBranch'

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

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


2
यह 170+ अपवोट्स के साथ 7.5 वर्ष पुराने स्वीकृत उत्तर को क्या जोड़ता है?
मार्क रोटेटेवेल

यह उपयोगकर्ता के लिए या समान उपयोगकर्ताओं के लिए है जो स्वीकृत उत्तर के लिए टिप्पणी जोड़ते हैं। सिंटेक्स एक उदाहरण से अलग है और उदाहरण शुरुआत के दृष्टिकोण से अधिक मदद करता है।
कुरकुला

2
उस मामले में, यह उस उत्तर की टिप्पणी में होना चाहिए।
राचिट

1

वीएस 2019 में, बस FETCH करें कोड को न खींचें।

यह जो मैंने किया है। नीचे .gitconfig फ़ाइल में जोड़ा गया ताकि मैं Beyond Compar का उपयोग कर सकूं

File location: C:\Users\[username]\.gitconfig

नीचे जोड़ा गया

[diff]
    tool = bc
[difftool "bc"]
    path = c:/Program Files/Beyond Compare 4/bcomp.exe

कमांड प्रॉम्प्ट खोलें और वर्किंग डायरेक्टरी पर जाएं। मैंने स्थानीय DEV शाखा की तुलना दूरस्थ DEV शाखा से करने के लिए नीचे दिया है

git difftool dev origin/dev --dir-diff

यह बियॉन्ड तुलना और खुले निर्देशिकाओं को खोलेगा जिसमें अलग-अलग फाइलें हैं। अगर कोई बदलाव नहीं हुआ तो बियॉन्ड तुलना शुरू नहीं होगी।


0

मुझे आश्चर्य है कि मेरी मास्टर शाखा में कोई बदलाव हुआ है ...

  1. सबसे पहले, आपको अपनी शाखा बदलने की आवश्यकता है (यदि आप पहले से ही इस शाखा के अधीन हैं, तो आपको ऐसा करने की आवश्यकता नहीं है!)

गिट चेकआउट मास्टर

  1. आप देख सकते हैं कि इस कमांड द्वारा किस फाइल को आपकी मास्टर ब्रांच के तहत संशोधित किया गया है

गिट स्थिति

  1. शाखाओं की सूची दें

गिट शाखा-ए

  • मास्टर
    रीमोट / उत्पत्ति / मास्टर
  1. असमानता खोजो

git का मूल / स्वामी है


0

सेट अप

git config alias.udiff 'diff @{u}'

HEAD @ {अपस्ट्रीम} के साथ HEAD की मुश्किल

git fetch  # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff

एक दूरस्थ दूरस्थ शाखा के साथ कठिनाई

यह आपके शीर्षक ("इसके रिमोट") में प्रश्न का उत्तर देता है; यदि आप "दूरस्थ" (जिसे शाखा के लिए अपस्ट्रीम के रूप में कॉन्फ़िगर नहीं किया गया है) के खिलाफ अलग करना चाहते हैं, तो आपको इसे सीधे लक्षित करने की आवश्यकता है। आप निम्नलिखित के साथ सभी दूरस्थ शाखाएँ देख सकते हैं:

git branch -r

आप निम्नलिखित के साथ सभी कॉन्फ़िगर किए गए रीमोट देख सकते हैं:

git remote show

आप एक एकल रिमोट (जैसे मूल) के लिए शाखा / ट्रैकिंग कॉन्फ़िगरेशन देख सकते हैं:

git remote show origin

एक बार जब आप उचित मूल शाखा का निर्धारण करते हैं, तो बस एक सामान्य अंतर करें :)

git diff [MY_LOCAL] MY_REMOTE_BRANCH


0

यह काफी सरल है। आप उपयोग कर सकते हैं:git diff remote/my_topic_branch my_topic_branch

my_topic_branchआपकी विषय शाखा कहां है


0

मान लीजिए कि आपने पहले से ही originदूरस्थ रिपॉजिटरी के रूप में अपनी स्थापना की है। फिर,

git diff <local branch> <origin>/<remote branch name>


0

प्रयत्न:

git diff origin HEAD

यह मानते हुए कि आप वर्तमान स्थानीय शाखा HEADको मूल के विरुद्ध फैलाना चाहते हैं। और यह मानकर कि आप स्थानीय शाखा में हैं। :)


-3

यदि आप TortoiseGit का उपयोग करते हैं (यह Git के लिए GUI प्रदान करता है), तो आप अपने Git रेपो फ़ोल्डर पर राइट क्लिक कर सकते हैंGit Sync

यदि आप चयनित नहीं हैं तो तुलना करने के लिए आप अपनी शाखाओं का चयन कर सकते हैं। आप अंतर को कमिट कर सकते हैं। आप किसी भी कमेंट पर राइट-क्लिक कर सकते हैं फिर भी Compare with previous revisionअगल-बगल अंतर देख सकते हैं।दूरस्थ और स्थानीय शाखा की तुलना करने के लिए कछुआ गिट्ट सिंक

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