如何在不接触命令行的情况下在 SourceTree 中编辑不正确的提交消息?
额外细节:
- 这不是最新的提交。
- 一切都已经推送到 Bitbucket。
- 这是一个私人存储库,我是唯一的合作者。
- 我不介意丢失任何以前的提交,因为我可以随时重新提交它们。
- 但是,我不想丢失曾经做过的任何代码修改。
结果:
- 根据您的评论和回复,目前似乎不可能,我将创建一个新的存储库并重新开始。感谢你的帮助!
如何在不接触命令行的情况下在 SourceTree 中编辑不正确的提交消息?
额外细节:
结果:
以下是使用Windows 版本 1.5.2.0 的 SourceTree编辑先前提交(不是最新提交)的提交消息的步骤:
选择要编辑的提交之前的提交。例如,如果我想编辑带有消息“FOOBAR!”的提交 然后我需要选择它之前的提交:
右键单击选定的提交并单击Rebase children...interactively
:
选择您要编辑的提交,然后单击Edit Message
底部的 。在这种情况下,我选择带有消息“FOOBAR!”的提交:
编辑提交消息,然后单击OK
。在我的示例中,我添加了“SHAZBOT!SKADOOSH!”
当您返回交互式 rebase 窗口时,单击OK
以完成 rebase:
此时,您需要强制推送您的新更改,因为您已经重新设置了已经推送的提交。但是,当前 1.5.2.0 版本的 SourceTree for Windows 不允许您强制推送 GUI,因此无论如何您都需要从命令行使用 Git 才能执行此操作。
从 GUI单击Terminal
以打开终端。
使用以下命令从终端强制推送,
git push origin <branch> -f
where<branch>
是您要推送的分支的名称,-f
表示强制推送。强制推送将覆盖您在远程仓库上的提交,但在您的情况下这没关系,因为您说过您没有与其他人共享您的仓库。
而已!你完成了!
在版本 1.9.6.1 上。对于 UnPushed 提交。
如果评论消息中包含非英文字符,使用 user456814 提供的方法,这些字符将被替换为问号。(在sourcetree Ver2.5.5.0下测试)
所以我必须使用以下方法。
注意:如果提交已被其他成员拉取,下面的更改可能会给他们造成混乱。
Step1 : 在 sourcetree 主窗口中,找到你的 repo 选项卡,然后单击“终端”按钮打开 git 命令控制台。
第2步:
[情况A]:目标提交是最新的。
1)在 git 命令控制台中,输入
git commit --amend -m "new comment message"
2)如果目标提交已被推送到远程,则必须再次强制推送。在 git 命令控制台中,输入
git push --force
[情况B]:目标提交不是最新的。
1)在 git 命令控制台中,输入
git rebase -i HEAD~n
这是为了压缩最新的n次提交。例如,如果您想编辑最后一条之前的消息,n为 2。此命令将打开一个 vi 窗口,每行的第一个单词是“ pick ”,然后将该行的“pick”更改为“ reword ”你想编辑。然后,输入:wq
以保存并退出该 vi 窗口。现在,将打开一个新的 vi 窗口,在此窗口中输入您的新消息。也用于:wq
保存和退出。
2)如果目标提交已被推送到远程,则必须再次强制推送。在 git 命令控制台中,输入
git push --force
最后:在 sourcetree 主窗口中,按F5
刷新。
注意:这个答案最初是针对 Windows 的旧版本 SourceTree 编写的,现在已经过时了。
请参阅我对适用于 Windows 的 SourceTree 的当前版本1.5.2.0的新答案。出于历史目的,我将这个答案抛在脑后。
因为我在 Windows 上,所以我没有命令行工具,也不知道如何使用它
关于 Git GUI,不,它们并没有涵盖 Git 的所有功能。他们甚至没有接近。我建议您查看如何在 Git 中编辑不正确的提交消息中的答案之一?, Git 足够灵活,有多种解决方案……来自命令行。
SourceTree 可能实际上已经带有 msysgit bash shell,或者它可能能够使用标准的 Windows 命令 shell。无论哪种方式,您都可以通过单击终端按钮从 SourceTree 中打开它:
您可以在此处设置 SourceTree 使用的终端(bash 或 Windows):
话虽如此,这是您可以在 SourceTree 中执行此操作的一种方法。既然您在评论中提到您不介意“恢复到错误的提交”(我假设您实际上是指重置,这是 Git 中的不同操作),那么以下是步骤:
Reset current branch to this commit
,然后从下拉列表中选择硬重置选项,在 SourceTree 中对错误提交进行硬重置。关于此评论:
如果因为它已经推送到 Bitbucket 而无法实现,我不介意创建一个新的存储库并重新开始。
这是否意味着你是唯一一个参与回购的人?这很重要,因为在不给合作者带来问题的情况下更改回购的历史记录(例如修改提交)并非易事。但是,假设您是唯一一个在 repo 上工作的人,那么接下来您要做的就是将更改的历史记录强制推送到远程。
但是请注意,因为您对错误的提交进行了硬重置,所以强制推送会导致您丢失之前的所有工作。如果没问题,那么您可能需要在命令行中使用以下命令来执行强制推送,因为我在 SourceTree 中找不到执行此操作的选项:
git push remote-repo head -f
这也假设 BitBucket 将允许您强制推送到回购。
不管怎样,你真的应该学习如何从命令行使用 Git,它会让你更精通 Git。#ProTip,使用msysgit,在终端属性中开启快速编辑模式,这样就可以双击高亮一行文本,右键复制,再次右键粘贴。它很快。