在SourceTree Windows中编辑提交消息(已经推送到远程)

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

额外细节:

  • 这不是最新的提交。
  • 一切都已经推到Bitbucket。
  • 这是一个私人存储库,我是唯一的合作者。
  • 我不介意丢掉以前的任何提交,因为我可以随时重新提交它们。
  • 但是我不想丢失任何代码修改。

结果:

  • 由于目前根据你的意见和答复似乎不可能,我要创build一个新的存储库并从头开始。 感谢你的帮助!

以下是使用SourceTree for Windows版本1.5.2.0编辑之前提交( 不是最新提交 )的提交消息的步骤:

步骤1

您要编辑的提交之前立即select提交。 例如,如果我想编辑提交消息“FOOBAR!” 那么我需要select它之前的提交:

在我想要编辑的之前选择提交。

第2步

右键单击所选提交,然后单击Rebase children...interactively

选择“交互式地重新培训孩子”。

第3步

select您要编辑的提交,然后单击底部的Edit Message 。 在这种情况下,我select提交消息“FOOBAR!”:

选择您想要编辑的提交。

步骤4

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

编辑提交消息

第5步

当您返回到交互式底框窗口时,单击OK以完成底框:

点击确定完成。

第6步

此时,您必须强制推送新的更改,因为您已经重新提交了已经推送的提交。 但是,目前的SourceTree for Windows 1.5.2.0版本不允许您通过GUI强行推送,因此无论如何您都需要从命令行使用Git来执行此操作。

点击GUI中的Terminal以打开terminal。

点击终端

第七步

从terminal用下面的命令强行推送,

 git push origin <branch> -f 

其中<branch>是您要推送的分支的名称, -f表示强制推送。 推力会覆盖你在远程仓库的提交,但是你的情况没问题,因为你说你没有与其他人分享你的仓库。

而已! 你完成了!

在版本1.9.6.1上。 对于UnPressed提交。

  1. 点击以前提交的描述
  2. 点击提交图标
  3. input新的提交信息,并从Commit options下拉菜单中select“ Ammend latest commit ”。
  4. 提交你的信息。

更新

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

查看我的新版本的SourceTree for Windows 1.5.2.0的 新答案 。 为了历史的目的,我将这个答案留下。

原始答复

因为我在Windows上我没有一个命令行工具,也不知道如何使用一个:(是唯一的方法来弄清楚?GUI不包括所有的git的function?

关于Git的graphics用户界面, 不,他们并没有涵盖Git的所有function他们甚至不接近 。 我build议你检查一下如何在Git中编辑不正确的提交信息? ,Git足够灵活,从命令行有多种解决scheme。

SourceTree实际上可能已经与msysgit bash shell一起,或者它可以使用标准的Windows命令shell。 无论哪种方式,你通过单击terminalbutton从SourceTree打开它:

在这里输入图像说明

您可以在此设置SourceTree使用的terminal(bash或Windows):

在这里输入图像说明

一种解决SourceTree中问题的方法

话虽如此,你可以在SourceTree中做到这一点。 既然你在评论中提到你不介意“恢复到错误的提交”(我假设你实际上是指重置,这是Git中的一个不同的操作),那么这里是步骤:

  1. 在SourceTree中通过右键单击它并selectReset current branch to this commit ,然后从下拉列表中select硬重置选项,在SourceTree中执行硬重置。 在这里输入图像说明
  2. 然后点击提交button
  3. 点击底部的“修改最新提交”checkbox。 在这里输入图像说明
  4. 对消息进行更改,然后再次单击“提交”。 瞧!

关于这个评论 :

如果因为已经推送到Bitbucket而无法实现,那么我不介意创build一个新的存储库并重新开始。

这是否意味着你是唯一一个从事回购工作的人? 这很重要,因为改变回购的历史不是微不足道的(比如通过修改提交),而不会给合作者带来问题。 但是,假设你是唯一一个从事回购工作的人,那么你想要做的下一件事情就是强制把你改变的历史logging推送到远程。

但请注意,因为您对错误的提交进行了重置,所以强制推送会导致您丢失之前发生的所有工作。 如果没关系,那么你可能需要在命令行使用以下命令来执行强制推送,因为在SourceTree中找不到选项:

 git push remote-repo head -f 

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

不pipe怎样,你应该真的从命令行学习如何使用Git,它会让你更熟练的使用Git。 #ProTip,使用msysgit并打开terminal属性中的快速编辑模式,以便您可以双击高亮显示一行文本,右键单击复制,然后再次右键单击进行粘贴。 这很快。