240

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

额外细节:

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

结果:

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

4 回答 4

497

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

步骤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 才能执行此操作。

从 GUI单击Terminal以打开终端。

点击终端

第 7 步

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

git push origin <branch> -f

where<branch>是您要推送的分支的名称,-f表示强制推送。强制推送将覆盖您在远程仓库上的提交,但在您的情况下这没关系,因为您说过您没有与其他人共享您的仓库。

而已!你完成了!

于 2014-04-23T08:42:22.037 回答
60

在版本 1.9.6.1 上。对于 UnPushed 提交。

  1. 点击之前提交的描述
  2. 单击提交图标
  3. 输入新的提交信息,然后从“提交选项”下拉列表中选择“修改最新提交”。
  4. 提交您的信息。
于 2017-01-05T11:32:12.327 回答
19

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

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

注意:如果提交已被其他成员拉取,下面的更改可能会给他们造成混乱。

Step1 : 在 sourcetree 主窗口中,找到你的 repo 选项卡,然后单击“终端”按钮打开 git 命令控制台。

第2步

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

于 2018-10-17T07:21:37.167 回答
13

更新

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

请参阅我对适用于 Windows 的 SourceTree 的当前版本1.5.2.0的新答案。出于历史目的,我将这个答案抛在脑后。

原始答案

因为我在 Windows 上,所以我没有命令行工具,也不知道如何使用

关于 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. 点击提交按钮,然后
  3. 单击底部显示“修改最新提交”的复选框。在此处输入图像描述
  4. 对消息进行所需的更改,然后再次单击“提交”。瞧!

关于此评论

如果因为它已经推送到 Bitbucket 而无法实现,我不介意创建一个新的存储库并重新开始。

这是否意味着你是唯一一个参与回购的人?这很重要,因为在不给合作者带来问题的情况下更改回购的历史记录(例如修改提交)并非易事。但是,假设您是唯一一个在 repo 上工作的人,那么接下来您要做的就是将更改的历史记录强制推送到远程。

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

git push remote-repo head -f

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

不管怎样,你真的应该学习如何从命令行使用 Git,它会让你更精通 Git。#ProTip,使用msysgit,在终端属性中开启快速编辑模式,这样就可以双击高亮一行文本,右键复制,再次右键粘贴。它很快。

于 2013-07-12T06:07:07.277 回答