git दृश्य शाखाओं के बीच भिन्न होता है


196

यह उत्तर दो फ़ाइलों के बीच एक दृश्य अंतर को देखने के लिए बहुत अच्छा है, जिसे git में जांचा गया है: मैं दृश्य भिन्न कार्यक्रम के साथ 'git diff' आउटपुट कैसे देखता हूं?

हालाँकि, मैं दो शाखाओं के बीच एक दृश्य अंतर देखना चाहता हूँ। अब तक, मेरी सबसे अच्छी शर्त यह प्रतीत होती है:

git diff --name-status master dev

जो बहुत जानकारीपूर्ण नहीं है और बहुत दृश्य नहीं है।

वहाँ कुछ भी बेहतर है?


मैंने नीचे एक उत्तर शामिल किया है जिसमें एक दृश्य शामिल है जो पहले यहां अनसुना था: यह कैसे देखा जाए कि कौन सी शाखाएं शामिल हैं (चाहे सामान्य या विशिष्ट रूप से)। कोर गिट कार्यक्षमता के साथ आप बहुत कुछ कर सकते हैं। यह निर्दिष्ट करना अच्छा हो सकता है कि आप अपने दृश्य अंतर में क्या शामिल करना चाहते हैं। अधिकांश उत्तर लाइन-बाय-लाइन पर केंद्रित होते हैं, जहां आपका उदाहरण किसी दिए गए कमिट में प्रभावित फाइलों के नामों पर केंद्रित होता है।
काय वी

जवाबों:


227

git diffएक सीमा के साथ प्रयोग करें ।

git diff branch1..branch2

यह प्रत्येक शाखा की युक्तियों की तुलना करेगा।

यदि आप वास्तव में कुछ GUI सॉफ्टवेयर चाहते हैं, तो आप SourceTree जैसी कुछ कोशिश कर सकते हैं जो Mac OS X और Windows को सपोर्ट करता है।


27
यह दृश्य डो नहीं है। ;)
मरीन

35
Linux सिस्टम में मैं स्थापित करने की सलाह देते हैं Meld, तो डिफ़ॉल्ट के रूप में स्थापित करने difftoolके साथ git config --global diff.tool meldऔर अंत में मैदान के बजाय इसे लॉन्च diffके साथ git difftool branch1..branch2। परिणाम बहुत अच्छा लग रहा है।
गैब्रियल

8
का उपयोग करते हुए मिलकर एक हो जाना Git config बिना दृश्य difftool:git difftool -t meld branch1..branch2
user3780389

2
पाठकों के लिए: मेरी पोस्ट के अनुसार, यहाँ पर हर उत्तर इस उत्तर के अलावा उस व्यक्ति के लिए क्या करने के लिए कहा गया है जो (GUI में भिन्नता) है।
जी हक्सले

3
@GHuxley ओपी एक GUI समाधान के लिए कहाँ पूछता है?
एलेक्स

97

दो शाखाओं के बीच सभी अंतरों के एक दृश्य अंतर को देखने के लिए मैं दो शाखाओं को मर्ज करना पसंद करता हूं - मर्ज किए बिना - और फिर git guiमतभेदों का अवलोकन प्राप्त करने के लिए एक्सटेंशन का उपयोग या git एक्सटेंशन।

आने के बिना विलय के लिए कमांड लाइन:

git चेकआउट ब्रांच
git मर्ज - कोई-कमिट --no-ff ब्रांचबी

फिर जब किया जाता है, तो आप मर्ज को पूर्ववत कर सकते हैं

git मर्ज --abort

(h / t @ @ jcugat की टिप्पणी के लिए)


10
यदि आप अपनी IDE (या अन्य नहीं-हमेशा-आसान-से-एकीकृत Git GUI difftool) का उपयोग करना चाहते हैं, तो इस दृष्टिकोण की प्रासंगिकता को कम न समझें! यह विकल्प मेरे लिए बहुत बढ़िया है, क्योंकि मैं इंटेलीज का उपयोग करता हूं और आईडीई में संशोधित फ़ाइलों के माध्यम से स्पिन करने में सक्षम होना पसंद करता हूं, इसके सभी सिंटैक्स-हाइलाइटेड, त्रुटि-हाइलाइटेड, डेड-कोड-हाइलाइटेड, संपादन योग्य-इन-प्लेस महिमा। मैं अपने सभी कोड समीक्षाओं के लिए इस दृष्टिकोण का उपयोग करता हूं, और मैंने GitHub में abysmal pull अनुरोध तुलना उपकरण छोड़ दिया है। मैं एडिट भी कर सकता हूँ जैसा कि मैं जाता हूँ, और जब मैंने किया तो बस "-कोड-रिव्यू" के साथ एक नई ब्रांच बनायी गयी और प्रतिबद्ध हो गया!
किग्स्थी

2
यह तब तक काम करता है जब तक कोई मर्ज टकराव नहीं होता है और जब कोई मर्ज टकराव होता है तो वह विफल हो जाता है।
नागा किरण

1
मुझे वह तरीका बहुत पसंद है! इसके अलावा, कम से कम मेरे लिए git guiइसमें संघर्षों को अस्थिर के रूप में दिखाया गया है, गैर-संघर्षों को मंचित किया गया है, इसलिए आपको एक अच्छा अंतर भी मिलता है। शीर्ष-रेटेड उत्तर की तुलना में मेरे लिए बहुत अधिक मदद करता है: D
DJGummikuh

55

यदि आप Intellij Idea IDE का उपयोग कर रहे हैं, तो आप शाखा में तुलना विकल्प का उपयोग कर सकते हैं।

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


क्या इस तुलना को संशोधित करने के लिए कोई विन्यास / विकल्प / सेटिंग्स हैं? (जैसे
जिंजोर

49

आप इसे आसानी से गिटक के साथ भी कर सकते हैं।

> gitk branch1 branch2

सबसे पहले Branch1 के सिरे पर क्लिक करें। अब ब्रांच 2 के सिरे पर राइट क्लिक करें और इसे सेलेक्ट करें-> सेलेक्ट करें।


7
gitk branch1..branch2केवल शो का उपयोग करना दो संशोधनों के बीच कमिट करता है।
T3rm1

यदि आप अपनी शाखा में किए गए सभी परिवर्तनों को देखना चाहते हैं, तो gitk (शाखा 1 शाखा 2 के बिना) का उपयोग करें।
mikewasmike

31

TortoiseGit का उपयोग कर विंडोज पर आप में से कुछ के लिए, आप इसके बजाय अस्पष्ट सुविधा के माध्यम से कुछ हद तक दृश्य तुलना प्राप्त कर सकते हैं:

  1. उस फ़ोल्डर पर नेविगेट करें जिसकी आप तुलना करना चाहते हैं
  2. दबाए रखें shiftऔर इसे राइट-क्लिक करें
  3. TortoiseGit पर जाएं -> संदर्भ ब्राउज़ करें
  4. ctrlतुलना करने के लिए दो शाखाओं का चयन करने के लिए उपयोग करें
  5. अपने चयन पर राइट-क्लिक करें और "चयनित रेफरी की तुलना करें" पर क्लिक करें

स्रोत: http://wikgren.fi/compare-diff-branches-in-tortoise-git-or-how-to-preview-changes-before-doing-a-merge/


आपको नीचे शिफ्ट क्यों रखना चाहिए?
जीरो 3

1
यदि आप कुछ चीज़ों को नहीं दिखाने के लिए TortoiseGit को कॉन्फ़िगर कर चुके हैं, तो राइट-क्लिकिंग हमेशा पूर्ण-कछुआ मेनू में बदलाव लाती है।
ओवरसीज

यह कमाल का है। काश यह एक अधिक प्रमुख विशेषता होती।
ड्रयू

22

यदि आप OSX या विंडोज 7+ का उपयोग कर रहे हैं, तो एटलसियन सोर्सट्री इसके लिए बहुत अच्छा काम करती है। ये मुफ्त है।

आप साइड-बाय-साइड अलग-अलग सेटअप में चरणबद्ध बदलाव देख सकते हैं, और आप आसानी से स्थानीय दूरस्थ और अन्य दो शाखाओं के साथ तुलना कर सकते हैं। जब एक से अधिक फ़ाइलों का चयन किया जाता है, तो नीचे दिखाया गया है:

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

यह मानते हुए कि आपने एक सुविधा शाखा की जाँच की है और आप 'मास्टर' के विरूद्ध अंतर देखना चाहते हैं, 'मास्टर' शाखा पर राइट-क्लिक करें और "करंट के खिलाफ डिफ" चुनें

दुर्भाग्य से, ऐसा नहीं लगता कि यह जल्द ही * निक्स वितरण पर उपलब्ध होगा ।


3
यह 'नि: शुल्क' हो सकता है, लेकिन यह निश्चित रूप से उनके पंजीकरण की शर्तों को पढ़ने के लिए कुछ समय की आवश्यकता है: atlassian.com/legal/customer-agreement मुझे अब तक उपकरण पसंद आया है, लेकिन यह मुझे धक्का दे सकता है।
उर्फुपी

@akauppi आपको किन हिस्सों में रखा गया है? मैंने सोचा था कि उन सभी समझौतों में बहुत समान थे
एलेक्स

यह एक साल पहले खत्म हो गया था। हां, समझौते समान हो सकते हैं लेकिन यह वह प्रक्रिया थी जिसे SourceTree मेरे माध्यम से आगे बढ़ा रहा था। वह अजीब था। हालांकि, मेरे पास आपके लिए विवरण नहीं होगा। क्षमा करें
akauppi

16

"Difftool" का प्रयास करें (यह मानते हुए कि आपके पास उपकरण सेटअप है) - https://www.kernel.org/pub/software/scm/git/docs/git-difftool.html देखें

मुझे सारांश के लिए नाम की स्थिति अच्छी है लेकिन difftool परिवर्तनों को पुनरावृत्त कर देगा (और -dविकल्प आपको निर्देशिका दृश्य देता है), उदा

$ git difftool their-branch my-branch

Viewing: 'file1.txt'
Launch 'bc3' [Y/n]:
...

या के रूप में @ rsilva4 के साथ उल्लेख किया है -dऔर आपकी वर्तमान शाखा के लिए डिफ़ॉल्ट है - यह मास्टर की तुलना में है:

$  git difftool -d master..

... और हाँ - कई विविधताएँ हैं - https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


3
धन्यवाद, यह उपयोगी था। git difftool -d their-abc my-abc
-D

चूंकि -d --dir-diff: Copy the modified files to a temporary location and perform a directory diff on them. This mode never prompts before launching the diff tool.
Explhellhell.com

8

यदि आप github का उपयोग कर रहे हैं, तो आप इसके लिए वेबसाइट का उपयोग कर सकते हैं:

github.com/url/to/your/repo/compare/SHA_of_tip_of_one_branch...SHA_of_tip_of_another_branch

जो आपको दोनों की तुलना दिखाएगा।


यह काम करता है (मैं इसे हर समय करता हूं) लेकिन इसके लिए आपको अपने कोड को जीथब रेपो पर धकेलना होगा। यह वास्तव में मेरी राय में एक स्वीकार्य चेतावनी नहीं है।
adamwong246

2
या बस github.com/url/to/your/repo/compare/और फिर आप शाखाओं का चयन कर सकते हैं
कारम्बा

और मुझे वह SHA कैसे मिलता है? मेरा मतलब है, एक शाखा की नोक का क्या मतलब है?
ऑप्टिमस प्राइम

8

में GitExtensions आप संशोधन ग्रिड में दोनों शाखाओं के साथ चुन सकते हैं Ctrlदबाया। फिर आप उन शाखाओं के बीच भिन्न होने वाली फ़ाइलों को देख सकते हैं। जब आप एक फ़ाइल का चयन करते हैं तो आप देखेंगे कि आप इसके लिए अलग हैं

यहां से ले गए


मुझे अपने संशोधन ग्रिड में 2 शाखाएं चुननी हैं, लेकिन मैं शीर्ष पर मेनू में कोई तुलना कमांड नहीं देख रहा हूं या जब मैं एक राइट क्लिक करता हूं।
एरिक

1
मैंने इसे निचले फलक के शीर्षकों में पाया। कमिट, फाइल ट्री और डिफ हैं।
एरिक

7

अपडेट करें

Mac: मैं अब SourceTree का उपयोग करता हूं। पूरी तरह से सिफारिश की। मैं विशेष रूप से जिस तरह से आप चरण / अस्थिर हॉक कर सकते हैं।

लिनक्स: मुझे इसके साथ सफलता मिली है:

  • smartgit
  • GitKraken
  • meld

उदाहरण के लिए smartgitUbuntu पर स्थापित करें:


यह काम करता है:

GUI के साथ git-diffall meld जैसे अलग उपकरण। यहाँ बिंदु 5 देखें:

http://rubyglazed.com/post/15772234418/git-ify-your-command-line

यहाँ git और meld के बारे में एक अच्छी पोस्ट है: http://nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy


4

यदि आप ग्रहण का उपयोग करते हैं, तो आप कार्यस्थल पर अपनी वर्तमान शाखा की तुलना किसी अन्य टैग / शाखा से कर सकते हैं:

ग्रहण कार्यक्षेत्र की तुलना करें


व्यक्तिगत रूप से मुझे उप-समांतर को अलग करने के लिए ग्रहण समर्थन मिलता है, लेकिन यदि आपके पास यह सब है तो यह ठीक है।
ysap

4

आप इसे करने के लिए Perforce से नि: शुल्क P4Merge का उपयोग कर सकते हैं:

http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools

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

इसे गिट के साथ एकीकृत करने पर विवरण यहां और यहां पाया जा सकता है

लेकिन उपरोक्त लिंक से एक त्वरित सारांश है:

  • अपने ~ / .gitconfig में निम्नलिखित बिट्स रखो, और फिर आप क्या कर सकते हैं $ git mergetoolऔर $ git difftoolउपयोग करने के लिए p4merge
  • ध्यान दें कि $ git diffअभी भी केवल डिफ़ॉल्ट इनलाइन अंतर दर्शक का उपयोग होगा :) (git संस्करण 1.8.2 के साथ परीक्षण किया गया)

.Gitconfig के लिए परिवर्तन

[merge]
  keepBackup = false
    tool = p4merge
[mergetool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$PWD/$BASE\"" "\"$PWD/$REMOTE\"" "\"$PWD/$LOCAL\"" "\"$PWD/$MERGED\""
    keepTemporaries = false
    trustExitCode = false
    keepBackup = false
[diff]
    tool = p4merge
[difftool "p4merge"]
    cmd = /Applications/p4merge.app/Contents/Resources/launchp4merge "\"$REMOTE\"" "\"$LOCAL\""

2

यदि आप उत्कृष्ट WebStorm संपादक का उपयोग करते हैं, तो आप अपनी पसंद की किसी भी शाखा के साथ तुलना कर सकते हैं: वेबस्टॉर्म गिट तुलना


वास्तव में मैंने सिर्फ IntelliJ IDEA पर गौर किया (संभवतः वेबस्टॉर्म भी) "हाइलाइट नॉन-पिकेड कमिट्स" की क्षमता है, जो यह बहुत स्पष्ट करता है कि ब्रांच में मौजूद है, लेकिन दूसरा नहीं।
आर्थुरे

हाँ, मैंने सिर्फ "ऑटोफ़ॉर्मेट ऑन सेव" द्वारा रेपो में किए गए परिवर्तनों के भार को चुनने के लिए इंटेलीज का उपयोग किया। बहुत आसान था ... इसे करने के लिए "स्थानीय से पहले तुलना करें" विकल्प ढूंढना था, हालांकि
टॉम एच

1

अच्छी तरह से देखिए git show-branch

कोर गिट कार्यक्षमता के साथ आप बहुत कुछ कर सकते हैं। यह निर्दिष्ट करना अच्छा हो सकता है कि आप अपने दृश्य अंतर में क्या शामिल करना चाहते हैं। अधिकांश उत्तर लाइन-बाय-लाइन पर केंद्रित होते हैं, जहां आपका उदाहरण किसी दिए गए कमिट में प्रभावित फाइलों के नामों पर केंद्रित होता है।

एक दृश्य जिसे संबोधित नहीं किया जाता है वह यह है कि उन कमिट को कैसे देखा जाए जिसमें शाखाएं शामिल हैं (चाहे सामान्य रूप से या विशिष्ट रूप से)।

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


0

यहाँ दृश्य को पूरे कमिट के बीच अलग-अलग तरीके से देखा जा सकता है, जैसा कि सिंगल फाइल के विपरीत, विजुअल स्टूडियो में (वीएस 2017 में परीक्षण किया गया)। दुर्भाग्य से, यह केवल एक शाखा के भीतर काम करने के लिए काम करता है: "टीम एक्सप्लोरर" में, "शाखाएं" दृश्य चुनें, रेपो पर राइट-क्लिक करें, और निम्न छवि के अनुसार "इतिहास देखें" चुनें।

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

फिर वर्तमान शाखा का इतिहास मुख्य क्षेत्र में दिखाई देता है। (जहां पहले शाखा के रूप में समाप्त हुई शाखाएं लेबल द्वारा चिह्नित हैं।) अब Ctrl-Left के साथ कुछ जोड़े चुनें, फिर राइट-क्लिक करें और पॉप-अप मेनू से "तुलना करें ..." का चयन करें।

Microsoft दुनिया में शाखाओं की तुलना करने पर अधिक जानकारी के लिए, इस स्टैकओवरफ़्लो प्रश्न को देखें: Visual Studio का उपयोग करके git शाखाओं के बीच अंतर


1
एकल शाखा का केवल इतिहास दिखाता है, इसलिए शाखाओं के बीच तुलना नहीं की जा सकती।
माइकल फिता

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