2012-06-06 23 views
7

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

  defect1 fix   defect2 fix 
     a---b---c---d   e---f 
     /   \  / \ 
---o---1---x---y---z---2---o---3---w---4---o--- 

सवाल यह है कि fix1 के लिए diff प्राप्त करने के लिए (शाखा शुरुआत के बीच है (1) और शाखा अंत (2)) या fix2 (किसी भी समय (3) और (4) के बीच अंतर (उदाहरण के लिए किसी भी बंद दोष के लिए)।

अद्यतन:

git diff 1..d 

यह मतभेदों को दर्शाता है: वास्तविक सवाल यह है कि बाहर a और d या e और f का SHA summs जाता है कि आगे स्पष्ट diff आदेश प्रदर्शन करने के लिए diff <commit> <commit>

+0

बस एक टिप्पणी के रूप में। प्लास्टिक एससीएम (www, plasticscm.com) प्रति कार्य/दोष पैटर्न शाखा के साथ पूरी तरह से फिट बैठता है।प्लास्टिक का उपयोग करके आप एक शाखा पर राइट क्लिक कर सकते हैं और डिफ शाखा दबा सकते हैं। आदेश पंक्ति का उपयोग करके आप 'कर सकते हैं सेमी diff ' –

उत्तर

6

जवाब सरल है है आपके defect1 fix शाखा (यानी 1) के शाखा बिंदु के बीच और यह अंत है (यानी d)।

आदेश defect1 fix शाखा के शुरू होने से खोजने के लिए,

git merge-base master defect1-fix-branch 

का उपयोग के रूप में इस सवाल का जवाब में संकेत: https://stackoverflow.com/a/2458173/520162
git merge-base के दस्तावेज़ीकरण के अनुसार यह आपको 1 देता है।

defect1 fix शाखा का अंत बस इसके नाम से पहचाना जाता है। तो, सभी मतभेदों defect1 fix में पेश खोजने, आप

git diff 1..defect1-fix-branch 
+0

ठीक है, मैं ' .. ' और सवाल के बीच परिवर्तन चाहते हैं कैसे 'A' की' SHAs' यह पता लगाने की और 'अगर वे टैग नहीं किया गया d' है। –

+0

@AlexanderNikolayev: अद्यतन उत्तर देखें। – eckes

+1

यह 'नहीं होना चाहिए Git diff .. '? क्योंकि आप '1' और' ए 'के अंतर को भी शामिल करना चाहते हैं (जो शाखा के विकास का हिस्सा है)। – Shahbaz

1

के बारे में क्या करने की जरूरत है:

git diff <commit> <commit> 

प्रतिबद्ध मापदंडों कहाँ वास्तविक प्रतिबद्ध का SHA चेकसम हैं।

+1

हाँ, पर कैसे इन प्रतिबद्ध का SHA चेकसम यह पता लगाने के लिए? –

+0

आप इसे 'गिट लॉग' से देख सकते हैं –

0

आप क्या परिवर्तन एक सुविधा शाखा शुरू होने के बाद यह विलय कर दिया गया देखना चाहते हैं, तो आप बस चलाने:

git diff HEAD^..HEAD 

master शाखा पर। इससे पहले माता-पिता और HEAD के बीच अंतर (विलय प्रतिबद्ध) के बीच अंतर दिखाई देता है, जो प्रभावी रूप से पूरे शाखा शाखा विलय को मास्टर शाखा में लाया जाता है।

चीजें जटिल :)

3

नोट बनाने के लिए कोई ज़रूरत नहीं: करने के लिए के रूप में "Not able to think of a case where git diff master..lab and git diff master...lab would be different" में दिए गए विवरण इस, बराबर है,:

git diff master...defect1-fix-branch 

git diff A...Bgit diff $(git merge-base A B) B

के बराबर है

git diff dots

("git diff doesn't show enough" से)

संबंधित मुद्दे

 संबंधित मुद्दे