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


202

如何在不触摸命令行的情况下在SourceTree中编辑错误的提交消息?

额外细节:

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

结果:

  • 根据您的评论和答复,目前看来这是不可能的,所以我将创建一个新的存储库并重新开始。感谢你的帮助!

Answers:


425

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

第1步

选择您要编辑的提交之前的提交。例如,如果我要编辑带有消息“ FOOBAR!”的提交,然后我需要选择它之前的提交:

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

第2步

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

选择“以交互方式使子级变基”。

第三步

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

选择您要编辑的提交。

第4步

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

编辑提交消息

第5步

返回交互式变基窗口时,单击OK完成变基:

单击确定完成。

第6步

在这一点上,由于已经对已经推送的提交进行了重新基准化,因此您需要强制推送新的更改。但是,当前用于Windows的1.5.2.0版本的SourceTree不允许您强制通过GUI,因此无论如何您都需要从命令行使用Git。

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

点击终端

步骤7

使用以下命令从终端强制推入,

git push origin <branch> -f

<branch>您要推送的分支的名称在哪里,-f意味着强制推送。强制推送将覆盖您在远程回购上的提交,但是在您的情况下这是可以的,因为您说过不与其他人共享回购。

而已!你完成了!


4
步骤也与Mac版本基本相同。
race_carr 2014年

2
注意:如果您想使用#开头提交消息,则此命令将不起作用,git会将其视为注释,并告诉您您的提交消息为空!
Daniel Edholm Ignat 2015年

1
“就这样!您完成了!”-很简单,我不知道是什么,就像抓到兔子一样。在如此重要且经常看到的情况下,无需创建程序功能。如果您匆忙打错了打字,则必须重新设置头并再次创建新的提交。
兰蒂耶夫

67
有趣-我想知道为什么他们不做一个简单的“编辑提交消息”选项。
乔纳森·阿基诺

1
现在可通过GUI使用强制推送。否则就完美了:-)
LaTisha

43

在版本1.9.6.1。对于未推送的提交。

  1. 点击先前提交的描述
  2. 单击提交图标
  3. 输入新的提交消息,然后选择“ Ammend Latest commit”从“提交选项”下拉列表中 ”。
  4. 提交您的消息。

13

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

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

警告:如果其他成员撤消了提交,则下面的更改可能会对他们造成混乱。

步骤1:在sourcetree主窗口中,找到您的repo标签,然后点击“ 终端 ”按钮以打开git命令控制台。

第二步

[情况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以刷新。


12

更新资料

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

请参阅我对于当前版本的SourceTree for Windows 1.5.2.0的新答案。我将这个答案留作历史参考。

原始答案

当我在Windows上时,我没有命令行工具,也不知道如何使用它:((这是将其整理出来的唯一方法吗?GUI不能涵盖git的所有功能吗?— 原始海报

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

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

在此处输入图片说明

您可以在此处设置SourceTree使用哪个终端(bash或Windows):

在此处输入图片说明

解决SourceTree中问题的一种方法

话虽如此,这是在SourceTree中完成此操作的一种方法。既然您在注释中提到您不介意“恢复为错误的提交”(我假设您实际上是指重置,这是Git中的另一项操作),所以这里是步骤:

  1. 右键单击SourceTree并选择Reset current branch to this commit,然后从下拉列表中选择hard reset选项,以将SourceTree硬重置为错误的提交。在此处输入图片说明
  2. 点击提交按钮,然后
  3. 单击底部的“修改最新提交”复选框。 在此处输入图片说明
  4. 对消息进行所需的更改,然后再次单击“提交”。瞧!

关于此评论

如果由于已经将其推送到Bitbucket而不可能,则我不介意创建新的存储库并重新开始。

这是否意味着您是唯一从事回购工作的人?这很重要,因为在不给协作者造成麻烦的情况下更改回购的历史记录(例如通过修改提交)并非易事。但是,假设您是仓库的唯一工作人员,那么接下来要做的就是将更改后的历史记录强制推送到远程服务器。

但是请注意,由于您对错误的提交进行了硬重置,因此强行推送将导致您失去之前所做的所有工作。如果可以,那么您可能需要在命令行上使用以下命令进行强制推送,因为我无法在SourceTree中找到执行此操作的选项:

git push remote-repo head -f

这还假设BitBucket将允许您强制推送到存储库。

无论如何,您还是应该从命令行真正地学习如何使用Git,它将使您更加精通Git。#ProTip,使用msysgit并在终端属性中打开“快速编辑”模式,以便您可以双击以突出显示一行文本,右键单击以进行复制,然后再次右键单击以进行粘贴。很快。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.