git - खोजें कि फ़ाइल कहाँ जोड़ी गई थी


208

कहो कि मेरे पास एक फ़ाइल है foo.jsजो कुछ समय पहले प्रतिबद्ध थी। मैं बस उस फ़ाइल को पहली बार जोड़े जाने के लिए प्रतिबद्ध करना चाहूंगा।

जवाब पढ़ने के बाद और मेरी खुद की छेड़छाड़, यह मेरे लिए काम करता है

git log --follow --diff-filter=A --find-renames=40% foo.js

जवाबों:


316

यहां सरल है, "शुद्ध गिट" ऐसा करने का तरीका, जिसकी कोई पाइपलाइन आवश्यक नहीं है:

git log --diff-filter=A -- foo.js

प्रलेखन की जाँच करें। आप हटाए गए, संशोधित आदि के लिए एक ही काम कर सकते हैं।

https://git-scm.com/docs/git-log#Documentation/git-log.txt---diff-filterACDMRTUXB82308203

मेरे पास इसके लिए एक आसान उपनाम है, क्योंकि मैं हमेशा इसे भूल जाता हूं:

git config --global alias.whatadded 'log --diff-filter=A'

यह इसे सरल बनाता है:

git whatadded -- foo.js

नीचे एक लाइनर रिकर्सिवली के उप निर्देशिका के माध्यम से खोज करेंगे $PWDके लिए foo.jsफाइल करने के लिए आपूर्ति और पूर्ण या संबंधित पथ के बिना, और न ही उसी निर्देशिका में होना करने के लिए फ़ाइल की आवश्यकता होगी$PWD

git log --diff-filter=A -- **foo.js

27
+1! हालाँकि, मेरी फ़ाइल एक सबफ़ोल्डर में थी, इसलिए केवल तभी काम किया जब मैंने सामने एक तारांकन जोड़ाgit log --diff-filter=A -- *subfolder/foo.js
जियो

4
अन्य शाखाओं से मर्ज की गई फ़ाइलों पर यह कार्य कैसे करता है, लेकिन उपयोगकर्ता द्वारा मर्ज किए जा रहे ब्रांच में मर्ज किए जा रहे आवश्यक नहीं जोड़े गए थे?
g33kz0r

ऊपर दिया गया डॉक लिंक ध्वज सूचना पर नहीं जाता है। शायद यह पोस्ट के बाद से बदल गया। git-scm.com/docs/git-log#Documentation/…
webbower

1
हां, उन्होंने डॉक्स में एंकर संरचना को बदल दिया। अद्यतन, धन्यवाद!
स्टेल्टरड

@ मुझे लगता है कि मुझे वही मिलता है जो आप कह रहे हैं, लेकिन वास्तव में नहीं, लेकिन मेरे पास समान उपयोग का मामला है, जहां मैं आमतौर पर एक गिट निर्देशिका की परियोजना की जड़ के भीतर रहता हूं और वहां से आदेश जारी करता हूं, और आपूर्ति किए गए एक लाइनर का उपयोग git log --diff-filter=A -- foo.jsनहीं करता है अपने टर्मिनल में एसटीडी के बारे में आईडी / हैश करें, बल्कि मुझे वांछित परिणाम प्राप्त करने के लिए गिट रेपो रूट से फाइल के लिए सापेक्ष पथ प्रदान करना होगा
20


1

निम्नलिखित आपकी रुचि के नहीं हो सकते हैं, लेकिन मुझे लगता है कि यह भविष्य में आपकी मदद करेगा और Gos में पारिस्थितिकी तंत्र को नष्ट करने का हिस्सा है:

आप यह git-blameदिखाने के लिए उपयोग कर सकते हैं कि किसी फ़ाइल की प्रत्येक पंक्ति, विशेष रूप से फ़ाइल एनोटेशन को किस संशोधन और लेखक ने अंतिम रूप से संशोधित किया है। यात्रा https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

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

git blame -L 174,190  xx.py

क्या आप बता सकते हैं कि प्रत्येक ऑपरेंड क्या करता है? मुझे लगता है कि आपने प्रासंगिक आरटीएफएम के लिए एक लिंक प्रदान किया है, लेकिन थोड़ा सा ध्यान देने से आपकी पोस्ट वन-स्टॉप शॉप बन जाएगी।
rossmcm

जैसा कि प्रो-गिट पुस्तक कहती है कि यदि आप अपने कोड में बग को ट्रैक करते हैं और जानना चाहते हैं कि इसे कब पेश किया गया था और क्यों, फाइल एनोटेशन अक्सर आपका सबसे अच्छा उपकरण है। यह आपको दिखाता है कि किसी भी फ़ाइल की प्रत्येक पंक्ति को संशोधित करने के लिए कौन सा प्रतिबद्ध था, इसलिए इस उदाहरण को मैंने -L विकल्प का उपयोग करके आउटपुट को 174 के माध्यम से 190 तक सीमित कर दिया है और अंतिम चीज़ केवल वह लक्ष्य फ़ाइल है जिसे आप जांचना चाहते हैं ( xx.py) इस मामले में एक अजगर फ़ाइल @rossmcm
Reidel
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.