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

Com*_*ity 189 git atlassian-sourcetree

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

额外细节:

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

结果:

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

小智 397

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

步骤1

要编辑的提交之前立即选择提交.例如,如果我想用"FOOBAR!"消息编辑提交.然后我需要选择它之前的提交:

在我要编辑的那个之前选择提交.

第2步

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

选择

第3步

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

选择要编辑的提交.

第4步

编辑提交消息,然后单击"确定" OK.在我的例子中,我添加了"SHAZBOT!SKADOOSH!"

编辑提交消息

第5步

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

单击

第6步

此时,您需要强制推送新的更改,因为您已经重新设置了已经推送的提交.但是,当前1.5.2.0版本的SourceTree for Windows不允许您强制推送GUI,因此无论如何您都需要从命令行使用Git才能执行此操作.

Terminal从GUI 单击以打开终端.

单击终端

第7步

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

git push origin <branch> -f
Run Code Online (Sandbox Code Playgroud)

<branch>您要推送的分支的名称在哪里,以及-f强制推送的方式.强制推送将覆盖您的远程仓库中的提交,但是在您的情况下这没关系,因为您说您没有与其他人共享您的仓库.

而已!你完成了!

  • 有趣 - 我想知道他们为什么不做一个简单的"编辑提交消息"选项. (61认同)
  • Mac版本的步骤基本相同. (4认同)
  • 注意:如果您想以#开头提交消息,则此命令将不起作用,git会将其视为注释,并告诉您您的提交消息为空! (2认同)
  • 强制推送现在可通过 GUI 使用。否则完美:-) (2认同)
  • 您说“强制推送将覆盖您对远程存储库的提交,但在您的情况下没问题,因为您说您不与其他人共享您的存储库。” 如果您与其他人共享您的回购,回购会发生什么?它会将您命名为编辑后的所有提交的作者吗? (2认同)

Fra*_*anc 35

在版本1.9.6.1.对于UnPushed提交.

  1. 单击以前提交的描述
  2. 单击提交图标
  3. 输入新的提交消息,然后从"提交选项"下拉列表中选择" 修改最新提交 ".
  4. 提交你的信息.

  • 我认为这是更准确的,因为基本上模仿了“git --amend -m 'new message...'”命令从终端执行的操作。但第 1 步不是必需的,您可以单击所需的任何提交,但“修改最新提交”可以帮助您更新 lsat 提交。 (2认同)

小智 12

更新

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

请参阅我对当前版本的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. 通过右键单击并选择Reset current branch to this commit,然后从下拉列表中选择硬重置选项,在SourceTree中对硬错误提交进行硬重置.在此输入图像描述
  2. 单击Commit按钮,然后单击
  3. 单击底部显示"修改最新提交"的复选框. 在此输入图像描述
  4. 对邮件进行所需的更改,然后再次单击"提交".瞧!

关于这个评论:

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

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

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

git push remote-repo head -f
Run Code Online (Sandbox Code Playgroud)

这也假设BitBucket允许你强制推送回购.

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


Hos*_*den 11

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

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

注意:如果提交已被其他成员提取,则下面的更改可能会导致其混乱.

步骤1:在sourcetree主窗口中,找到您的repo选项卡,然后单击" 终端 "按钮以打开git命令控制台.

第2步:

[情况A]:目标提交是最新的.

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

git commit --amend -m "new comment message"
Run Code Online (Sandbox Code Playgroud)

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

git push --force
Run Code Online (Sandbox Code Playgroud)

[情况B]:目标提交不是最新的.

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

git rebase -i HEAD~n
Run Code Online (Sandbox Code Playgroud)

它是压缩最新的n次提交.例如,如果要在最后一个之前编辑消息,则n为2.此命令将打开一个vi窗口,每行的第一个单词为" pick ",并将"pick"更改为" reword "为该行你想编辑.然后,输入:wq以保存并退出该vi窗口.现在,将打开一个新的vi窗口,在此窗口中输入新消息.也用于:wq保存和退出.

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

git push --force
Run Code Online (Sandbox Code Playgroud)


最后:在sourcetree主窗口中,按F5以刷新.