Com*_*ity 189 git atlassian-sourcetree
如何在不触及命令行的情况下在SourceTree中编辑不正确的提交消息?
额外细节:
结果:
小智 397
以下是使用SourceTree for Windows 1.5.2.0版编辑先前提交(不是最近提交)的提交消息的步骤:
在要编辑的提交之前立即选择提交.例如,如果我想用"FOOBAR!"消息编辑提交.然后我需要选择它之前的提交:

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

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

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

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

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

使用以下命令从终端强制推送,
git push origin <branch> -f
Run Code Online (Sandbox Code Playgroud)
<branch>您要推送的分支的名称在哪里,以及-f强制推送的方式.强制推送将覆盖您的远程仓库中的提交,但是在您的情况下这没关系,因为您说您没有与其他人共享您的仓库.
而已!你完成了!
Fra*_*anc 35
在版本1.9.6.1.对于UnPushed提交.
小智 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中做到这一点的一种方式.既然你在评论中提到你不介意"恢复到错误的提交"(我假设你实际上意味着重置,这是Git中的一个不同的操作),那么这里是步骤:
Reset current branch to this commit,然后从下拉列表中选择硬重置选项,在SourceTree中对硬错误提交进行硬重置.

关于这个评论:
如果它不可能,因为它已被推送到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以刷新.