gpt4 book ai didi

git - 在不更改时间戳的情况下修改以前的提交

转载 作者:行者123 更新时间:2023-12-02 18:41:25 24 4
gpt4 key购买 nike

要修改之前的提交,我可以在暂存更改上运行提交

git commit --amend --no-edit
git push -f

提交已被修改,但提交的时间戳发生了变化...

有没有办法改变时间戳?。像这样的东西:

git commit --amend --no-edit --no-time-change

最佳答案

请注意 git commit --amend修改一个提交;相反,它做了一个新的和改进的提交并停止使用旧的和糟糕的。如果其他任何人或任何其他分支可以访问原始提交,这种区别很重要,因为他们不会切换到新的和改进的提交。新的提交有一个新的不同的哈希 ID;旧提交的所有用户都使用旧的哈希 ID,该哈希 ID 未更改。由于这些原因,日期更改这一事实通常并不重要。

也就是说:每次提交中都有两个时间戳:

  • 作者日期,以及
  • 提交者日期。

使用 git commit 时, 有或没有 --amend , 你可以使用 --date=<whatever>指定作者日期,但没有用于指定提交者日期的标志

幸运的是,您可以设置两个环境变量来覆盖提交者和作者日期。这些是 GIT_AUTHOR_DATEGIT_COMMITTER_DATE .他们接受与 --date 相同的日期格式接受,然后 git show --pretty=fuller例如,显示两个日期。

使用 eval (一般来说有点危险)或 env ,我们可以让 sh/bash 兼容的 shell 作为一个单行程序为我们做这件事:

eval $(git log --no-walk --format='GIT_AUTHOR_DATE="%ad" GIT_COMMITTER_DATE="%cd"') git commit --amend

或:

env GIT_AUTHOR_DATE="$(git log --no-walk --format=%ad)" GIT_COMMITTER_DATE="$(git log --no-walk --format=%cd)" git commit --amend

eval方法有点短,调用 git更少的次数,但确实意味着您必须小心命令本身。只要命令本身就是 git commit --amend ,整个过程运行良好,因此您可以将其设为 Git 别名(记住前导 ! 以强制 Git 将其传递给 shell)。

(如果您愿意,可以将 --no-walk 替换为 -1。请注意,无论哪种方式,我们都依赖于没有起点的事实,git log 假定 HEAD。)

关于git - 在不更改时间戳的情况下修改以前的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67971851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com