git - दिखा रहा है कि दो संशोधनों के बीच कौन सी फाइलें बदली हैं





branch git-branch git-diff (13)


अगर कोई दो शाखाओं से एक diff फ़ाइल उत्पन्न करने की कोशिश कर रहा है:

git diff master..otherbranch > myDiffFile.diff

मैं दो शाखाओं को विलय करना चाहता हूं जो थोड़ी देर के लिए अलग हो गए हैं और जानना चाहते हैं कि कौन सी फाइलें संशोधित की गई हैं।

इस लिंक पर आया: http://linux.yyz.us/git-howto.html जो काफी उपयोगी था।

शाखाओं की तुलना करने के लिए उपकरण जो मैंने पूरे किए हैं:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

यह सोच रहा था कि "गिट स्टेटस मास्टर..ब्रैंच" जैसी कुछ चीजें हैं जो केवल उन फाइलों को देखने के लिए हैं जो दोनों शाखाओं के बीच अलग हैं।

एक नया टूल बनाने के बिना, मुझे लगता है कि यह अब निकटतम है जो आप अभी कर सकते हैं (यदि एक फ़ाइल को एक से अधिक बार संशोधित किया गया था तो निश्चित रूप से दोहराया जाएगा):

  • git diff master..branch | grep "^diff"

क्या सोच रहा था कि कुछ ऐसा है जो मुझे याद आया ...




ध्यान दें कि अगर आपको परिणाम पसंद नहीं है तो गिट बस मर्ज करने का प्रयास करें और किसी भी समस्या से दूर रहना आसान बनाता है। अग्रिम में संभावित समस्याओं की तलाश करना आसान हो सकता है।




यह भी ध्यान रखें कि गिट में सस्ते और आसान ब्रांचिंग है। अगर मुझे लगता है कि विलय समस्याग्रस्त हो सकता है तो मैं विलय के लिए एक शाखा बना सकता हूं। तो यदि master में बदलाव हैं जो मैं विलय करना चाहता हूं और ba मेरी शाखा है जिसे मास्टर से कोड की आवश्यकता है तो मैं निम्न कार्य कर सकता हूं:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

अंत परिणाम यह है कि मुझे अपनी शाखा के साथ खराब होने से पहले एक फेंकने वाली शाखा पर विलय करने की कोशिश करनी पड़ी। अगर मैं अपना आत्म-उलझन प्राप्त करता हूं तो मैं केवल ba-merge शाखा को हटा सकता हूं और शुरू कर सकता हूं।




प्रयत्न

$ git diff --stat --color master..branchName

यह आपको प्रत्येक बदलाव के बारे में अधिक जानकारी देगा, जबकि अभी भी लाइनों की एक ही संख्या का उपयोग कर रहा है।

यदि आप दूसरे तरीके से विलय करना चाहते हैं तो आप अंतर की एक स्पष्ट तस्वीर प्राप्त करने के लिए शाखाओं को भी फ़्लिप कर सकते हैं:

$ git diff --stat --color branchName..master



यहां बहुत सारे जवाब हैं, लेकिन मैं कुछ ऐसा जोड़ना चाहता हूं जिसका मैं आमतौर पर उपयोग करता हूं। यदि आप उन शाखाओं में से एक हैं जिन्हें आप तुलना करना चाहते हैं तो मैं आमतौर पर निम्नलिखित में से एक करता हूं। इस उत्तर के लिए हम कहेंगे कि हम अपनी माध्यमिक शाखा में हैं। उस समय आपको किस दृश्य की आवश्यकता है, इस पर निर्भर करता है कि आप किस पर चयन करते हैं, लेकिन अधिकांश समय मैं दोनों के दूसरे विकल्प का उपयोग कर रहा हूं। पहला विकल्प आसान हो सकता है यदि आप किसी मूल प्रतिलिपि पर वापस लौटने की कोशिश कर रहे हैं - किसी भी तरह से, दोनों काम पूरा करते हैं!

यह उस शाखा से मास्टर की तुलना करेगा जिसमें हम हैं (जो माध्यमिक है) और मूल कोड अतिरिक्त लाइनें होंगी और नए कोड को हटाए गए लाइनों के रूप में माना जाएगा

git diff ..master

या

यह उस शाखा से मास्टर की तुलना भी करेगा जिसमें हम हैं (जो माध्यमिक है) और मूल कोड पुरानी रेखा होगी और नया कोड नई लाइनें होगी

git diff master..



इस मामले में मिश्रित एक और विकल्प:

git difftool -d master otherbranch

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




और यदि आप केवल कुछ फाइलों के बीच परिवर्तन की तलाश में हैं, तो:

git diff branch1 branch2 -- myfile1.js myfile2.js

शाखा 1 वैकल्पिक है और आपकी वर्तमान शाखा (जिस शाखा पर आप हैं) डिफ़ॉल्ट रूप से माना जाएगा यदि शाखा 1 प्रदान नहीं किया गया है। उदाहरण के लिए:

git diff master -- controller/index.js



एक जीयूआई आधारित विधि भी है।

आप गिटक का उपयोग कर सकते हैं।

  1. चलाएँ:

    $ gitk --all
    
  2. शाखा की प्रतिबद्धता पर राइट क्लिक करें और पॉप-अप मेनू में इस प्रतिबद्धता को चिह्नित करें का चयन करें।

  3. किसी अन्य शाखा की प्रतिबद्धता पर राइट क्लिक करें और इसे डिफ करें -> चिह्नित प्रतिबद्ध या डिफ चिह्नित प्रतिबद्ध -> यह

फिर दाहिने तल पैनल में एक बदली गई फाइल सूची और बाएं निचले पैनल में diff विवरण होंगे।




दो शाखाएं कहती हैं

  • ए (शाखा जिस पर आप काम कर रहे हैं)
  • बी (एक और शाखा जिसके साथ आप तुलना करना चाहते हैं)

शाखा ए में होने के नाते आप टाइप कर सकते हैं

git diff --color B

तो यह आपको एक आउटपुट देगा

इसके बारे में महत्वपूर्ण बिंदु है

  1. हरे रंग में पाठ शाखा ए में मौजूद है

  2. लाल रंग में पाठ शाखा बी में मौजूद है




यदि आप इंटेलिजे आईडीईए का उपयोग कर रहे हैं, तो आप अपनी मौजूदा कार्यकारी शाखा के साथ किसी भी शाखा की तुलना भी कर सकते हैं। अधिक जानकारी के लिए http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827 देखें। यह मुफ्त संस्करण में भी उपलब्ध है।




जेसनस्मिथ के जवाब के लिए बस अतिरिक्त जानकारी:

मैंने इस शाखा के साथ अपनी शाखा की जांच की:

$ git clone -b branchName http://repository_url

हालांकि, सुझाव दिया गया git diff कमांड विफल रहा था:

$ git diff --name-status master..branchName
fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

मैंने इस धागे के बाद शाखाओं की जांच की:

$ git branch
* branchName
$ git branch -a
* branchName
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/branchName

मेरे पास स्थानीय स्तर पर शाखा master नहीं था, इसलिए मैंने इसके बजाय remotes/origin/master खिलाफ तुलना की:

$ git diff --name-status remotes/origin/master..push
. . .
. . .
. . .

इस धागे में remotes/origin/master पर अधिक जानकारी।




सहयोगी रूप से, या एक साथ कई सुविधाओं पर काम करते समय, यह आम बात है कि अपस्ट्रीम या यहां तक ​​कि आपके मास्टर में वह कार्य शामिल है जो आपकी शाखा में शामिल नहीं है, और गलत रूप से मूल भिन्नताओं में दिखाई देगा।

यदि आपका अपस्ट्रीम स्थानांतरित हो सकता है, तो आपको यह करना चाहिए:

git fetch
git diff origin/master...

गिट diff मास्टर का उपयोग करने में शामिल हो सकते हैं, या प्रासंगिक परिवर्तनों को शामिल करने में असफल हो सकते हैं।




SmartGit :

  1. मेनू में अपरिवर्तित फ़ाइलों को प्रदर्शित करने में सक्षम: अपरिवर्तित फ़ाइलों को देखें / दिखाएं
  2. फ़ाइल पर राइट क्लिक करें और 'लॉग' का चयन करें या 'Ctrl-L' दबाएं




git branch git-branch git-diff