मैं एक हटाए गए भंडार में सभी हटाए गए फ़ाइलों को कैसे सूचीबद्ध कर सकता हूं?


304

मुझे पता है कि जब फाइलें हटाई जाती हैं, तो मैं Git स्टोर की जानकारी प्राप्त करता हूं और मैं यह देखने के लिए व्यक्तिगत कमिट्स की जांच करने में सक्षम हूं कि कौन सी फाइलें निकाली गई हैं, लेकिन क्या कोई कमांड है जो रिपॉजिटरी के जीवनकाल में हर हटाए गए फ़ाइल की सूची उत्पन्न करेगा?


इस उत्तर पर ठोकर खाने वाले किसी भी व्यक्ति के लिए, केवल एक प्रतिबद्ध हैश या शाखा से दूसरी में जोड़ी गई फ़ाइलों का नाम, नाम, हटाए गए, संशोधित, आदि देखने के लिए देख रहे हैं: यह करें git diff --name-status commit_hash
गेब्रियल स्टेपल्स

जवाबों:


409
git log --diff-filter=D --summary

देखें और हटाए गए फ़ाइल को Git रिपॉजिटरी में खोजें और पुनर्स्थापित करें

यदि आप नहीं चाहते हैं कि वे किस जानकारी को हटाए गए हैं, तो आप बस इसमें कुछ जोड़ सकते हैं grep delete

git log --diff-filter=D --summary | grep delete

13
चेतावनी: यह आपके द्वारा हटाई गई किसी भी फ़ाइल को सूचीबद्ध करता है। यदि आपने कोई फ़ाइल हटा दी है, तो उसी नाम से एक नई फ़ाइल बनाई है, यह इस सूची में दिखाई देगी , भले ही वहाँ कोई अतिरिक्त फ़ाइल हो।
टीजे क्राउडर

24
आपको git whatchanged कमांड को भी देखना चाहिए । यह बहुत अच्छा है।
मि। बैलेक

6
यह नाम भी हटाए जाने के रूप में सूचीबद्ध करेगा। इन git log --find-renames --diff-filter=D --summary | grep delete
उपयोगों

2
Git के साथ 2.9 नाम बदलने का पता डिफ़ॉल्ट रूप से सक्रिय है। इन्हें हटाने के लिए फिर से उपयोग के रूप में देखने के लिएgit log --no-renames --diff-filter=D --summary | grep delete
माइकल ग्रो

2
उपयोग करने से सावधान रहें grep deleteक्योंकि यदि प्रतिबद्ध संदेश में शब्द हटाना है, तो इसे भी उठाया जाएगा। grep 'delete mode'इसके बजाय उपयोग करें ।
वादिम


37

यदि आप केवल वर्तमान में हटाई गई फ़ाइलों को देखने में रुचि रखते हैं, तो आप इसका उपयोग कर सकते हैं:

git ls-files --deleted

यदि आप तब उन्हें हटाना चाहते हैं (यदि आपने "git rm" का उपयोग नहीं किया है तो उन्हें हटा दिया है)

git ls-files --deleted | xargs git rm

11
यह इंडेक्स में केवल उन फाइलों को दिखाता है जिन्हें वर्किंग कॉपी में डिलीट कर दिया गया है। ओपी उन सभी फाइलों को चाहता है जिन्हें कभी हटाया गया हो।
मैक्स नानसी सेप

1
याgit rm $(git ls-files --deleted)
यूज़ेन

भले ही यह ओपी नहीं चाहता था, यह अभी भी कम से कम खुद के लिए उपयोगी था, क्योंकि मुझे एक खोज में अपनी क्वेरी को ठीक से समझने में परेशानी हुई
solstice333

10

इस स्टैक ओवरफ्लो जवाब का हवाला देते हुए ।

यह प्रत्येक प्रकार की फ़ाइल को बदलने के लिए टाइप-ऑफ-चेंज (ए: एडेड, एम: मोडिफाइड, डी: डिलीटेड) पाने के लिए एक बहुत साफ तरीका है ।

git diff --name-status

4

और अगर आप किसी भी तरह से यहाँ एक अच्छे परिणाम के लिए विवश करना चाहते हैं:

$ git log --diff-filter=D --summary | sed -n '/^commit/h;/\/some_dir\//{G;s/\ncommit \(.*\)/ \1/gp}'
delete mode 100644 blah/some_dir/file1 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file2 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file3 9c89b91d8df7c95c6043184154c476623414fcb7

आपको some_dirकम्‍प्‍ल्ट नंबर (जिसमें सेड कमांड देखें) से डिलीट कर दिया जाएगा । कोई भी sed regex करेगा (मैं इसका उपयोग हटाए गए फ़ाइल प्रकारों को खोजने के लिए करता हूं, आदि)


2
मेरा मानना ​​है कि दैनिक डेवलपर जीवन में उपयोगी होने के लिए यह जटिल है। इसके बजाय, यदि आप वर्तमान निर्देशिका से हटाई गई फ़ाइलों को सूचीबद्ध करना चाहते हैं, तो बस करें:git log --diff-filter=D .
सेबी

मेरे पास मामला यह था कि निर्देशिका को भी हटा दिया गया था और मैं सिर्फ नाम का नया हिस्सा था।
एस्टानी

4

चूंकि विंडोज में grepकमांड नहीं है , इसलिए यह मेरे लिए PowerShell में काम करता है:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt

क्या है Select-String?
मार्कस जे

1
यह एक PowerShell cmdlet है। देखें docs.microsoft.com/en-us/powershell/module/...
जेम्स Skemp

विंडोज में FIND और FINDSTR हैं , हालांकि मुझे मानना ​​होगा कि मैंने कभी भी उनका इस्तेमाल नहीं किया है। Git Bash इंस्टॉल करना सबसे आसान तरीका है। एक विकल्प फूला हुआ सागविन है
पीटर मोर्टेंसन

4

हटाए गए सभी फ़ाइलों को some_branch में दिखाएं

git diff origin/master...origin/some_branch --name-status | grep ^D

या

git diff origin/master...origin/some_branch --name-status --diff-filter=D 

2
यह काम नहीं करेगा क्योंकि इसमें डी के साथ सभी फाइलें होंगी। आपको git diff origin/master...origin/some_branch --name-status | grep ^Dgit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood

1

यह आपको उन सभी फाइलों की एक सूची मिलेगी, जो सभी शाखाओं में हटा दी गई थीं, उनके मार्ग द्वारा छांटी गई:

git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt

Msysgit में काम करता है (2.6.1.windows.1)। नोट हमें "डिलीट मोड 100" की आवश्यकता है क्योंकि जीआईटी फाइलें मोड 100644 या 100755 के रूप में शुरू हो सकती हैं।

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