51

无法获取如何为当前分支执行 squash rebase。控制台命令将是

git rebase -i HEAD~2

然后像往常一样压扁。但是如何在 TGit 中做同样的事情呢?

初始化案例的脚本

git init .
touch 1
git add 1
git commit -m "1"
touch 2
git add 2
git commit -m "2"
touch 3
git add 3
git commit -m "3"

因此,压缩后我们将有 1 次提交和 3 个文件。

有什么建议吗?

4

6 回答 6

64

这适用于我使用 TortoiseGit 1.7.12:

  1. 右键单击要进行交互式变基的工作目录,然后从上下文菜单中选择TortoiseGit-> 。Show log
  2. 在出现的“日志消息”对话框中,右键单击您不想再变基的最新提交,然后Rebase master onto this...从上下文菜单中选择。
  3. 在出现的“Rebase”对话框中,勾选Force Rebase复选框,然后右键单击提交以在 、 等之间进行选择PickSquash或者Squash ALL在您的情况下勾选复选框。
  4. 按下Start Rebase按钮,成功后变成Commit按钮,然后变成Done按钮。按所有。

请注意,在您的示例脚本中,您将压缩/修复到根提交,这是一种特殊情况,不能如上所述工作,因为根提交没有您可以在步骤 2 中选择的父级。

于 2012-09-26T19:29:38.227 回答
61

您可以使用 GUI 组合两个相邻的提交,如下所示。记住不要在共享存储库上合并提交。看: 右键单击 2 个提交

于 2014-01-23T11:04:09.090 回答
5

这是我使用 Tortoise Git 所做的并将 repo 存储在 Assembla 上(显然通过类似于 GitHub)。

我决定我想有效地删除我的整个提交历史,并从头开始重新开始回购。我本可以在 Assembla 中删除本地 git 文件夹和相应的 repo,然后重新创建它,但我认为最好弄清楚如何以“正确的方式”执行此操作。

所以,这就是我实现它的方法:

1) 使用 Tortoise Git,显示 repo 的日志。突出显示所有提交,右键单击它们,然后选择“合并为一个提交”。

2)在弹出的对话框中,删除提交评论(它成为所有先前评论的组合),并将其替换为单个评论,例如REBASE。然后启动提交。然后,本地 repo 将从头开始有效(当然,所有文件仍然添加到其中),而无需删除并重新创建它。

3) 不幸的是,您不能只将其推送到 Assembla。它会拒绝这个,坚持你的“头”在远程分支后面。因此,要解决这个问题,首先转到 Assembla 中的 repo 的“设置”页面。启用“允许-强制推送”。

4) 现在执行“强制推送”。我不知道 Tortoise Git 是否有一个 gui 选项,但通过命令提示符很容易做到:

cd [your repo folder]
git push -f origin

完毕!

更新:

要使用 TortoiseGit “强制推送”,在推送对话框中有强制“已知更改”和“未知更改”的复选框。我不确定有什么区别,但它们都导致使用 git --force 开关。首先尝试“已知更改”。

于 2015-08-07T14:33:37.457 回答
2
  • 转到Show Log,然后在您当前的提交处创建一个标签(例如“tmp”)。
  • 硬重置为您不想更改的历史记录中的第一次提交。
  • All Branches如果您没有看到所有提交,请在日志底部切换。
  • 然后选择所有较新的提交并右键单击它们: Cherry Pick selected commits...
  • 现在您处于交互式变基模式。在那里,您可以执行交互式 rebase 常见的操作。
于 2018-07-18T14:58:24.530 回答
1

您可以从 Rebase 窗口执行此操作。该视频很好地涵盖了它:https ://youtu.be/qrMubRPkkrE?t=490

如视频所示:

  1. 右键单击TortoiseGit/Rebase...
  2. 更改Upstream:FETCH_HEAD
  3. 更改Pick ALLSquash ALL
  4. 点击Start Rebase
于 2021-01-21T22:39:07.613 回答
0

一种方法是:转到日志对话框并选择“rebase to *”,然后选中“Force”复选框并将提交标记为“squash”(例如,通过输入“q”)。

于 2012-09-21T15:54:59.050 回答