केवल दो नामों के बीच बदले गए फ़ाइल नामों को कैसे सूचीबद्ध करें?


1951

मेरे पास रेपो में कमिट्स का एक गुच्छा है। मैं दो कमिट के बीच बदली हुई फाइलों की एक सूची देखना चाहता हूं - SHA1 से SHA2 तक।

मुझे किस कमांड का उपयोग करना चाहिए?


3
एक कमिट और उसके अभिभावक के लिए: stackoverflow.com/questions/424071/…
Ciro Santilli 审查 parent parent parent

जवाबों:


2661
git diff --name-only SHA1 SHA2

जहां आपको कमिट की पहचान करने के लिए केवल SHA को शामिल करने की आवश्यकता है। आप भी कर सकते हैं, उदाहरण के लिए

git diff --name-only HEAD~10 HEAD~5

दसवीं नवीनतम प्रतिबद्ध और पांचवें नवीनतम (या तो) के बीच अंतर देखने के लिए।


151
यह गिट शो के लिए भी काम करता है। git show --name-only SHA1
अगस्त लिलियास

78
git diff --name-status [TAG|SHA1]दिखाता है कि फाइलों के लिए भी क्या संचालन किया गया था
पुन: कनेक्ट करें

2
आप यह भी कर सकते हैं: git diff --name-only HEAD @ {3} HEAD @ {0} सटीक कमिट्स के लिए जिनकी आप तुलना करना चाहते हैं।
b01

7
@AugustLilleaas वास्तव में शो का उपयोग करते हुए केवल 2 विशिष्ट कमिट दिखाएगा, यदि आप उन 2 के बीच कमिट करते हैं तो उन्हें छोड़ दिया जाएगा
chrisan

4
जैसा कि नीचे उल्लेख किया गया है, git diff --name-statusजोड़ा फ़ाइलों को दिखाना नहीं चाहते हैं। @sschuberth ने बताया git show, जो मेरे लिए ठीक से काम करता है git show --pretty=format: --name-status:। बस करने git show --name-statusसे थोड़ी अधिक जानकारी मिलती है, लेकिन फिर भी अच्छा और घना ... यह मेरा नया गोटो कमांड होगा;)
ट्रैबिक

416
git diff --name-status [SHA1 [SHA2]]

यह है कि --name-only, सिवाय इसके कि आपको एक सरल उपसर्ग मिले जो आपको बताए कि फाइल का क्या हुआ (संशोधित, हटाए गए, जोड़े गए ...)

git log --name-status --oneline [SHA1..SHA2]

समान है, लेकिन यह प्रतिबद्ध संदेश के बाद सूचीबद्ध होता है, इसलिए आप देख सकते हैं कि फाइल कब बदली गई।

  • अगर आप सिर्फ क्या कुछ फ़ाइलों को क्या हुआ में रुचि रखते हैं / फ़ोल्डर आप जोड़ सकते हैं -- <filename> [<filename>...]करने के लिए git logसंस्करण।

  • यदि आप यह देखना चाहते हैं कि एक प्रतिबद्ध के लिए क्या हुआ, तो इसे SHA1 कहें, फिर करें
    git log --name-status --oneline [SHA1^..SHA1]

फ़ाइल स्थिति झंडे:
M संशोधित - फ़ाइल को
C-edit संशोधित किया गया है - फ़ाइल की प्रतिलिपि बनाई गई है और
R नाम बदलें- संशोधित किया गया है - फ़ाइल का नाम बदला गया है और संशोधित
A जोड़ा गया है - फ़ाइल को जोड़ा गया है
D हटा दिया गया है - फ़ाइल को हटा दिया गया है
U unmerged - मर्ज के बाद फ़ाइल में विरोध होता है


मैं कहता हूं कि git diff --name-status कहना है और इसने 'जोड़ी गई फ़ाइल' दी।
आर्टिस्ट

1
Git लॉग के लिए, इसे SHA1..SHA2 की तरह SHAs के बीच दो डॉट्स होने चाहिए, और दूसरा SHA वैकल्पिक नहीं है, इसलिए इसे इस तरह दिखना चाहिए: git log --name-status --online [SHA1 .. SHA2]
ट्वैसब्रिलिग

क्या कुछ फ़ाइलों / कुछ फ़ाइल प्रकारों को बाहर करने का कोई तरीका है?
अगस्त

3
--relative[=<path>]विकल्प आपको मदद मिल सकती है, मुझे यकीन है कि नहीं हूँ। नहीं तो हमेशा होता है | erep -v '(.tmp|.foo|.dontwant)$'...
artfulrobot

80

ऐसा लगता है कि किसी ने भी स्विच का उल्लेख नहीं किया है --stat:

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

वे भी हैं --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

तथा --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

4
स्वीकृत उत्तर सही है, लेकिन यह सुपर उपयोगी है और आपको थोड़ी अतिरिक्त जानकारी देता है। धन्यवाद!
कोंतुर k ’

2
इससे सहमत एक अधिक उपयोगी जवाब है क्योंकि इसमें अलग-अलग आँकड़े हैं।
इंटरनेट

52

लेकिन आपकी शाखा और उसके सामान्य पूर्वज के बीच एक और शाखा के साथ परिवर्तित फ़ाइलों को देखने के लिए (मूल / स्वामी कहें)

git diff --name-only `git merge-base origin/master HEAD`

1
यह वास्तव में उपयोगी था! काश मैं बस इतना कहूं git diffstatus masterया समान हो, जो ऊपर से ट्रिगर करता है।
oma

3
या git show --pretty=format: --name-only origin/master..
sschuberth

आप इसे एक उपनाम नहीं बना सकते हैं, लेकिन आप इसे अपने .bashrc में डाल सकते हैं।
फ्रेड

3
या और भी सरल: git diff --name-only HEAD...master(तीन बिंदुओं पर ध्यान दें)। विस्तृत विवरण के लिए, यहां देखें ।
ओस्ट्रोकैच

1
लगता है ज्यादातर सही जवाब! सरल git diff --name-only master..branchजीथब पीआर सूची के अनुरूप नहीं है। इस तरह अधिक सटीक। लेकिन वैसे भी मेरे पास १ anyway३ चिटेड फाइलें हैं १1१ में जीथब पीआर। (बिना merge-baseमेरे पास 228 बनाम 171 है)
x'ES

21

यदि आप दो शाखाओं के बीच परिवर्तित फ़ाइलों को दिखाना चाहते हैं, तो @ artfulrobot के उत्तर को पूरक करने के लिए:

git diff --name-status mybranch..myotherbranch

पूर्वता पर सावधान रहें। यदि आप नई शाखा को पहले रखते हैं तो यह जोड़ा के बजाय हटाई गई फ़ाइलों को दिखाएगा।

grepचीजों को जोड़ने से चीजों को और अधिक परिष्कृत किया जा सकता है:

git diff --name-status mybranch..myotherbranch | grep "A\t"

उसके बाद केवल जोड़ी गई फ़ाइलें दिखाई देंगी myotherbranch


4
Regexes वास्तव में लगभग कुछ भी कर सकते हैं एक अच्छा कर रहे हैं। इस मामले में, हालांकि, वहाँ भी है --diff-filterजो इस कार्यक्षमता को मूल रूप से देता है, जिसका अर्थ है कि गलत परिणाम की संभावना कम है (उदाहरण के लिए गलत सकारात्मक)
जैस्पर

8

अपने नीचे उपनाम जोड़ें ~/.bash_profile, फिर चलाएं source ~/.bash_profile; अब कभी भी आपको showfilesअपने कमिट रिपॉजिटरी से अपडेट की गई फाइलों को अंतिम प्रतिबद्ध में देखना होगा ।

alias showfiles='git show --pretty="format:" --name-only'

2
या git config --global alias.showfiles 'show --pretty="format:" --name-only'बनाने के लिए git showfiles
cgmb


5

यह भी ध्यान दें, यदि आप केवल अंतिम प्रतिबद्ध और उसके पहले के बीच परिवर्तित फ़ाइलों को देखना चाहते हैं। यह ठीक काम करता है:git show --name-only


3

Git log --pretty = oneline> C: \ filename.log का उपयोग करें

जो केवल एक ऑनलाइन (--pretty = oneline) लॉग इन करेगा जो बदले हुए फ़ाइल का नाम है। साथ ही आपके आउटपुट फ़ाइल में सभी विवरणों को लॉग करेगा।


git log --pretty=onelineमुझे केवल SHA और कमिट मैसेज देता है git 2.10.1 का उपयोग करके
डैम

3

जैसा Artfulrobot ने अपने उत्तर में कहा:

git diff --name-status [SHA1 [SHA2]]

मेरा उदाहरण:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png

3

बस किसी के लिए जो केवल जावा फाइलों पर ध्यान केंद्रित करने की जरूरत है, यह मेरा समाधान है:

 git diff --name-status SHA1 SHA2 | grep '\.java$'

1

निम्नलिखित मेरे लिए अच्छी तरह से काम करता है:

$ git show --name-only --format=tformat: SHA1..SHA2

यह भी एक प्रतिबद्ध के साथ इस्तेमाल किया जा सकता है:

git show --name-only --format=tformat: SHA1

जो जेनकींस में उपयोग के लिए आसान है, जहां आपको परिवर्तन की सूची SHA की सूची प्रदान की जाती है, और उन फाइलों को बदलने के लिए उन पर पुनरावृति करना चाहते हैं।

यह ऊपर दिए गए उत्तरों के एक जोड़े के समान है, लेकिन इसके tformat:बजाय format:कमिट के बीच विभाजक स्थान को हटा देता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.