我试图编辑一个旧的提交消息,解释为here。
现在,当我尝试运行rebase -i HEAD~5
时,它显示为interactive rebase already started
。
所以我试着:git rebase --continue
,但出现以下错误:
error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.
有什么想法吗
6条答案
按热度按时间yrdbyhpb1#
上面写着:
当你保存并退出编辑器时,它会将你倒回该列表中的最后一次提交,并将你放在命令行上,并显示以下消息:
这并不意味着:
再次输入
git rebase -i HEAD~3
退出编辑器时尝试*不要*输入
git rebase -i HEAD~3
,它应该可以正常工作。(否则,在您的特定情况下,可能需要
git rebase -i --abort
来重置所有内容并允许您重试)正如Dave Vogt在评论中提到的,
git rebase --continue
用于在修改第一次提交后进入到基础重构过程中的下一个任务。另外,Gregg Lind在他的回答中提到了
git rebase
的reword
命令:通过将命令“pick”替换为命令“edit”,您可以告诉
git rebase
在应用该提交后停止,这样您就可以编辑文件和/或提交消息,修改提交,并继续换基。如果您只想编辑提交的提交消息,请将命令“
pick
”替换为命令“reword
”,因为是Git1.6.6 (January 2010)。它和'
edit
'在交互式变基时做的事情一样,除了它只允许你编辑提交消息而不把控制权返回给shell。这是非常有用的。现在,如果你想清理你的提交消息,你必须:
然后将所有提交设置为'edit'。然后在每个提交上:
使用'
reword
'而不是'edit
'可以跳过git-commit
和git-rebase
调用。k97glaaz2#
正如Gregg Lind所建议的,你可以使用reword来提示只修改提交消息(否则保持提交不变):
这里,
n
是最后n次提交的列表。例如,如果你使用
git rebase -i HEAD~4
,你可能会看到这样的东西:现在将你想要编辑的提交的消息替换为pick为reword:
保存文件后退出编辑器,接下来你会被提示编辑你标记为reword的提交的消息,每个消息一个文件。注意,当你用
reword
替换pick
时,只编辑提交消息会简单得多,但是这样做没有效果。在GitHub的Changing a commit message页面上了解更多信息。
qzlgjiam3#
参考消息,git rebase interactive现在有了
reword
选项,这样就不会那么麻烦了!3bygqnnd4#
只是想提供一个不同的选择。在我的情况下,我通常在我的个人分支上工作,然后合并到master,我对我的本地所做的个人提交并不那么重要。
由于Jira上有一个git hook,它会检查相应的ticket编号,但区分大小写,所以我无法推送代码。此外,提交是很久以前完成的,我不想计算在rebase上有多少提交要返回。
所以我所做的就是从latest master创建一个新的分支,并将问题分支中的所有提交压缩到新分支上的一个提交中。这对我来说更容易,我认为把它放在这里作为未来的参考是个好主意。
来自最新主控形状:
然后
参考号:https://github.com/rotati/wiki/wiki/Git:-Combine-all-messy-commits-into-one-commit-before-merging-to-Master-branch
pkmbmrz75#
要更改历史记录中的任何位置的提交消息,请执行以下操作:
1-
git rebase -i <commit_sha>
,<commit_sha>是SHA一次提交之前要更改的提交(这里:eb232eb6b
):2-将第一行中的
pick
(默认值)更改为reword
(不编辑消息本身)3-保存并退出
4-接下来,您将再次看到编辑器,其中只有旧的提交消息行,因此请编辑它,然后保存并退出
就是这样,现在修改了历史记录,
git push --force-with-lease
将在远程替换mgdq6dx16#
这里有一个非常好的Gist,涵盖了所有可能的情况:https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4
概述: