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


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

इस लिंक में आया था: 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"

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


1789
2018-05-05 00:47


मूल


इस प्रश्न का शीर्षक कितने लोगों को भ्रामक लगता है? यह वास्तव में दो शाखाओं के बीच फ़ाइल अंतर खोजने के बारे में है। मैं यहां जो आया था वह उसी शाखा पर दो संशोधनों के बीच फ़ाइल अंतर को देखने का तरीका था। या केवल मैं ही हूं? - Sandeepan Nath
@ संदीपनाथनाथ: गिट के साथ कोई फर्क नहीं पड़ता। आप हमेशा व्यक्तिगत प्रतिबद्धताओं का जिक्र कर रहे हैं। - Samuel O'Malley
@ सैमुअल ओ'मालली मैं गिट करने के लिए नया हूं और आम तौर पर आम शाखा रणनीति पर विचार कर रहा हूं जिसमें सभी शाखाएं अंततः मास्टर शाखा में विलय हो जाती हैं और आखिर में मास्टर लुढ़का जाता है। अब, रोलआउट की स्थिति पर विचार करते हुए, जहां उत्पादन पहले से ही मास्टर पर है, लेकिन टिप के पीछे (एक संशोधन द्वारा अंतिम अंतिम विलय के बाद अंतिम रोलआउट हुआ), मैं इन दो संशोधनों के बीच मतभेद देखना चाहता हूं, पता लगाएं कि क्या लुढ़काया जाएगा। मैं उस शाखा को देखना नहीं चाहता जो आखिरी विलय हो गया था। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। - Sandeepan Nath
@ सांडिपननाथ: शाखा के नामों का उपयोग करने के बजाय आप नीचे दिए गए उत्तर ले सकते हैं और इसके बजाय केवल प्रतिबद्ध आईडी निर्दिष्ट कर सकते हैं। या यदि आप रोलिंग करते समय टैग बनाते हैं तो उनके टैग नामों से भी काम देखें। - Samuel O'Malley
@ सांडिपननाथ आप 2 शाखाओं की तुलना नहीं कर सकते हैं, आपको संशोधन निर्दिष्ट करना होगा। तो 2 शाखाओं की तुलना 2 संशोधन की तुलना में है। - Bastien Vandamme


जवाब:


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

$ git diff --name-status master

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

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

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


2187
2018-05-05 01:04



+1, कभी-कभी --नाम-केवल भी आसान है - Pat Notz
@ user446936 - आप देख सकते हैं कि गिट स्टेटस मैन पेज में अक्षरों का क्या मतलब है @ kernel.org/pub/software/scm/git/docs/git-status.html - विशेष रूप से, एम == संशोधित, डी == हटा दिया गया - James Manning
git diff master..blabla -- मुझे देता है fatal: bad revision 'master..blabla'। git diff master blabla -- मुझे देता है fatal: bad revision 'master'। कोई विचार क्या गलत है? अद्यतन: इस रेपो में मास्टर नामक शाखा नहीं है, दोह! - akostadinov
git diff --name-status your_branch...master मास्टर पर होने वाले परिवर्तनों को आउटपुट करता है क्योंकि आपका_ब्रैंच इससे बनाया गया था - Radu
गिट diff का उपयोग करते समय अधिक विकल्पों का एक लिंक यहां दिया गया है। git-scm.com/docs/git-diff - akvallejos


प्रयत्न

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

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

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

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

354
2018-02-09 19:38



यदि आपके पास (अत्यधिक अनुशंसित, imho) गिट रंग चालू है (config --global color.ui true), आप - रंग छोड़ सकते हैं। (मेरे पास lks - आलसी कीबोर्ड सिंड्रोम है।) - Art Swri
मैं तुम्हारे साथ रंग पर हूँ! बीटीडब्ल्यू मैं कहना चाहता था git config --global color.ui true पूरा होने के लिए। - Art Swri
काम नहीं करता है, त्रुटियों को फेंकता है: fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree. - Tomáš Zato
@ TomášZato क्षमा करें, लेकिन आपको अपनी शाखा के नाम से "शाखा नाम" स्वैप करने की आवश्यकता है। - Gerry


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


145
2017-10-11 01:22



बहुत बढ़िया। मैंने कभी इस तरह से शाखा बनाने का विचार नहीं किया है। मुझे लगता है कि इसे विलय करते समय इसे "सर्वोत्तम प्रथाओं" के हिस्से के रूप में माना जाना चाहिए। - egelev
जब आप बीए-मार्ज वापस बीए में विलय करते हैं, तो क्या संघर्षों को फिर से ठीक करने की संभावना नहीं है? - Josef.B
नहीं, आप पहले ही उन्हें हल कर चुके हैं। - Eric Anderson
@EricAnderson राइट, यह एक ग्राफ है। एक स्कूल डेस्क के नीचे गम की तरह एसवीएन चिपक जाती है। धन्यवाद। - Josef.B


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

git diff master..otherbranch > myDiffFile.diff

45
2018-04-03 14:01



यह विशेष रूप से बड़ी शाखाओं के साथ काम में आया है जिसमें बहुत अंतर हैं। - vandsh


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


30
2018-05-05 00:59



डेविड, यह एक अच्छा मुद्दा है, हालांकि यह जानना अच्छा होगा कि हाथ से क्या चल रहा है ... - johannix


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

आप उपयोग कर सकते हैं gitk

  1. चलाएँ:

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

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

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


29
2018-06-14 06:01



@ ऑरवेलोफाइल मैं एक अपलोड करता हूं वीडियो यह दिखाने के लिए कि यह कैसे करें। मुझे उम्मीद है कि यह आपकी मदद करेगा। - Shawn Xie
वाह, सिर्फ मेरे लिए, मैं विशेष महसूस करता हूँ। मैंने इसे भविष्य के संदर्भ और अतिरिक्त google-foo के लिए स्वादिष्ट.com में बुकमार्क किया है। - Orwellophile


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

git difftool -d master otherbranch

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


26
2018-04-24 13:23



डिफ़ॉल्ट रूप से difftool के रूप में meld सेट करना चाहते हैं: git config --global diff.tool meld - bwv549
यह मेरा पसंदीदा है क्योंकि यह आपके द्वारा कॉन्फ़िगर किए गए किसी भी प्रकार का उपयोग करेगा। - Josiah
ओएसएक्स पर समर्थित नहीं है। :-( - Mike S.
@MikeS। कृपया इस उत्तर को चेकआउट करें stackoverflow.com/a/12815806/151918 इसमें ओएसएक्स के लिए निर्देश शामिल हैं। यह कम से कम मेरे लिए काम करता है, उम्मीद है कि यह मदद करता है। - rsilva4


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

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

git fetch
git diff origin/master...

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


14
2018-03-24 03:21





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

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

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

git diff master -- controller/index.js

10
2018-05-16 13:13





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


9
2018-06-06 07:17





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

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

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

git diff --color B

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

enter image description here

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

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

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


4
2017-10-04 11:56