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

时间:2013-07-11 21:57:59

标签: git atlassian-sourcetree

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

其他详细信息:

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

结果:

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

4 个答案:

答案 0 :(得分:371)

以下是编辑先前提交的提交消息的步骤( 是 使用 SourceTree for Windows 1.5.2.0版

第1步

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

Selecting commit before the one that I want to edit.

第2步

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

Selecting "Rebase children interactively".

第3步

选择要编辑的提交,然后点击“{1}}” 底部。在这种情况下,我选择提交消息“FOOBAR!”:

Select the commit that you want to edit.

第4步

编辑提交消息,然后单击Edit Message。在我的例子中,我补充说 “SHAZBOT!SKADOOSH!”

Edit the commit message

第5步

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

Click OK to finish.

第6步

此时,您需要强制推送您的新更改,因为您已经重新定位 承诺你已经推了。但是,目前的1.5.2.0版本 SourceTree for Windows不允许您强制推送GUI,所以 无论如何你都需要从命令行使用Git才能做到这一点。

点击GUI中的OK以打开终端。

Click Terminal

第7步

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

Terminal

其中git push origin <branch> -f 是您要推送的分支的名称,<branch>表示 强迫推。强制推送 将覆盖 您的提交 远程回购,但你的情况没问题,因为你说你没有分享 你和其他人的回购。

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

答案 1 :(得分:28)

版本1.9.6.1。对于UnPushed提交。

  1. 点击之前提交的说明
  2. 点击提交图标
  3. 输入新的提交消息,然后选择&#34; 修改最新提交&#34;来自提交选项下拉列表。
  4. 提交您的信息。

答案 2 :(得分:12)

更新

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

See my new answer,适用于当前版本的SourceTree for Windows, 1.5.2.0 。为了历史目的,我将这个答案留下了。

原始答案

  

因为我在Windows上我没有命令行工具,也不知道如何使用它:(这是解决问题的唯一方法吗?GUI没有涵盖所有git的功能? - Original Poster

关于Git GUI, 不,它们不包括Git的所有功能 他们甚至没有接近 I suggest you check out one of the answers in How do I edit an incorrect commit message in Git?,Git非常灵活,可以从命令行中找到多种解决方案。

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

enter image description here

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

enter image description here

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

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

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

      

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

    这是否意味着您是唯一一个处理回购的人?这很重要,因为在不给协作者带来问题的情况下更改仓库的历史(例如修改提交)并非易事。但是,假设您是唯一一个处理回购的人,那么接下来您要做的就是强行将您更改的历史记录推送到遥控器。

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

    git push remote-repo head -f
    

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

    你应该真的学习如何从命令行使用Git,它会让你更精通Git。 #ProTip,使用msysgit并在终端属性中打开“快速编辑”模式,这样就可以双击突出显示一行文本,右键单击进行复制,再次右键单击进行粘贴。这很快。

答案 3 :(得分:8)

如果注释消息中包含非英语字符,则使用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


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