【问题标题】:What is the safest way to correct the date of a future-dated commit in git, and what are the consequences?在 git 中更正未来提交日期的最安全方法是什么,后果是什么?
【发布时间】:2012-09-10 18:50:43
【问题描述】:

一位开发人员设法提交了一些未来日期的代码——确切地说是 2013 年 3 月 1 日

git show --format=fuller <SHA>

AuthorDate: Fri Mar 1 17:28:26 2013 +0300
CommitDate: Fri Mar 1 17:29:38 2013 +0300

这 (a) 具有误导性,并且 (b) 阻止 Jira 查找带有 Jira 票号标记的“新”提交(自 2013 年 3 月 1 日以来没有提交 - 并且不会持续 6 个月)然而)

我找到了如何使用git filter-branch 来更正日期的示例,例如 http://git.661346.n2.nabble.com/date-change-of-commit-td3887606.html

git filter-branch --env-filter ' 
  if [ $GIT_COMMIT = <sha1> ]; then 
    export GIT_AUTHOR_DATE="1112911993 -0700" 
    export GIT_COMMITTER_DATE="1112911993 -0700" 
  fi 
'

但它们带有可怕后果的警告。对以下任何一个或多个问题的回答将不胜感激。

  • 您使用上述方法更改提交日期的经验如何?
  • 使用该存储库的其他人会有什么后果?
  • 主分支的突出功能或部署分支会产生什么后果?
  • 有没有更好的方法来做到这一点?

【问题讨论】:

  • 我认为“等待”将是我的答案...
  • 我更好奇如何...

标签: git git-filter-branch


【解决方案1】:

任何给定提交的 sha1 都基于与该提交相关的所有信息,包括日期和之前所有提交的历史记录,直至项目开始。这使得有人无法在没有所有人注意的情况下恶意更改存储库。它还使得有人无法在没有人注意的情况下仁慈地更改存储库。

执行过滤器分支实质上会删除分支,直到错误提交之前的提交,并从该点开始创建一个全新的分支。如果在那之后创建了任何分支,则必须重新设置它的基础。如果从那时起有人拉,他们将不得不进行强制拉。不,没有比它更具有破坏性的方法了,除非在 3 月之前破解 Jira 来做你想做的事。

【讨论】:

    【解决方案2】:

    后果并没有那么可怕。很简单,任何使用错误提交拉取该分支的人可能需要在您推送修复后采取额外步骤,因为您将替换那里的提交,而不是之后放置额外的提交。

    更具体地说,其他已拉取错误提交的用户在您修复分支后将无法对分支进行简单的“快进”更新。不过,对于任何相对熟悉 git 的人来说,使用 git rebase 或任何他们需要的东西来解决差异应该是一件容易的事。

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 1970-01-01
      • 2013-12-01
      • 2011-05-16
      • 2020-07-06
      • 2014-11-16
      • 2011-08-01
      • 2011-02-04
      相关资源
      最近更新 更多