如何在SourceTree中编辑不正确的提交消息而不触及命令行?

额外的细节:

这不是最新的提交。 所有东西都已经推送到Bitbucket上了。 这是一个私人存储库,我是唯一的合作者。 我不介意丢失任何以前的提交,因为我可以随时重新提交它们。 然而,我不想失去任何代码修改。

结果:

根据您的评论和回复,这似乎是不可能的,我将创建一个新的存储库,并重新开始。谢谢大家的帮助!


当前回答

下面是编辑前一次提交的提交消息的步骤 不是最近的提交)使用SourceTree for Windows version 1.5.2.0:

步骤1

选择要编辑的提交之前的提交。 例如,如果我想编辑带有消息“FOOBAR!”的提交,那么我需要 选择在它之前的提交:

步骤2

右键单击所选的提交,然后交互式地单击Rebase children…

步骤3

选择要编辑的提交,然后单击 底部。在本例中,我选择了带有“FOOBAR!””:

步骤4

编辑提交消息,然后单击OK。在我的例子中,我添加了 “SHAZBOT !SKADOOSH !”

步骤5

当您返回到交互式的变基窗口时,单击OK以完成 变基:

步骤6

在这一点上,您将需要强制推动您的新更改,因为您已经重新基于 提交您已经推送过的文件。但是,目前的1.5.2.0版本 用于Windows的SourceTree不允许您强制推入GUI,因此 无论如何,你都需要在命令行中使用Git才能做到这一点。

在图形界面中单击“终端”,打开终端。

步骤7

使用下面的命令从终端强制推送,

git push origin <branch> -f

<branch>是你想要推送的分支的名称,-f表示 强迫推。强制push将覆盖您的提交 远程回购,但这是OK在你的情况下,因为你说你不共享 你和其他人的回购。

就是这样!你已经完成了!

其他回答

更新

注意:这个答案最初是针对Windows SourceTree的旧版本编写的,现在已经过时了。

查看我对Windows SourceTree当前版本的新答案,1.5.2.0。出于历史的考虑,我把这个答案留了下来。

原来的答案

因为我在Windows上,我没有命令行工具,也不知道如何使用一个:(这是唯一的方法来得到排序吗?GUI没有覆盖git的所有功能?-原始海报

关于Git gui,不,它们并没有涵盖Git的所有功能。他们甚至都不接近。我建议你看看如何在Git中编辑错误的提交消息中的一个答案。Git非常灵活,可以从命令行提供多种解决方案。

SourceTree实际上可能已经附带了msysgit bash shell,或者它可能能够使用标准的Windows命令shell。无论哪种方式,你都可以通过单击Terminal按钮从SourceTree打开它:

你可以在这里设置SourceTree使用的终端(bash或Windows):

在SourceTree中解决问题的一种方法

话虽如此,这里有一种在SourceTree中实现它的方法。既然你在评论中提到你不介意“恢复到错误的提交”(我想你指的是重置,这在Git中是不同的操作),那么以下是步骤:

通过右键单击SourceTree并选择“reset current branch to this commit”,从下拉菜单中选择“hard reset”选项,在SourceTree中对错误提交进行硬重置。 然后单击Commit按钮 点击底部“修改最近提交”的复选框。 对消息进行所需的更改,然后再次单击Commit。瞧!

关于这一评论:

如果不可能,因为它已经推送到Bitbucket,我不介意创建一个新的存储库并重新开始。

这是否意味着你是唯一负责回购的人?这很重要,因为改变回购的历史(比如修改提交)而不给协作者带来问题并不是一件小事。但是,假设您是唯一一个处理回购的人,那么您要做的下一件事是强制将更改后的历史推到远程。

但是要注意,由于您对错误的提交进行了硬重置,因此强制推送会导致您丢失之前的所有工作。如果没问题,那么你可能需要在命令行中使用以下命令来执行强制推送,因为我在SourceTree中找不到这样做的选项:

git push remote-repo head -f

这也假设BitBucket将允许您强制推送到回购。

无论如何,您应该学习如何从命令行使用Git,这将使您更加熟练地使用Git。#ProTip,使用msysgit并在终端属性中打开快速编辑模式,这样您就可以双击突出显示一行文本,右键单击复制,然后再次右键单击粘贴。非常快。

下面是编辑前一次提交的提交消息的步骤 不是最近的提交)使用SourceTree for Windows version 1.5.2.0:

步骤1

选择要编辑的提交之前的提交。 例如,如果我想编辑带有消息“FOOBAR!”的提交,那么我需要 选择在它之前的提交:

步骤2

右键单击所选的提交,然后交互式地单击Rebase children…

步骤3

选择要编辑的提交,然后单击 底部。在本例中,我选择了带有“FOOBAR!””:

步骤4

编辑提交消息,然后单击OK。在我的例子中,我添加了 “SHAZBOT !SKADOOSH !”

步骤5

当您返回到交互式的变基窗口时,单击OK以完成 变基:

步骤6

在这一点上,您将需要强制推动您的新更改,因为您已经重新基于 提交您已经推送过的文件。但是,目前的1.5.2.0版本 用于Windows的SourceTree不允许您强制推入GUI,因此 无论如何,你都需要在命令行中使用Git才能做到这一点。

在图形界面中单击“终端”,打开终端。

步骤7

使用下面的命令从终端强制推送,

git push origin <branch> -f

<branch>是你想要推送的分支的名称,-f表示 强迫推。强制push将覆盖您的提交 远程回购,但这是OK在你的情况下,因为你说你不共享 你和其他人的回购。

就是这样!你已经完成了!

如果评论消息包含非英文字符,使用user456814提供的方法,这些字符将被问号替换。(在sourcetree Ver2.5.5.0下测试)

所以我必须使用下面的方法。

注意:如果提交已经被其他成员拉出,下面的更改可能会给他们造成混乱。

步骤1:在源树主窗口中,找到你的repo选项卡,并单击“terminal”按钮打开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

最后:在源树主窗口,按F5刷新。

在版本1.9.6.1。对于unpushing提交。

单击先前提交的描述 单击提交图标 输入新的提交消息,并从提交选项下拉菜单中选择“Ammend最新提交”。 提交你的信息。