【问题标题】:Why does git rebase reword keep making new comments?为什么 git rebase reword 不断发表新评论?
【发布时间】:2021-09-30 05:58:18
【问题描述】:

我正在为 Udacity 程序开发 Python/Git 项目,我被告知需要修复我的提交消息以遵守 Udacity 格式(被指示为“鼓励”而不是“必需” ,但没关系)。但是,我无法使用 git rebase 命令替换现有的提交消息。

我尝试使用来自gitHub docs 的建议,使用git rebase -i HEAD~13(修改我所有的提交),然后在最初的rebase 提示中,我将每个提交行从pick 更改为reword,然后完成放入新提交消息的过程。但是,最后,我的分支中添加了 13 个新提交,每个提交都有新的提交消息。现有的提交保持不变。

然后我尝试使用StackOverflow 中的此解决方案,其中涉及使用git rebase 并将每个提交设置为edit,并使用git commit --amend 修改最后一个提交,然后使用git rebase --continue 前进到下一个,用--amend 将每个提交慢慢修改为“最近的”。在这种情况下,它还向分支添加了一系列新提交,而没有实际编辑旧提交。

这可能是因为我已经在 gitHub 上将我的分支推送到了原点吗?还是因为我的分支已经合并?如果这是一个愚蠢的问题,我深表歉意,但我在谷歌上找不到任何关于这个特定问题的结果,除了更多的说明来做我已经做过的事情。
我的仓库:https://github.com/WJTownsend/pdsnd_github

【问题讨论】:

  • 你问如何没有旧的提交?这将涉及重写 git 历史记录。
  • 我最初的想法是你还没有在 rebase 之后强制推出你的分支。但是,“或者因为我的分支已经合并了”是什么意思?
  • 实际上不可能更改任何提交的任何部分。提交的哈希 ID 是存储在该提交中的所有数据的加密校验和,因此哈希 ID 提交,反之亦然。这就是为什么 Git 所做的一切都会永远存在(或者直到人们停止使用它),这就是为什么“更改提交”真正意味着“进行新的提交并使用它来代替仍然存在的旧提交”。
  • 我显然误解了你可以用rebasegit commit --amend 做什么。我认为可以修改消息,尤其是在 rebase 中使用 reword 中的措辞。当然,这可能是一种不好的做法,但可能。就像我在上面说的那样,我正在学习,但我发现它实际上并没有说“这根本不可能”。不知道为什么会被否决,但我很欣赏这里的答案。

标签: git


【解决方案1】:

但是,最后,我的分支上添加了 13 个新提交,每个提交都有新的提交消息。

当您在给定的提交中变基并更改任何内容时,Git 会写入一个新的提交。更改提交消息属于这一类,因此当您对包含 13 个提交的链进行变基时,实际上是在指示 Git 进行 13 个 new 提交,并使用不同的提交消息。

现有的提交保持不变。

提交的功能在变基后可能保持不变,但提交本身实际上是新的。要验证这一点,请在变基前后在您的分支上运行 git log。您会注意到每个提交的 SHA-1 哈希现在都不同了。

请记住,一般来说,重写一个已发布分支的历史,除了你自己之外,它也可能被其他人共享,这不是一件可取的事情。仅当您是唯一使用此分支的人时,才应尝试此操作。

【讨论】:

  • 我确实注意到新的提交也有新的 SHA-1 哈希值。而且我知道返回并更改已发布分支上的提交不是一个好习惯,但这基本上就是我所看到的必须满足要求并完成我的项目,因为我没有接受“鼓励”的意思“必需的”。 FWIW,除了我自己,没有人在使用这个存储库。有没有办法做到这一点,还是我要重新开始?
  • 你已经这样做了。不幸的是,没有方法可以在不重写提交的情况下做到这一点。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2012-10-23
  • 2015-03-21
  • 1970-01-01
相关资源
最近更新 更多