Ami*_*ani 286 git git-checkout
我正在处理源代码中的回归.我想告诉Git:"根据参数化日期/时间检查来源".这可能吗?
我也在目前的观点中进行了改变,我不想失去.理想情况下,我想在当前源和我之前根据之前的日期感兴趣的某些版本之间来回切换.
And*_*ndy 336
你可以把你的工作藏起来,而不是随便做git stash.你会用git stash pop它来取回它.或者你可以(如carleeto所说)git commit它到一个单独的分支.
您可以使用以下方式在特定日期之前签出提交rev-parse:
git checkout 'master@{1979-02-26 18:30:00}'
有关可用选项的更多详细信息,请参阅git-rev-parse.
如注释中所述,此方法使用reflog在历史记录中查找提交.默认情况下,这些条目在90天后过期.虽然使用reflog的语法不那么详细,但您只能回溯90天.
另一个不使用reflog的选项是用于rev-list在特定时间点获取提交:
git checkout `git rev-list -n 1 --first-parent --before="2009-07-27 13:37" master`
如果您只想要您的历史记录而不是合并带来的版本,请注意--first-parent.这就是你通常想要的.
Roc*_*cky 114
安迪的解决方案对我不起作用.在这里我发现了另一种方式
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
Car*_*arl 14
看起来你需要一些基于这样的东西: 基于日期的Git结账
换句话说,您使用rev-list查找提交然后使用checkout实际获取它.
如果您不想丢失分阶段更改,最简单的方法是创建一个新分支并将它们提交到该分支.您始终可以在分支之间来回切换.
编辑:链接已关闭,所以这是命令:
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
Von*_*onC 11
提醒,自 Git 2.23(2019 年 8 月)起
按日期从过去的提交切换到新分支:
git switch -c newBranch $(git rev-list -n1 --before=yyyy-mm-dd main)
在当前工作树中恢复过去日期的文件
git restore -SW -s $(git rev-list -n1 --before=yyyy-mm-dd main) -- path/to/file
在 2021/2022 年不要使用旧的、过时的和令人困惑的git checkout命令:  git switch并git restore准确描述他们正在做什么(仅使用 的分支git switch,并且仅使用 的文件git restore)
不要使用``:更喜欢更现代的$(command substitution)语法而不是过时的反引号语法。
小智 10
对于那些喜欢管道来命令替换的人
git rev-list -n1 --before=2013-7-4 master | xargs git checkout
在我的情况下,该-n 1选项不起作用.在Windows上我发现以下命令序列工作正常:
git rev-list -1 --before="2012-01-15 12:00" master
这将返回给定日期的相应提交的SHA,然后:
git checkout SHA
git rev-parse如果您感兴趣的日期是提交日期,@Andy 提出的解决方案可以正常工作。但是,如果您想根据作者的日期结帐,rev-parse将不起作用,因为它不提供使用该日期来选择提交的选项。相反,您可以使用以下内容。
git checkout $(
  git log --reverse --author-date-order --pretty=format:'%ai %H' master |
  awk '{hash = $4} $1 >= "2016-04-12" {print hash; exit 0 }
)
(如果您还想$1 >= "2016-04-12" && $2 >= "11:37"在awk谓词中指定时间使用。)
要从签出创建新分支,请使用 -b 选项和新分支名称。
git checkout -b 19July2021 `git rev-list -n1 --before=2021-7-19 master`
git switch当您处于“分离头”状态时,您可以避免
| 归档时间: | 
 | 
| 查看次数: | 118882 次 | 
| 最近记录: |