【问题标题】:Is it safe to amend old pushed commit message?修改旧的推送提交消息是否安全?
【发布时间】:2017-01-19 08:44:24
【问题描述】:

我正在关注this 文档以修改已推送的提交消息。我现在有我的本地分支,其中包含修改后的消息,以及修改后的所有提交的副本。

我确定其他人已经撤消了这些提交。

推送我的本地分支是否安全?对其他人会有什么后果?

【问题讨论】:

  • 这个文档中的信息很清楚:Do not include any commit you have already pushed to a central server - it will mess other people up. 不是吗?

标签: git git-amend


【解决方案1】:

如果您修改了 any 提交,则意味着您已经重写了该分支的历史记录。请注意,仅更改提交消息意味着 Git 创建了一个 new 提交来代替旧的提交。我不知道你是否使用了交互式 rebase、filter 分支或git commit --amend,但这不会对这种情况有太大​​的改变。

推送这个分支的后果是使用这个分支的其他人在尝试拉取时可能会得到一个合并提交。原因如下图所示:

remote: A -- B -- C -- E       # you rewrote D to C
local:  A -- B -- D -- E

当您的一位同事尝试拉取时,Git 会发现 B 提交是本地和远程分支之间的共同祖先。它将首先尝试使用C -- E 快​​进本地分支,但随后意识到这也是不可能的,因为本地分支已经分歧并且在B 之上有自己的一组提交。结果,Git 最终将使用来自远程的更改创建合并提交。但这将包括提交 CD,这可能会导致奇怪。

发生这种情况的唯一例外是自提交 B 或更早时间以来未拉取分支的人。在这种情况下,这样的人不会注意到你重写了那个提交,因为他的本地历史一开始就不知道这个提交。

请注意,如果您希望继续,您的同事可能希望这样做:

git fetch origin                 # update tracking branches
git reset --hard origin/master   # reset local master to remote (effectively overwrite)

【讨论】:

  • 所以.. 修复该消息为时已晚。我可以忍受。
  • @Elist 您当然可以更改消息,但您需要让您的团队知道。如果你有一个足够紧密的阴谋,你可以改写历史并侥幸逃脱。但总的来说,您应该避免重写公共共享分支的历史记录。
  • 我其实不太明白——为什么git不能促进对消息的无缝修改,这样会保留历史,只改变消息?此类更改不会造成任何损害,因此可以视为快进,并且可以在您获取存储库后应用。
  • Git 提交被视为实际发生的事情的记录。更改提交消息可能被解释为一种伪造。想象一家对冲基金或高频交易公司,由于代码错误而损失了一大笔钱。现在想象一下,如果工程师可以返回并删除一些有罪的提交消息。这和其他原因是 Git 需要进行新提交的原因。
  • 这对于提交内容是完全正确的。我认为这条信息可以被认为不那么重要。但同样,我可以忍受这一点。
猜你喜欢
  • 2013-06-15
  • 2020-12-18
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2016-03-01
  • 2013-06-24
  • 2021-02-06
相关资源
最近更新 更多