【问题标题】:git checkout branch certain timegit checkout 分支特定时间
【发布时间】:2015-11-12 11:09:34
【问题描述】:

我正在搜索单个 git 命令(如果可能)以在特定时间(即我的本地分支时间)从一个存储库中签出文件。

场景:我在某个时间检查了 Branch1,可能是 2 天前(2015 年 11 月 12 日 19:05)。 我想结帐另一个分支,即 2 天前的 Branch2(2015 年 11 月 12 日 29:05 即 Branch1 结帐时间后 10 分钟)。

我怎样才能做到这一点?

如果更简单,我可以使用 unix 时间戳来代替日期。

如果我使用“git log -1 --format=%ct”,它会给我时间戳。然后我可以在这个时间戳上加上 10 分钟,然后使用下面的命令来结帐。

git archive --format tar --remote <HUB>:<REPO> master:`dirname <FILEPATH>` | tar -xO <FILE> > log_file.git

可以在一个命令中实现吗?

【问题讨论】:

标签: git unix


【解决方案1】:

Git 将每次提交的时间存储在存储库中,但存储库中的存储不是基于进行更改的时间。 git 存储库数据是根据更改本身构建的。

您不能依赖存储库将每个提交按时间顺序应用到存储库。例如,可以从不同的分支中挑选一个较旧的更改到当前分支,并且它的提交日期将保留为原始日期,但上一次提交的日期晚于这个挑选的日期。

现在,这只是为了解释。就您而言,我相信您知道如何将更改提交到您的存储库。不过,git 不会让你根据时间进行选择。

我建议使用git log 查找两天前的提交,然后手动查看历史记录以查找十分钟后更改的内容。

当你找到你感兴趣的修订的哈希值时,将它签出到一个新的分支中,如下所示:

git checkout <hash> -b newbranch

【讨论】:

  • 我的要求是获取一个存储库的 / 时间戳,并使用相同的时间戳值来执行上述 git archive 命令。我想从我的本地分支签出(git archive)来自不同存储库的一些文件,该分支已签出另一个存储库的代码。这将是一个自动过程,我想使用 system() 命令在 C 文件中执行这些命令。
  • 每次提交都有两个日期:作者日期和提交日期。在cherry-pick或rebase的情况下,作者日期是原始提交的日期,提交日期是cherry-pick或rebase的日期。提交日期是按时间顺序排列的(除非你玩像 --committer-date-is-author-dateGIT_COMMITTER_DATE 这样的游戏),我怀疑这就是 OP 所追求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2012-04-05
  • 2018-07-27
  • 2016-08-09
  • 2018-08-17
  • 2019-03-15
  • 1970-01-01
相关资源
最近更新 更多