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

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

额外的细节:

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

结果:

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

更新

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

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

原来的答案

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

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

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

enter image description here

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

enter image description here

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

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

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

关于这样的评论:

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

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

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

git push remote-repo head -f

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

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

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

步骤1

选择提交< em > < / em >前你想编辑的提交。 例如,如果我想编辑带有消息“FOOBAR!”的提交,那么我需要

选择在它前面的提交

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

步骤2

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

 select

步骤3

选择你想编辑的提交,然后在 底部。在本例中,我选择了带有“FOOBAR!””:< / p >

选择你想编辑的提交。

步骤4

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

Edit the commit message

步骤5

当你返回交互式的变基窗口时,单击OK来完成 变基:< / p >

点击确定完成。

步骤6

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

从GUI中单击Terminal打开一个终端。

点击终端

步骤7

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

git push origin <branch> -f

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

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

在版本1.9.6.1。对于unpushing提交。

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

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

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

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

Step1:在源树主窗口中,找到你的repo选项卡,并单击“终端”按钮打开git命令控制台。

步骤2:

< em >[情况]< / em >:目标提交是最新的。

1)在git命令控制台中输入

git commit --amend -m "new comment message"

2)如果目标提交已经被推到远程,你必须再次强制推。在git命令控制台中输入

git push --force

< em >[情况B] < / em >:目标提交不是最新的。

1)在git命令控制台中输入

git rebase -i HEAD~n

压缩最近的n提交。例如,如果你想在最后一个消息之前编辑消息,n是2。 这个命令将打开一个vi窗口,每行的第一个单词是“选择”,你将你想编辑的行的“pick”更改为“重述”。然后,输入:wq以保存退出该vi窗口。现在,一个新的vi窗口将被打开,在这个窗口中您输入您的新消息。也可以使用:wq来保存&quit

2)如果目标提交已经被推到远程,你必须再次强制推。在git命令控制台中输入

git push --force
< p > < br > 最后:在源树主窗口,按F5刷新。