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




branch git-branch (10)

अगर कोई दो शाखाओं से एक 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"

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


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

git difftool -d master otherbranch

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


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

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

  1. चलाएँ:

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

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

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


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

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

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

git diff master -- controller/index.js

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


प्रयत्न

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

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

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

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

यह भी ध्यान रखें कि गिट में सस्ते और आसान ब्रांचिंग है। अगर मुझे लगता है कि विलय समस्याग्रस्त हो सकता है तो मैं विलय के लिए एक शाखा बना सकता हूं। तो यदि 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 ..master

या

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

git diff master..

master खिलाफ मौजूदा शाखा की तुलना करने के लिए

$ git diff --name-status master

शाखाओं की किसी भी जोड़ी की तुलना करने के लिए

$ git diff --name-status firstbranch..yourBranchName

अगर आपको सही तरीके से समझ आती है तो आपको वह चाहिए जो आपको चाहिए।


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

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

$ 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-diff