git rebase without changing commit timestamps

5 浏览
0 Comments

git rebase without changing commit timestamps

在保留提交时间戳的同时执行 git rebase 有意义吗?

我认为一个结果是新的分支不一定会按照提交日期的顺序排列。这在理论上可能吗?(例如使用底层命令;我只是好奇)

如果在理论上可能,那么在实践中使用 rebase 是否可以不更改时间戳?

例如,假设我有以下树形结构:

master <2010年6月>

|

:

:

: oldbranch <1984年2月>

: /

oldcommit <1984年1月>

现在,如果我在 master 上对 oldbranch 进行 rebase,提交的日期将从 1984年2月 更改为 2010年6月。是否可以更改这种行为,以使提交的时间戳不变?最后,我将获得以下结果:

oldbranch <1984年2月>

/

master <2010年6月>

|

:

这是否有意义?在 git 中是否允许存在一个旧的提交有一个更近的提交作为父提交的历史记录?

0
0 Comments

问题出现的原因是因为在进行了rebase操作之后,提交的时间戳发生了改变。解决方法是使用git filter-branch命令来重置提交的时间戳为对应的作者时间。另外还可以使用git rebase命令来仅重置应用在指定分支上的提交的时间戳。

具体的解决方法如下:

1. 使用以下命令来重置提交的时间戳为对应的作者时间:

git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE'

2. 如果只想重置应用在指定分支上的提交的时间戳,可以使用以下命令:

git rebase --committer-date-is-author-date 

其中,是指在进行rebase操作时使用的分支名称。

需要注意的是,以上的解决方法可能在不同的环境和时间点上有所差异。有些方法可能在某些特定的操作系统上无法正常工作,或者在某些时间点上不再适用。因此,可以根据具体情况选择合适的解决方法。

参考链接:

- [stackoverflow.com/a/11179245/539149](https://stackoverflow.com/a/11179245/539149)

- [stackoverflow.com/questions/2973996#comment37478036_11179245](https://stackoverflow.com/questions/2973996#comment37478036_11179245)

0
0 Comments

【git rebase without changing commit timestamps】问题的原因和解决方法

在Git中,使用git rebase命令可以将一个分支上的提交应用到另一个分支上。然而,有时候我们希望在进行rebase操作时保持提交的时间戳不变。那么,原因是什么?有哪些解决方法呢?

问题的原因是,git rebase默认会更改提交的时间戳,将提交时间设置为rebase操作的时间。这可能会导致一些问题,比如不准确地记录提交的历史顺序,或者破坏依赖于时间戳的其他工作流程。

解决这个问题的方法有几种。

1. 使用--ignore-date选项:

- 使用git rebase --ignore-date命令可以在rebase操作中忽略提交的时间戳。这样,提交的时间戳将保持不变。

- 注意,这个选项只适用于非交互式的rebase操作,且与--interactive选项不兼容。

2. 使用--committer-date-is-author-date选项:

- 使用git rebase --committer-date-is-author-date命令可以将提交者时间戳设置为原始作者的时间戳,并保持提交者时间戳与原始作者时间戳相同。

- 这个选项在Git 2.29及更高版本中也适用于交互式rebase和根提交(git rebase --root)。

- 注意,如果提交的时间戳已经不同于作者的时间戳,这个选项将不起作用。

3. 使用SEQUENCE_EDITOR环境变量和rebase交互模式:

- 通过设置SEQUENCE_EDITOR环境变量,并在rebase交互模式下循环遍历当前的todo列表,可以在每个提交之前将提交者时间戳设置为原始提交的时间戳。

- 这种方法需要处理一些边界情况,但可以实现保持提交的时间戳不变。

总结起来,git rebase操作默认会更改提交的时间戳,但可以通过--ignore-date选项或--committer-date-is-author-date选项来保持提交的时间戳不变。此外,使用SEQUENCE_EDITOR环境变量和rebase交互模式也可以实现相同的效果。

0
0 Comments

在处理Git的rebase命令时,出现了一个关键的问题,即在rebase操作中,commit的committer的时间戳会发生变化,但author的时间戳不会变化。这一点让人感到困惑,因此我提出的问题并不够准确。

答案是,rebase实际上并不会改变author的时间戳(对此你不需要做任何操作),这对我来说非常适合。

在我的Git中,我已经设置了一个别名(coderwall.com/p/euwpig/a-better-git-log),它显然使用的是committer的时间戳,这让我感到困惑。而Gitk和git log都显示author的时间戳。

0