ฉันจะดูการกระทำทั้งหมดในวันที่กำหนดได้อย่างไร


188

ฉันได้ดูเอกสารที่เกี่ยวข้องจากgit-scm.comและgitref.orgแล้ว แต่ดูเหมือนจะไม่สามารถเข้าใจได้

สมมติว่าฉันต้องการรับค่าคอมมิชชันทั้งหมดในวันอังคารที่ 12 พฤศจิกายน 2013 การใช้ repo ที่มีอยู่เป็นตัวอย่างฉันรู้ว่าฉันได้ทำสัญญาในวันนั้นและทำวันก่อนและหลัง

ด้วย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สูงกว่า) สิ่งต่อไปนี้ทั้งหมดให้ผลลัพธ์ตั้งแต่วันที่ 12 และ 13 พฤศจิกายน:

  • 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's ตั้งแต่ / หลัง / จนกระทั่ง / ก่อนที่จะจัดการกับตัวเองแปลกมากดังนั้นฉันไม่รู้คำตอบ แต่คุณลองระบุวันที่ + เวลา (เช่น --since = "2013-11-12 00:00 ")? นอกจากนี้ความมุ่งมั่นของคุณมีวันที่ที่แตกต่างกันกับผู้เขียนหรือไม่?
John Bartholomew

คุณเข้าใจแล้ว! การระบุเวลาทำงาน มันไม่ได้เกิดขึ้นกับฉันที่จะลองด้วยเวลา ขอบคุณ! สำหรับผู้เดินทางกับผู้เขียน - ไม่มีการติดตั้งแพทช์ในระหว่างวันที่เหล่านั้นดังนั้นมันจึงไม่ใช่
3cheesewheel

ดูเหมือนว่า 'git log --boundary' ควรทำเพื่อคุณดังนั้น 'git log --boundary --after = "2013-11-12" --before = "2013-11-12" จะแสดงขึ้นมา สิ่งหนึ่งที่แน่นอน (คนที่คุณคิดว่าจะเป็น :))
qneill

คำตอบ:


231

ขอบคุณ John Bartholomew!

คำตอบคือการระบุเวลาเช่น 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
HelloGoodbye

6
ในคอมไพล์ 2.13.0 git log --after="2017-07-25" --before="2017-07-26"ให้ผลลัพธ์ที่ถูกต้องสำหรับฉัน
powlo

1
นี่เป็นสาขาที่เช็คเอาท์ปัจจุบันหรือไม่? วิธีดูทั่วทุกสาขา
nawfal

นี่เป็นคำตอบที่ถูกต้อง แต่ฉันก็ยังงงงันและโพสต์คำถามติดตามนี้: stackoverflow.com/questions/59691065/…
bgoodr

28

ฉันมักจะตรวจสอบบันทึกการคอมไพล์ของฉันและดูสิ่งที่ฉันกำลังทำงานในวันที่ระบุและอัปเดตแผ่นเวลาของฉันตามนั้น แต่มันเป็นความเจ็บปวดในตูดที่จะพิมพ์ในวันที่เต็มรูปแบบในรูปแบบ ISO ดังนั้นฉันแค่ทำแบบนี้

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

และฉันเพิ่ม--authorเฉพาะพิมพ์คำมั่นสัญญาของฉัน

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

ภาพนี้แสดงว่าเกิดขึ้นในวันที่ 9 มิถุนายนที่ผ่านมา (สำหรับปี 2559 ในกรณีนี้และไม่ใช่สำหรับปี 2558 หรือ 2557 เป็นต้นไป)

--since/--afterและ--until/--beforeพารามิเตอร์ยังสามารถใช้สิ่งที่ชอบ3 days ago, yesterdayฯลฯ


ไม่ได้ผลอะไรเลย ฉันไม่มีอะไรเลยหรือ ฉันควรระบุสาขาหรือไม่
Aurimas

1
@Aurimas ดีไม่แน่ใจว่ามีอะไรผิดพลาดในตอนท้ายของคุณ หากค่าsinceและuntilค่าของคุณไม่ถูกต้องคุณจะไม่ได้ผลลัพธ์ที่แน่นอน ใช้git logครั้งแรกและลองเลือกsinceและuntilค่าตามสิ่งที่คุณเห็น ไม่จำเป็นต้องใช้สาขาหรืออะไรเป็นพิเศษ ไม่แน่ใจว่าคุณลักษณะนี้มีในรุ่น Git ใด ตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันล่าสุดเช่นกัน
KohányiRóbert

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

ผู้ใช้ Mac: ต้องใช้วันที่ 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:
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.