मैं एक विशिष्ट दिन के लिए सभी तरीके कैसे देखता हूं?


187

मैंने पहले ही git-scm.com और gitref.org से प्रासंगिक डॉक्स को देखा है , लेकिन मुझे यह पता नहीं लग सकता है।

मान लीजिए कि मैं मंगलवार, 12 नवंबर, 2013 के लिए सभी कमिट्स प्राप्त करना चाहता हूं। एक उदाहरण के रूप में मौजूदा रेपो का उपयोग करते हुए, मैं इस तथ्य के लिए जानता हूं कि मैंने उस दिन पर काम किया है, साथ ही एक दिन पहले और उसके बाद के दिन भी करता है।

के साथ 2013-11-11और2013-11-12

निम्नलिखित सभी मुझे 11 नवंबर और 12 वीं दोनों के लिए देते हैं:

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

2013-11-12केवल के साथ

निम्नलिखित सभी मुझे कोई लाभ नहीं देते हैं:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

के साथ 2013-11-12और2013-11-13

जैसा कि अपेक्षित था ( ऊपर 2013-11-11और 2013-11-12ऊपर के परिणामों से), निम्नलिखित में से सभी मुझे १२ नवंबर और १३ वीं दोनों के परिणाम देते हैं:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

...इत्यादि इत्यादि। मैं जैसे मैं के हर संभव संयोजन की कोशिश की है लग रहा है since, after, before, और until, लेकिन अभी भी उत्तर नहीं मिलता है, और न ही मैं समझता हूँ कि क्या उन विकल्पों, समावेशी या अनन्य हैं, क्योंकि वे समावेशी होना करने के लिए करता है, तो दो तिथियों के अलग हैं लगता है, लेकिन अनन्य यदि वे एक ही दिन हैं। क्या मुझे कुछ याद आया / मैं गलत क्या कर रहा हूँ ?!


8
मैंने खुद को बहुत ही अजीब तरीके से संभालने से पहले / बाद में / बाद तक git पाया है, इसलिए मुझे इसका उत्तर नहीं पता है, लेकिन क्या आपने दिनांक + समय निर्दिष्ट करने की कोशिश की है (जैसे, - since = "2013-11-12 00:00 ")? इसके अलावा, क्या (किसी भी) आपके कॉमेट्स में लेखक की तारीखें अलग-अलग हैं?
जॉन बार्थोलोम्यू

आपको यह मिला! काम किए गए समय को निर्दिष्ट करना। एक समय के साथ इसे आजमाने के लिए मेरे पास भी नहीं था। धन्यवाद! कमेंटरी बनाम लेखक तिथियों के लिए - उन तारीखों के दौरान कोई पैच लागू नहीं किए गए थे, इसलिए यह नहीं था।
3cheesheheel

मुझे लगता है कि 'गिट लॉग - इनबाउंडरी' को आपके लिए ऐसा करना चाहिए, ताकि 'गेट लॉग - इनबाउंडरी - आफ्टर = "2013-11-12" --before = "2013-11-12"' शो वास्तव में एक कमिट (वह जिसे आप सोचते हैं :))।
क़नील

जवाबों:


230

धन्यवाद जॉन बार्थोलोम्यू!

उत्तर समय निर्दिष्ट करने के लिए है, उदाहरण के लिए git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


12
अच्छा लगा। हालाँकि, यह आदेश अगले दिन 23:59 और 00:00 बजे के बीच शुरू होगा, इसलिए git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"बेहतर है। मेरा मानना ​​है gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &कि अगर आपने gitk इंस्टॉल किया है तो यह भी काम करेगा।
हैलोगूडीबाई

6
2.13.0 git में। git log --after="2017-07-25" --before="2017-07-26"मेरे लिए वैध परिणाम देता है।
9

1
क्या यह वर्तमान चेक आउट शाखा के लिए है? सभी शाखाओं में कैसे देखें?
नवाफल

यह सही उत्तर है, लेकिन मैं अभी भी इससे
परेशान हूं

28

मैं आमतौर पर अपने गिट लॉग की जांच करता हूं और देखता हूं कि मैं एक विशेष दिन पर क्या काम कर रहा था और इसके आधार पर अपनी टाइमशीट को अपडेट कर सकता हूं, लेकिन यह आईएसओ प्रारूप में पूर्ण तिथि में टाइप करने के लिए गधे में दर्द है इसलिए मैं इसे इस तरह से करता हूं

git log --after=jun9 --before=jun10

और मैं --authorकेवल अपने कमेंट्स को प्रिंट करने के लिए जोड़ता हूं

git log --since=jun9 --until=jun10 --author=Robert 

यह प्रिंट कमिट करता है जो पिछले 9 जून को हुआ था (इसलिए इस मामले में 2016 के लिए और 2015 या 2014 के लिए नहीं और इसी तरह)।

--since/--afterऔर --until/--beforeमानकों को भी तरह सामान ले जा सकते हैं 3 days ago, yesterdayआदि


बस काम नहीं करता है, कुछ भी नहीं आउटपुट। क्या मुझे कुछ याद आ रहा है? क्या मुझे एक शाखा निर्दिष्ट करनी चाहिए?
औरिमास

1
@ अरीमास खैर, यकीन नहीं होता कि आपके अंत में क्या गलत हुआ। यदि आपके sinceऔर untilमान सही नहीं हैं, तो आपको कोई आउटपुट नहीं मिलेगा जो सुनिश्चित हो। का प्रयोग करें git logपहले, और एक चुनने का प्रयास करें sinceऔर untilमूल्य आप जो देखते हैं पर आधारित है। कोई शाखा या कुछ विशेष आवश्यक नहीं। निश्चित नहीं है कि किस संस्करण से यह सुविधा उपलब्ध है। सुनिश्चित करें कि आपके पास हाल ही में संस्करण भी है।
कोहनी रॉबर्ट

6
मुझे रिक्त स्थान का उपयोग करना था:git log --after="may 2" --before="may 3"
कॉनर क्लार्क

15

स्वीकृत उत्तर के साथ कुछ भी गलत नहीं है (जो मैंने उतारा), लेकिन ... हम विज्ञान के लिए यहाँ हैं!

नीचे दिए गए आउटपुट को pretty=format:<string> प्लेसहोल्डर्स के साथ विस्तारित / अनुकूलित किया जा सकता है :

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

त्रुटियों के लिए 100% प्रतिरक्षा नहीं के रूप में एक ही स्ट्रिंग एक उपयोगकर्ता द्वारा दर्ज किया जा सकता था। लेकिन किस प्लेसहोल्डर का उपयोग किया जाता है, इसके आधार पर स्वीकार्य। उदाहरण के लिए ऊपर का स्निपेट विफल नहीं होगा।

एक के रूप में अच्छी तरह से बस पूरे पार्स करने के git logलिए JSONऔर उपभोग कर सकते हैं / एक के दिल की सामग्री के लिए अपने डेटा में हेरफेर। चेक https://github.com/dreamyguy/gitlogg बाहर और वापस देखो कभी नहीं!

अस्वीकरण: यह मेरी परियोजनाओं में से एक है।


10

मैंने उस विशिष्ट उद्देश्य के लिए एक गुप्त उपनाम बनाया :

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

उपयोग:

git commitsAtDate 2017-08-18

1
आप भी रिश्तेदार दिनांकों इस उर्फ करने के लिए, यानी निर्दिष्ट कर सकते हैं git commitsAtDate yesterday, 2 days agoआदि
voiger

-2

यह स्क्रिप्ट वर्तमान रेपो के लिए उपलब्ध समय सीमा को प्रदर्शित करता है, फिर उस दिनांक के लिए संकेत देता है जिसे आप से देखना चाहते हैं। यह एक छोटा SHA और पूर्ण SHA, लेखक, प्रतिबद्ध टाइमस्टैम्प और एकल उद्धरणों में टिप्पणियों को प्रदर्शित करता है।

जब तक आप Enter या Control-D दबाते हैं, स्क्रिप्ट तारीखों के लिए संकेत देती रहती है।

मैक उपयोगकर्ताओं: gnu दिनांक की आवश्यकता है।

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

मैंने स्क्रिप्ट को कॉल किया commitsOnDates, और यहाँ यह एक्शन में है। मेरे द्वारा दर्ज की जाने वाली पहली तारीख का कोई हंगामा नहीं है, इसलिए प्रतिक्रिया सिर्फ एक खाली पंक्ति है:

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

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