我正在努力弄清楚如何编辑已经推送到GitHub的git提交消息。我本来可以发誓过去我曾使用同样的命令编辑已推送的git提交,并且没有任何问题。我现在遇到的问题是当我跑git rebase --interactive <SHA of commit>
时,我得到的东西看起来像这样......
noop
# Rebase 5d8e041..5d8e041 onto 5d8e041 (1 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
当我运行完全相同的命令但使用尚未推送到GitHub的git提交时,一切都运行良好。有什么我想念的吗?就像我之前说过的那样,我可以发誓说这一次在推送和未推送的提交中都能很好地完成。
非常感谢你的帮助,我非常感谢。
答案 0 :(得分:2)
我的问题的最后答案为什么git rebase -i <sha>
没有提出首选编辑器甚至选择是否reword
提交消息或任何其他选项。答案是我使用64bit
架构而不是32bit
架构。现在,老实说,我不知道为什么会这样,但我确实在GitHub上找到了一个post,它正在谈论某些命令在64bit
体系结构上失败,特别是git rebase
和某些{{1}根据那篇文章的操作。它还说......
留下不完整的git操作,并在磁盘上添加一个文件,sh.exe.stackdump和STATUS_STACK_OVERFLOW +寄存器转储。
虽然我没有在git控制台中弹出这个错误。我在SmartGit打开项目时得到的,这只是git的GUI。当我在git提交消息之前右键单击git消息,我实际上想要重新绑定然后转到git merge
时,就会发生这种情况。它不会立即通过错误,它将尝试10秒然后通过错误。
所以在这一点上,我已经弄明白是什么原因引起了我的问题,但我还不知道为什么。为什么Rebase Interactive From
架构版本的git与64bit
架构版本不同?心灵难以置信。如果有人有具体原因发生这种情况,请继续编辑我的帖子。
答案 1 :(得分:1)
作为documented here,“reword”将允许您更改过去的提交消息(假设您在要更改的父提交之上进行rebase,如首次报告 - - upvoted - nnovich-OK的answer)。
但如果提交已经推送到GitHub,则必须执行git push --force
(or --force-with-lease
,如果it is not ignored)
当我运行
git rebase -i 5d8e041~1
时,我得到Current branch master is up to date
检查addinf the --force
option是否有帮助。
答案 2 :(得分:1)
问题与提交的推送/未推送状态无关。您正在尝试编辑分支上的最后一次提交。要通过rebase执行此操作,您应该调用git rebase --interactive <SHA of PARENT commit>
,但是您使用提交本身的哈希值。 Rebase应该编辑指定提交的所有后代,但是你提供了没有后代的提交,因此git在可能的更改列表中显示noop
。
顺便说一下,可以使用git commit --amend
轻松编辑最后一次提交,然后尝试一下。
答案 3 :(得分:0)
您需要选择父提交的哈希值,而不是您要更改的提交。
所以如果你有一个如下所示的git日志:
$ git log --oneline
5cd3b9a (HEAD -> master) Hi I'm John, I'm a bad commit message
b6266a5 Hi, I'm the parent of John
j45cj33 And I'm the grand parent of John
...
重新启动父提交:
git rebase --interactive b6266a5
然后将单词pick
更改为reword
。保存并退出时,将打开一个新的编辑器,允许您更改提交消息。
要更新github,您必须使用强制。如果您的分支被称为master,请执行以下操作:
$ git push --force origin master
请记住,这将重写github上的历史记录。如果你在某人已经从github撤出之后重写历史记录,那么你将会遇到麻烦。