我已經閱讀了非常著名的鏈接如何按日期在 Git 中結帳?
該命令git rev-list對我不起作用-我總是獲取提交的整個歷史記錄,對于我的情況,指定的日期時間值似乎被忽略了。
步驟:
我在我的分支上mynewbranch1
git log呈現這些提交:
**commit 1250c4c2 (HEAD -> mynewbranch1)**
Author: john <>
Date: Tue May 10 11:27:45 2022 0200
text1`
**commit ae99ff**
Author: john
Date: Mon May 9 17:22:37 2022 0200
text2`
**commit 84e85**
Author: alex <>
Date: Mon May 9 16:13:47 2022 0200
text3`
**commit 41b35**
Author: alex <>
Date: Mon May 8 16:11:31 2022 0200
text4`
現在我執行以下命令:
git checkout $(git rev-list -n 1 --first-parent --before="2022-05-09 16:13:47" mynewbranch1)
我也嘗試了反引號:
git checkout `git rev-list -n 1 --first-parent --before="2022-05-09 16:13:47" mynewbranch1`
現在我想從中創建一個新分支:
git checkout -b some_branch_from_above_date
但是當我git log在我的新分支上執行時,some_branch_from_above_date
我可以再次看到所有提交!我希望只有上面串列中的第 3 次和第 4 次提交,因為只有那些在指定日期之前:2022-05-09 16:13:47
我必須通過腳本執行此操作,因此我需要按日期結帳!出于測驗目的,我什至嘗試使用字串語法 - 900 天前,但我仍然收到最近的提交!請幫忙!
git checkout -b mynewbranch2 `git rev-list -n 1 --before="900 days ago" mynewbranch1`
更新感謝@LeGEC
這個問題的原因是因為rev-list過濾器僅基于 CommitDate。雖然我的 AuthorDate 不同,因為我在git commit命令中明確設定了 dat--date選項。這可以通過git log --format=fuller命令看到。
AuthorDate: Thu May 9 16:13:47 2022 0200
CommitDate: Wed May 11 13:48:07 2022 0200
uj5u.com熱心網友回復:
有一個帶有提交日期的已知陷阱:
提交實際上有兩個日期:作者日期和提交者日期。
- 當創建一個全新的提交時,它的作者日期和提交者日期設定為
now(), - 對于諸如或之類的命令
git commit --amend,git 創建具有新提交者/提交者日期的新提交,但保留“復制”提交中的作者/作者日期。git cherry-pickgit rebase
不幸的是:默認顯示的日期git log是作者日期,但--before/--after過濾器中使用的日期是提交者日期......
AFAIK,目前只有 git 之外的方法可以按作者日期過濾:例如,請參見以下兩個答案:
- https://stackoverflow.com/a/37311766/86072
- https://stackoverflow.com/a/37311841/86072
明確查看兩個日期的一種快速方法是使用git log --format=fuller.
標籤:混帐 上一篇:vscode中的負前瞻 下一篇:git分支不顯示所有分支
