दो Git के बीच परिवर्तित होने वाली सभी फ़ाइलों की सूची कैसे प्राप्त करें?


178

नौकरशाही के कारण, मुझे एक रिपोर्ट के लिए अपनी रिपॉजिटरी में सभी परिवर्तित फ़ाइलों की एक सूची प्राप्त करने की आवश्यकता है (मैंने मौजूदा वेबसाइट कोड के साथ शुरू किया था)।

इस सूची को प्राप्त करने के लिए मुझे क्या चलाना चाहिए?


34
"नौकरशाही के कारण" xD
ptim

जवाबों:


238

दी गई SHA और आपकी वर्तमान प्रतिबद्धताओं के बीच परिवर्तित फ़ाइलों के लिए:

git diff --name-only <starting SHA> HEAD

या यदि आप परिवर्तित-लेकिन-नहीं-अभी तक प्रतिबद्ध फ़ाइलों को शामिल करना चाहते हैं:

git diff --name-only <starting SHA>

अधिक आम तौर पर, निम्नलिखित सिंटैक्स आपको हमेशा बताएगा कि कौन सी फाइलें दो कमिट (उनके SHAs या अन्य नामों द्वारा निर्दिष्ट) के बीच बदल गई हैं:

git diff --name-only <commit1> <commit2>

2
और यदि आप किसी विशेष कमिट के लिए संशोधित फाइलों को जानना चाहते हैं:git diff --name-only <SHA> <SHA>^
thebugfinder

3
--name-statusझंडे का उपयोग करने के बजाय --name-onlyफ़ाइलों की एक सूची प्राप्त करना और उनके संशोधन की स्थिति को देखना आसान है, जैसे कि जोड़ा या संशोधित।
ठाणे प्लमर

@ एम्बर को @ थेन प्लमर के नोटों का उल्लेख करना चाहिए जो --name-statusदर्शाता है कि उनके साथ क्या हुआ है
ज़ोल्टन सुले

64

अपनी अंतिम प्रतिबद्ध के बाद से संशोधित सभी फाइलों के नाम खोजने के लिए:

git diff --name-only

या (अनधिकृत फ़ाइलों सहित थोड़ी अधिक जानकारी के लिए):

git status

48
  • सभी अस्थिर ट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए :

    git diff --name-only
    
  • सभी चरणबद्ध ट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए :

    git diff --name-only --staged
    
  • सभी चरणबद्ध और अस्थिर ट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए :

    { git diff --name-only ; git diff --name-only --staged ; } | sort | uniq
    
  • सभी अनट्रैक की गई फ़ाइलों को सूचीबद्ध करने के लिए (जिन्हें सूचीबद्ध किया गया है git status, इसलिए किसी भी अनदेखा फ़ाइलों को शामिल नहीं किया गया है):

    git ls-files --other --exclude-standard
    

यदि आप एक खोल स्क्रिप्ट में इस का उपयोग कर रहे हैं, और आप प्रोग्राम जांचने के लिए इन आदेशों कुछ भी लौट आए, तो चाहते हैं, आप में रुचि हो जाएगा git diffके --exit-codeविकल्प।


16

जब मैंने कई फ़ाइलों को जोड़ा / संशोधित / हटा दिया है (अंतिम प्रतिबद्ध के बाद से), मैं कालानुक्रमिक क्रम में उन संशोधनों को देखना पसंद करता हूं।

उसके लिए मैं उपयोग करता हूं:

  • सभी गैर-चरणबद्ध फ़ाइलों को सूचीबद्ध करने के लिए:

    git ls-files --other --modified --exclude-standard
    
  • प्रत्येक फ़ाइल के लिए अंतिम संशोधित तिथि प्राप्त करने के लिए:

    while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done
    

हालांकि रूविम टिप्पणियों में सुझाव देता है :

xargs -0 stat -c '%y %n' -- 
  • उन्हें सबसे पुराने से हाल ही में क्रमबद्ध करने के लिए:

    sort
    

एक उपनाम इसका उपयोग करना आसान बनाता है:

alias gstlast='git ls-files --other --modified --exclude-standard|while read filename; do  echo -n "$(stat -c%y -- $filename 2> /dev/null) "; echo $filename;  done|sort'

या (कम और अधिक कुशल, ruvim के लिए धन्यवाद )

alias gstlast='git ls-files --other --modified --exclude-standard|xargs -0 stat -c '%y %n' --|sort'

उदाहरण के लिए:

username@hostname:~> gstlast
2015-01-20 11:40:05.000000000 +0000 .cpl/params/libelf
2015-01-21 09:02:58.435823000 +0000 .cpl/params/glib
2015-01-21 09:07:32.744336000 +0000 .cpl/params/libsecret
2015-01-21 09:10:01.294778000 +0000 .cpl/_deps
2015-01-21 09:17:42.846372000 +0000 .cpl/params/npth
2015-01-21 12:12:19.002718000 +0000 sbin/git-rcd

अब मैं अपने संशोधनों की समीक्षा कर सकता हूं, सबसे पुराने से लेकर हाल तक।


का उपयोग xargsऔर एकल कॉल क्यों नहीं करते stat? पूर्ण एक-लाइनर:git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
रुविम

@ruvim धन्यवाद। बहुत अच्छा सुझाव है। अधिक दृश्यता के लिए, मैंने आपकी टिप्पणी को शामिल करने के लिए उत्तर संपादित किया है।
VONC

4

मुझे उन फ़ाइलों की एक सूची की आवश्यकता है जो दो कमिट (केवल जोड़े या संशोधित) के बीच सामग्री को बदल दिया था, इसलिए मैंने उपयोग किया:

git diff --name-only --diff-filter=AM <commit hash #1> <commit hash #2>

गिट डिफ डॉक्यूमेंटेशन से अलग-अलग फ़िल्टर विकल्प :

diff फिल्टर = [(A | C | D | एम | R | T | यू | x | बी) ... [*]]

केवल उन्हीं फ़ाइलों का चयन करें जिन्हें जोड़ा गया है (A), कोपीड (C), हटाए गए (D), संशोधित (M), नामांकित (R), उनके प्रकार (जैसे कि नियमित फ़ाइल, सिमलिंक, सबमॉड्यूल,…) बदले हुए (T) अनमरजेड (U) हैं, अज्ञात (X) हैं, या उनकी जोड़ी टूटी हुई है (B)। फ़िल्टर वर्णों के किसी भी संयोजन (कोई नहीं सहित) का उपयोग किया जा सकता है। जब संयोजन में * ((या-और-कोई नहीं) जोड़ा जाता है, तो सभी रास्तों का चयन किया जाता है यदि कोई फ़ाइल है जो तुलना में अन्य मानदंडों से मेल खाती है; यदि कोई ऐसी फ़ाइल नहीं है जो अन्य मानदंडों से मेल खाती है, तो कुछ भी चयनित नहीं है।

इसके अलावा, इन ऊपरी-केस पत्रों को बाहर करने के लिए नीचे किया जा सकता है। जैसे --diff- फिल्टर = विज्ञापन जोड़े गए और हटाए गए रास्तों को शामिल नहीं करता है।

यदि आप स्थिति को भी सूचीबद्ध करना चाहते हैं (जैसे ए / एम), तो बदल --name-onlyदें --name-status


3

अनस्ट्रेड संशोधित की सूची का उपयोग करके प्राप्त किया जा सकता है git statusऔर grepनीचे की तरह कमांड। कुछ इस तरह git status -s | grep M:

root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
 M src/.../file1.js
 M src/.../file2.js
 M src/.../file3.js
 ....

ध्यान दें कि इसका उपयोग केवल अस्थिर परिवर्तनों के लिए किया जा सकता है, इसलिए यह 'उन फ़ाइलों के लिए उपयोगी नहीं है जो दो गिट कमिट के बीच बदल जाते हैं'
जॉन वंडेनबर्ग

2

git showआप के साथ एक समान परिणाम प्राप्त कर सकते हैं। git logउपयोग में शामिल फ़ाइलों की सूची के साथ कमिट देखने के लिए (जैसे यह देखने पर दिखता है ):

git show --name-only [commit-id_A]^..[commit-id_B]

[commit-id_A]प्रारंभिक प्रतिबद्धता कहां है और [commit-id_B]आप दिखाना चाहते हैं कि अंतिम प्रतिबद्धता क्या है।

^प्रतीक के साथ विशेष ध्यान । यदि आप ऐसा नहीं करते हैं, तो प्रतिबद्ध-आईडी_ए जानकारी तैनात नहीं होगी।


1

यदि आप बदली हुई फ़ाइलों की जाँच करना चाहते हैं, तो आपको कई छोटी-छोटी बातों का ध्यान रखना होगा, जैसे कि उपयोग करना सबसे अच्छा होगा, जैसे यदि आप जाँचना चाहते हैं कि कौन-सी फाइलें बदल गईं हैं

git स्टेटस - यह फाइलों को बदलाव के साथ दिखाएगा

फिर यदि आप जानना चाहते हैं कि क्या परिवर्तन किए जाने हैं, तो इसे तरीकों से जांचा जा सकता है,

git diff - सभी फाइलों में सभी परिवर्तन दिखाएगा

यह केवल तभी अच्छा होता है जब केवल एक फ़ाइल को संशोधित किया जाता है

और यदि आप किसी विशेष फ़ाइल को जांचना चाहते हैं तो उपयोग करें

git का अंतर

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