लेखक तिथि के लिए निर्दिष्ट तिथि सीमा में कमिट दिखाने के लिए कैसे प्राप्त करें?


86

जाहिरा तौर पर यह :

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

फ़िल्टर कमिट तिथि के आधार पर चलता है । मैं एक निर्दिष्ट लेखक तिथि सीमा के लिए इसे कैसे दिखा सकता हूं?


जवाबों:


41

आप अकेले नहीं, कम से कम Git में नहीं। (इस सवाल पर जाकर दूसरों के लिए अनुस्मारक: इसके बारे में नहीं है को देखने के लिए लेखक की तारीख, इसके बारे में द्वारा प्रतिबद्ध के चयन लेखक की तारीख, एक ला --since/ --afterऔर --until/ --beforeइन चयनकर्ताओं का उपयोग। Committer तिथि, नहीं लेखक की तारीख एक चरम उदाहरण एक प्रतिबद्ध के रूप में विचार करें। "अभी" बना दिया गया है, ताकि इसकी कमिटरी डेट 2000 के दशक में हो, लेकिन लेखक-दिनांक फ़ील्ड में वर्ष 1999 में किसी दिन बैकडेट किया गया। यदि आपकी चयन सीमा "सदी के मोड़ के पास किसी भी समय" है, तो आप डी -इस विकल्प को चुनें, क्योंकि इसकी कमिटरी डेट "अब" है, 1999 से आगे एक दशक से अधिक।)

मैं इसे गिट में एक छोटा सा बग मानता हूं: आपको यह अनुरोध करने में सक्षम होना चाहिए कि यह लेखक की तारीख के क्षेत्र का उपयोग करें कहीं भी आप अनुरोध कर सकते हैं कि यह कमिट तिथि क्षेत्र का उपयोग करता है। लॉग फॉर्मेटिंग के साथ यह आसान है , क्योंकि हमारे पास %adऔर %cdपसंद है, लेकिन प्रतिबद्ध चयन के साथ असंभव है । हमारे पास जो निकटतम है वह git rev-listलेखक-तिथि (सामान्य टोपो-छँटाई के भीतर) द्वारा क्रमबद्ध हो सकता है।

में एक वैश्विक स्विच git rev-list, की तरह --use-author-date, एक साधारण पैच के रूप में काम करेगा, और भी Git में जोड़ने के लिए मुश्किल नहीं होगा, लेकिन मुझे लगता है कि यह है करने के लिए बेहतर होगा --min-author-ageऔर --max-author-ageया इसी तरह की है, और एक "प्रकार लेखक तिथि के अनुसार" झंडा (स्वतंत्र सामान्य --topo-orderध्वज, ताकि दोनों झंडे स्थापित करने का समान प्रभाव हो --author-date-order)।

वर्कअराउंड के रूप में, आप सभी संभावित-दिलचस्प कमिट्स को सूचीबद्ध कर सकते हैं ( git rev-listजैसे या समतुल्य, जैसे git log: दिनांक फ़िल्टर के अलावा, जो कुछ भी निर्दिष्ट करता है वह संभावित रूप से दिलचस्प बनाता है: इस मामले में बस यही है --all) और अपने सभी लेखक-तिथि फ़ील्ड निकालें (के साथ git log --format=%atया जो भी हो), उसके बाद कमिट आईडी की सूची की अपनी छंटाई करें, फिर शेष प्रतिबद्ध आईडी को फिर से जमा करें git log --no-walk। लेकिन यह सबसे अच्छा दर्दनाक है। अधिक के लिए awk का उपयोग करते हुए टिम बेगेलीसेन का उत्तर देखें ।


1
आपके अधिकार के लिए धन्यवाद मेरे लिए भ्रम को दूर कर रहा है - यह मुझे लंबे समय से परेशान कर रहा है और मैंने गैर-मौजूदा स्विच को खोजने और खोजने के लिए बहुत समय बिताया। क्या इसके लिए कोई बग पहले से ही खुला है?
Mr_and_Mrs_D

मुझे नहीं पता कि क्या गिट लोग इसे बग मानते हैं। मेलिंग सूचियों के लिंक के लिए github.com/git/git देखें ।
torek

124

शायद मुझे कुछ याद आ रहा है, लेकिन यह पर्याप्त नहीं होगा?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

यहां भी देखें


18
@RossSolomon: यह लेखक की तारीख दिखाता है, लेकिन कमिट तिथि द्वारा चयन करता है । एक चरम उदाहरण लेने के लिए, मान लीजिए कि मैं लेखक को 1999 के लिए निर्धारित तारीख और 01-01-2017 को आने वाली तारीख के साथ कमिट करता हूं। %adनिर्देश 2016 से पहले आप इस लेखक-इन 1999 के लिए प्रतिबद्ध है, भले ही वह यह है कि जिस तरह से दिखाई देगा!
torek

7
"शायद मुझे कुछ याद आ रहा है" हां, सवाल का पूरा बिंदु। यह प्रतिबद्ध दिनांक के आधार पर ओपी के रूप में फ़िल्टर करने की सटीक समान विधि का उपयोग करता है , लेकिन पहले से ही फ़िल्टर करने के बाद लेखक की तारीख दिखाता है कि वह क्या चाहता है। 18 लोगों को पढ़ने की इतनी बुरी समझ कैसे थी?
underscore_d

वह कमांड isbe-8601 तिथि प्रारूप के साथ --before और --after में काम नहीं करता है। मेरे लिए काम करने वाला प्रारूप "dd-mm-ccyy" है।
हकीटेगनर

8
डाउनवोटिंग क्योंकि यह उत्तर सामान्य रूप से उपयोगी होने के बावजूद प्रश्न को संबोधित नहीं करता है।
रावरॉन

2
यहां तक ​​कि अगर यह सवाल का जवाब नहीं देता है, अगर मैं इस जवाब पर ठोकर खाने के लिए हुआ और मेरी समान-लेकिन-नहीं-एक ही समस्या का हल मिला, तो मैं इस सवाल का जवाब दे रहा हूं, उतना ही सरल। हालांकि, इसका मतलब यह नहीं है कि उत्तर को स्वीकार किया जाना चाहिए, और मैं किसी को इसे नीचा समझ रहा हूं।
मेफिटिको

31

आप कर सकते हैं

लेकिन जैसा कि @torek ने उल्लेख किया है, आप शुद्ध Git के साथ ऐसा करने में सक्षम नहीं हो सकते हैं। एक विकल्प पाइप से कुछ बहुत प्रारूप उत्पादन होगा git logमें awkहै, और वहाँ लेखक तिथि की जांच:

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

यहां, %adआईएसओ प्रारूप में लेखक की तारीख %aNदेता है , और लेखक का नाम देता है।


1
धन्यवाद - मैं आगे गया और टॉर्क के उत्तर को अधिक व्यापक स्वीकार किया, लेकिन एक शुरुआती बिंदु देने के लिए आपका
उत्थान किया

2

ऊपर टिम बेगलेइसेन के जवाब से प्रेरित है।

git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u

मुझे जो चाहिए था वो किया। मुझे लेखक की तारीख चाहिए, तारीख नहीं, क्योंकि मैं बहुत पीछे हटता हूं और स्क्वैश करता हूं। लेकिन मैं आयात की तारीखों पर महत्वपूर्ण तारीख रखता हूं।

इससे संबंधित, मेरे पास एक छोटा सहायक है जो मुझे लेखक के ईमेल को रीसेट करने की अनुमति देता है लेकिन मूल लेखक की तारीख को ध्यान में रखते हुए। --reset- लेखक डिफ़ॉल्ट रूप से लेखक की तारीख को अधिलेखित करता है।

https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date

ऊपर दिए गए git लॉग पर, जब जरूरत हो, आप %Hgitsha प्राप्त करने के लिए जोड़ सकते हैं


1
सुंदर प्रारूप में% x08 का अर्थ है असीसी 08 जो कि बैकस्पेस है, इसलिए यह पिछले% विज्ञापन के अंतिम अंक को खाता है जो आईएसओ प्रारूप में लेखक की तारीख है, इसलिए मैं इस भिन्नता का उपयोग करता हूं (लेखक के नाम के बाद भी जोड़ा गया):git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u
sicko
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.