क्या यह देखने का कोई तरीका है कि किसी शाखा में क्या फाइलें बदल गई हैं?
क्या यह देखने का कोई तरीका है कि किसी शाखा में क्या फाइलें बदल गई हैं?
जवाबों:
@Marco Ponti द्वारा उत्तर के लिए एक विकल्प, और चेकआउट से परहेज:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
यदि आपका विशेष शेल $ () निर्माण को नहीं समझता है, तो इसके बजाय बैक-टिक का उपयोग करें।
git diff --name-only <some-other-branch>आपको बताएंगे कि क्या फ़ाइलें अपने वर्तमान शाखा और के बीच अलग-अलग हैं <some-other-branch>। तो यह अनिवार्य रूप से एक ही कमांड है, लेकिन ध्यान दें कि आप इसका उपयोग उन फ़ाइलों को खोजने के लिए कर सकते हैं जो किसी भी दो शाखाओं के बीच भिन्न हैं , भले ही वे दूरस्थ रूप से संबंधित न हों। वह तुलना उपयोगी है या नहीं, यह आपकी शाखाओं की टोपोलॉजी पर निर्भर करता है ... इसके अलावा, ध्यान दें कि <some-other-branch>वास्तव में कोई भी कमिटमेंट हो सकता है, या कुछ भी जो किसी एक (टैग्स, आदि) को हल करता है।
<notMainDev>और <MY_CURRENT_CO_BRANCH>हाल ही में एक सामान्य पूर्वज था, और <notMainDev>उस पूर्वज की तुलना करता है। आपको अपना वर्तमान शाखा नाम प्रदान करना होगा, हालांकि, git merge-baseदो तर्कों की अपेक्षा है - कम से कम वर्तमान संस्करण में कोई शॉर्टकट नहीं है।
git branch | grep '\*' | awk '{print $2}' जो <notMainDev> और मेरी वर्तमान शाखा के बीच शाखा के लिए प्रतिबद्ध होगा। फिर मैं git diff --name-only <notMainDev> $ (git मर्ज-बेस <notMainDev> git branch | grep '\*' | awk '{print $2}') कर सकता हूं
आपको बस इतना करना है:
git checkout <notMainDev>
git diff --name-only <mainDev>
यह आपको केवल फ़ाइल नाम दिखाएगा जो दोनों शाखाओं के बीच भिन्न हैं।
<mainDev>, जो शाखाओं में बदल जाने के बाद से बदल गए हैं। आप git diff --name-only <sha-of-branch-point>इसके बजाय उपयोग करना चाहते हैं , या वैकल्पिक उत्तर देख सकते हैं जो मैंने पोस्ट किया था जो चेकआउट से बचता है।
notMainDevमेनडेव कमिट के साथ डेट तक रखी जाएगी ... मैं आमतौर पर उन मतभेदों को देखने के लिए उपयोगी होता हूं।
<sha-of-branch-point>के साथgit rev-parse <branch-name>
अचंभित यह अब तक नहीं कहा गया है!
git diff master...branch
इसलिए केवल बदलाव देखें branch
वर्तमान शाखा उपयोग की जांच करने के लिए
git diff master...
Jqr का शुक्रिया
यह छोटा हाथ है
git diff $(git merge-base master branch) branch
इसलिए मर्ज बेस (शाखाओं के बीच सबसे हाल की आम प्रतिबद्धता) और शाखा टिप
साथ ही मूल / मास्टर का उपयोग करने से आपके स्थानीय मास्टर के दिनांकित होने की स्थिति में मदद मिलेगी
git diff --name-only master..यदि आप केवल उन फ़ाइलों के नाम चाहते हैं जो दो शाखाओं के बीच भिन्न हैं।
मुझे विश्वास नहीं होता कि ऐसा करने के बहुत सारे तरीके हैं। मैं व्हाट्सएप का उपयोग किसी के रूप में पोस्ट करने से पहले करता हूं, बस निम्नलिखित तर्कों के साथ:
git whatchanged --name-only --pretty="" origin..HEAD
यह केवल फ़ाइल नाम, और केवल उन लोगों को सूचीबद्ध करता है जो वर्तमान शाखा में बदल गए हैं।
मुझे वास्तव में @ ट्वेलबर्ग का जवाब पसंद आया लेकिन मैं हर समय वर्तमान शाखा का नाम टाइप नहीं करना चाहता था। इसलिए मैं इसका उपयोग कर रहा हूं:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-onlyजब लक्ष्य शाखा पर चलता हूं और उसी परिणाम को प्राप्त करता हूं । क्या आप इतने दयालु हो सकते हैं कि आपके उत्तर और मेरे द्वारा प्रदान की गई कमांड के बीच अच्छा बनाम बुरा होने पर कोई प्रतिक्रिया दें?
git diff master.. --name-only(ध्यान दें कि 3 के बजाय केवल 2 डॉट्स हैं)। यह समझने के लिए कि डॉट्स का क्या अर्थ है, इस उत्तर को
git diff --name-only master...branch-name
जिस से हम तुलना करना चाहते हैं।
क्या होगा अगर यह इतना आसान हो सकता है?
git changed
यदि आप यह मानने को तैयार हैं कि मुख्य शाखा को "मास्टर" कहा जाता है, और यह कि आप मास्टर से अपनी अन्य शाखाएँ बनाते हैं, तो आप इस उपनाम को अपनी ~/.gitconfigफ़ाइल में जोड़ सकते हैं ताकि यह आसान हो सके:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
वे धारणाएँ अधिकांश स्थितियों में अधिकांश लोगों के लिए काम करेंगी, लेकिन आपको पता होना चाहिए कि आप उन्हें बना रहे हैं।
इसके अलावा, आपको एक शेल का उपयोग करना चाहिए जो समर्थन करता है $()। यह बहुत संभावना है कि आपका शेल इस का समर्थन करता है ।
git show --stat origin/branch_name
यह आपको उन फ़ाइलों की एक सूची देगा जो इस शाखा के तहत जोड़ी या संशोधित की गई हैं।
किसी कारण के लिए कोई भी उल्लेख किया git-tree। Https://stackoverflow.com/a/424142/1657819 देखें
git-treeपसंद किया जाता है क्योंकि यह एक प्लंबिंग कमांड है; प्रोग्रामेटिक होने का मतलब (और, संभवतः, तेज)
(आधार शाखा है master)
git diff-tree --no-commit-id --name-only -r master..branch-name
हालाँकि यह आपको उन सभी फ़ाइलों को दिखाएगा जो शाखा में प्रभावित हुई थीं, यदि आप केवल स्पष्ट रूप से संशोधित फ़ाइलों को देखना चाहते हैं, तो आप उपयोग कर सकते हैं --diff-filter:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
फ़ाइलों की स्थिति ( / / और) को देखने के --name-statusबजाय कोई भी उपयोग कर सकता है--name-onlyAMD
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
स्वीकृत उत्तर - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)- बहुत करीब है, लेकिन मैंने देखा कि इसे हटाने के लिए स्थिति गलत है। मैंने एक शाखा में एक फ़ाइल को जोड़ा, और फिर भी इस कमांड (उपयोग --name-status) ने फ़ाइल को "ए" स्थिति को हटा दिया और जिस फ़ाइल को मैंने "" "स्थिति में जोड़ा।
मुझे इसके बजाय इस कमांड का उपयोग करना था:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
@Twalberg और @iconoclast ने जो किया, उसका विस्तार करते हुए, यदि आप किसी भी कारण से cmd का उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं:
FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y
निम्न बैच फ़ाइल Twalberg के उत्तर पर आधारित है, लेकिन विंडोज में काम करेगी:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
उपरोक्त मानता है कि मुख्य शाखा मूल / मास्टर है और उस गिट बश को शामिल किया गया था जब गिट स्थापित किया गया था (और इसका स्थान पथ वातावरण में है)। मुझे वास्तव में कॉन्फ़िगर किए गए डिफरेंशियल टूल (kdiff3) का उपयोग करके वास्तविक अंतर दिखाने की जरूरत थी ताकि ऊपर दिए गए निम्नलिखित बैश कमांड को प्रतिस्थापित किया जा सके:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"