Làm cách nào để tôi xem tất cả các cam kết cho một ngày cụ thể?


186

Tôi đã xem các tài liệu liên quan từ git-scm.comgitref.org , nhưng dường như tôi không thể tìm ra điều này.

Giả sử tôi muốn nhận tất cả các cam kết vào thứ ba ngày 12 tháng 11 năm 2013. Sử dụng một repo hiện có làm ví dụ, tôi biết một thực tế là tôi đã cam kết vào ngày hôm đó, cũng như cam kết vào ngày hôm trước và ngày hôm sau.

Với 2013-11-112013-11-12

Tất cả những điều sau đây cho tôi cam kết cho cả ngày 11 và 12 tháng 11:

  • 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"

với 2013-11-12chỉ

Tất cả những điều sau đây cho tôi không cam kết:

  • 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"

Với 2013-11-122013-11-13

Đúng như dự đoán (từ kết quả của 2013-11-112013-11-12ở trên), tất cả những điều sau đây cho tôi kết quả từ cả hai ngày 12 tháng 11 và 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"

...Vân vân và vân vân. Tôi cảm thấy như tôi đã thử mọi sự kết hợp có thể có của since, after, before, và untilnhưng vẫn không thể tìm ra câu trả lời, cũng không làm tôi hiểu liệu những tùy chọn bao gồm hoặc độc quyền, kể từ khi họ dường như đã bao gồm nếu hai ngày khác nhau, nhưng độc quyền nếu họ ở cùng một ngày. Tôi đã bỏ lỡ điều gì / tôi đang làm gì sai?!


8
Bản thân tôi đã tìm thấy git từ / sau / cho đến / trước khi xử lý rất kỳ lạ, vì vậy tôi không biết câu trả lời, nhưng bạn đã thử chỉ định ngày + thời gian (ví dụ: --since = "2013-11-12 00:00 ")? Ngoài ra, liệu (bất kỳ) cam kết của bạn có ngày bắt đầu khác với ngày tác giả không?
John Bartholomew

Bạn hiểu rồi Chỉ định thời gian làm việc. Nó thậm chí không xảy ra với tôi để thử nó với một thời gian. Cảm ơn! Đối với ngày giao dịch so với ngày của tác giả - không có bản vá nào được áp dụng trong những ngày đó, vì vậy đó không phải là bản vá.
3cheesewheel

Dường như với tôi rằng 'git log --ienary' sẽ làm điều này cho bạn, do đó 'git log --ienary --after = "2013-11-12" --b Before = "2013-11-12"' sẽ hiển thị chính xác một cam kết (một trong những bạn nghĩ nó sẽ :)).
qneill

Câu trả lời:


229

Cảm ơn John Bartholomew!

Câu trả lời là chỉ định thời gian, vd git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


12
Đẹp. Tuy nhiên, lệnh đó sẽ bỏ qua các cam kết trong khoảng thời gian từ 23:59 đến 00:00 ngày hôm sau, do đó git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"tốt hơn. Tôi tin rằng gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &cũng sẽ hoạt động nếu bạn đã cài đặt gitk.
HelloGoodbye

6
Trong git 2.13.0. git log --after="2017-07-25" --before="2017-07-26"cho kết quả hợp lệ cho tôi.
powlo

1
Đây có phải là chi nhánh kiểm tra hiện tại? Làm thế nào để xem trên tất cả các chi nhánh?
nawfal

Đây là câu trả lời đúng, nhưng tôi vẫn bị nó làm phiền và đăng câu hỏi tiếp theo này: stackoverflow.com/questions/59691065/
Kẻ

28

Tôi thường kiểm tra nhật ký git của mình và xem những gì tôi đã làm việc vào một ngày cụ thể và cập nhật bảng thời gian của mình dựa trên đó, nhưng thật khó để đánh máy vào ngày đầy đủ ở định dạng ISO vì vậy tôi chỉ làm như vậy

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

và tôi thêm --authorvào chỉ in cam kết của mình

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

Bản in này cam kết xảy ra vào ngày 9 tháng 6 vừa qua (vì vậy trong năm 2016 trong trường hợp này chứ không phải cho năm 2015 hoặc 2014, v.v.).

Các --since/--after--until/--beforecác thông số cũng có thể mất những thứ như thế 3 days ago, yesterdayvv


Đơn giản là không hoạt động, đầu ra không có gì. Tôi có thiếu thứ gì không? Tôi có nên chỉ định một chi nhánh?
Aurimas

1
@Aurimas Vâng, không chắc chắn những gì đã sai ở cuối của bạn. Nếu giá trị sinceuntilgiá trị của bạn không chính xác, bạn sẽ không nhận được kết quả đầu ra nào. Sử dụng git logđầu tiên và cố gắng chọn một sinceuntilgiá trị dựa trên những gì bạn thấy. Không có chi nhánh hoặc bất cứ điều gì đặc biệt cần thiết. Không chắc chắn từ phiên bản Git này tính năng này có sẵn. Hãy chắc chắn rằng bạn có một phiên bản gần đây là tốt.
Kohányi Róbert

6
Tôi đã phải sử dụng khoảng trắng:git log --after="may 2" --before="may 3"
Connor Clark

15

Không có gì sai với câu trả lời được chấp nhận (mà tôi nêu lên), nhưng ... chúng tôi ở đây vì khoa học!

Đầu ra bên dưới có thể được mở rộng / tùy chỉnh với pretty=format:<string> trình giữ chỗ :

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

Không phải 100% miễn dịch với các lỗi vì cùng một chuỗi có thể được nhập bởi người dùng. Nhưng chấp nhận được tùy thuộc vào chỗ giữ được sử dụng. Đoạn mã trên sẽ không thất bại, ví dụ.

Người ta có thể cũng chỉ cần phân tích toàn bộ git logđể JSONvà tiêu thụ / thao tác dữ liệu của nó tới nội dung trái tim của một người. Kiểm tra https://github.com/dreamyguy/gitlogg và không bao giờ nhìn lại!

Tuyên bố miễn trừ trách nhiệm: đó là một trong những dự án của tôi.


10

Tôi đã tạo một bí danh git cho mục đích cụ thể đó:

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"

Sử dụng:

git commitsAtDate 2017-08-18

1
bạn cũng có thể chỉ định số ngày tương ứng với bí danh này, ví dụ git commitsAtDate yesterday, 2 days agovv
voiger

-2

Tập lệnh này hiển thị phạm vi ngày cam kết có sẵn cho repo hiện tại, sau đó nhắc về ngày mà bạn muốn xem các cam kết từ đó. Nó hiển thị một SHA ngắn và SHA đầy đủ, tác giả, dấu thời gian cam kết và các nhận xét trong dấu ngoặc đơn.

Tập lệnh tiếp tục nhắc ngày cho đến khi bạn nhấn Enter hoặc Control-D.

Người dùng Mac: yêu cầu ngày 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

Tôi đã gọi kịch bản commitsOnDates, và đây là hành động. Ngày đầu tiên tôi nhập không có cam kết, vì vậy phản hồi chỉ là một dòng trống:

$ 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:
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.