【问题标题】:git Changing a commit message (amend)git 更改提交消息(修改)
【发布时间】:2018-06-25 16:10:00
【问题描述】:

我想编辑已推送的旧代码的提交消息。 就我而言,当然,我的主分支和其他几个分支,例如 v1.0、v2.0 和 v3.0。我要更新其消息的提交是在分支 v1.0 是“主”时进行的。在我的代码的每个新版本中,我还在每个分支上放置一个标签以启动,然后再进行不同的修复(1.0、1.1 等)。例如,在分支 v1.0 中,我有一个标记为 1.1 的修复(代表新版本)。 在我的情况下,提交消息出现的代码位于标签 1.0 下。 我尝试了这里描述的整个过程https://help.github.com/articles/changing-a-commit-message/(修改旧的或多个提交消息的消息)但我仍然被显示提交消息出现在标签 1.0 的“下方”(我正在使用 SmartGit,这就是为什么我说“在”)。如果我输入 git show commit_id 我仍然会看到带有旧消息的提交...

有人知道如何从 git 中完全删除此提交消息吗? 提前感谢您的回复。

(我对 git 不太擅长,所以现在我只是尝试按照互联网上的解释......)

我是否可以重新创建存储库并更改这些提交消息,同时保留存储库的其余历史记录?有人可能已经这样做了? :)

【问题讨论】:

  • 你不应该编辑旧的、已经推送的代码的提交消息,因为这会改变你的历史并有效地破坏你的存储库。

标签: git git-amend


【解决方案1】:

更改提交消息或父提交会更改提交 ID,这意味着就 git 而言,它是一个不同的提交。

如果你想改变标签指向你修改的历史,你需要在你修改的历史中找到对应的提交,将标签指向新的提交,然后强制推送它(见https://stackoverflow.com/a/21127037/5083516

但总的来说,在 git 中更改已发布的历史记录是一个坏主意,并且只能在极端情况下进行,而不仅仅是纠正小错误。在历史记录更改之前克隆您的 repo 然后尝试拉取的任何人都可能最终陷入合并地狱。

【讨论】:

  • 我不确定这是否会起作用...如果我移动标签,“旧”提交及其消息会发生什么?在我的情况下,我有这个:comit1,comit2,myComit1,comit3,myComit2,commit4(标记 - 1.0)。如果我更改 myComit* 消息,标签不会移动,它仍然指向 commit4。
  • @Anton:旧的提交仍然存在,直到使用它们的每个人都将 他们的 存储库(每个提交都有副本)转换为仅使用新提交并停止使用旧的。对于标签,这通常意味着在您强制推送标签以指向替换提交后,所有其他用户必须运行git fetch --tags。如果其中任何一个强制推送旧标签,旧提交也将再次对所有人可见。一旦提交在野外传播,就很难摆脱它。
【解决方案2】:

鉴于自从您推送提交后没有人向上游推送任何内容,您可以使用:

git push --force-with-lease

在您通过 --amend 在本地更改提交之后。

这在您的链接中有所解释。我假设您在推送修改后的提交后没有从存储库中fetch?问题可能是您的工具引起的,请尝试重新导入整个存储库。

【讨论】:

  • 感谢您的建议!不幸的是,我在 git 服务器上看到了旧消息......如果我在新目录中克隆存储库,我仍然有旧的提交消息......正如我所说,它是在旧版本中出现消息的地方,所以有之后还有许多其他提交。
猜你喜欢
  • 2011-05-02
  • 1970-01-01
  • 2021-02-06
  • 2013-05-08
  • 2017-11-01
  • 1970-01-01
  • 2013-01-01
  • 2010-12-25
  • 2011-06-29
相关资源
最近更新 更多