如何在SourceTree中编辑不正确的提交消息而不触及命令行?
额外的细节:
结果:
注意:这个答案最初是针对Windows SourceTree的旧版本编写的,现在已经过时了。
看看我的新答案用于当前版本的SourceTree for Windows。出于历史的考虑,我把这个答案留了下来。
因为我在Windows上,我没有命令行工具,也不知道如何使用一个:(这是唯一的方法来得到排序吗?GUI没有覆盖git的所有功能?本;楼主
对于Git gui, 不,他们没有涵盖Git的所有功能。他们甚至没有接近。我建议你看看如何在Git中编辑错误的提交消息中的一个答案。, Git足够灵活,可以从命令行提供多种解决方案。
SourceTree实际上可能已经附带了msysgit bash shell,或者它可能能够使用标准的Windows命令shell。无论哪种方式,你都可以通过单击Terminal按钮从SourceTree打开它:
你可以在这里设置SourceTree使用的终端(bash或Windows):
话虽如此,这里有一种在SourceTree中实现它的方法。既然你提到在评论中,你不介意“恢复到错误的提交”(我假设你实际上是指重置,这在Git中是一个不同的操作),那么以下是步骤:
Reset current branch to this commit
关于这样的评论:
如果不可能,因为它已经推送到Bitbucket,我不介意创建一个新的存储库并重新开始。
这是否意味着你是唯一负责回购的人?这很重要,因为改变回购的历史(比如修改提交)而不给协作者带来问题并不是一件小事。但是,假设您是唯一一个处理回购的人,那么您要做的下一件事是强制将更改后的历史推到远程。
但是要注意,由于您对错误的提交进行了硬重置,因此强制推送会导致您丢失之前的所有工作。如果没问题,那么你可能需要在命令行中使用以下命令来执行强制推送,因为我在SourceTree中找不到这样做的选项:
git push remote-repo head -f
这也假设BitBucket将允许您强制推送到回购。
无论如何,您应该学习如何从命令行使用Git,这将使您更加熟练地使用Git。#ProTip,使用msysgit并在终端属性中打开快速编辑模式,这样您就可以双击突出显示一行文本,右键单击复制,然后再次右键单击粘贴。非常快。
选择提交< em > < / em >前你想编辑的提交。 例如,如果我想编辑带有消息“FOOBAR!”的提交,那么我需要
右键单击所选的提交,然后单击Rebase children...interactively:
Rebase children...interactively
选择你想编辑的提交,然后在 底部。在本例中,我选择了带有“FOOBAR!””:< / p >
编辑提交消息,然后单击OK。在我的例子中,我添加了 “SHAZBOT !SKADOOSH !" < / p >
OK
当你返回交互式的变基窗口时,单击OK来完成 变基:< / p >
从GUI中单击Terminal打开一个终端。
Terminal
使用下面的命令从终端强制推送,
git push origin <branch> -f
,其中<branch>是你想要推送的分支的名称,-f表示 强迫推。强制push < em >将覆盖< / em >你在你的 远程回购,但这是OK在你的情况下,因为你说你不共享 你和其他人的回购
<branch>
-f
就是这样!你已经完成了!
在版本1.9.6.1。对于unpushing提交。
如果注释消息包含非英语字符,使用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 >:目标提交不是最新的。
git rebase -i HEAD~n
压缩最近的n提交。例如,如果你想在最后一个消息之前编辑消息,n是2。 这个命令将打开一个vi窗口,每行的第一个单词是“选择”,你将你想编辑的行的“pick”更改为“重述”。然后,输入:wq以保存退出该vi窗口。现在,一个新的vi窗口将被打开,在这个窗口中您输入您的新消息。也可以使用:wq来保存&quit
:wq
F5