如何使用tortoisegit进行rebase(squash)

时间:2012-09-21 10:33:09

标签: git tortoisegit

无法获取如何为当前分支执行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个文件。

任何提案?

6 个答案:

答案 0 :(得分:52)

这适用于我使用TortoiseGit 1.7.12:

  1. 右键单击要进行交互式rebase的工作目录,然后选择TortoiseGit - >上下文菜单中的Show log
  2. 在显示的“日志消息”对话框中,右键单击您的最新提交,然后再从上下文菜单中选择Rebase master onto this...
  3. 在显示的“Rebase”对话框中,勾选Force Rebase复选框,然后右键点击提交,在PickSquash等之间进行选择,或勾选{{在你的情况下1}}复选框。
  4. 按下Squash ALL按钮,成功后变为Start Rebase按钮,然后进入Commit按钮。按下所有这些。
  5. 请注意,在您的示例脚本中,您将压缩/修复根提交which is a special case并且不能如上所述工作,因为根提交没有您可以在步骤2中选择的父级。

答案 1 :(得分:47)

不要做任何以前的事情!只需使用界面组合2次提交即可。切记不要在共享仓库上组合提交。 看到: Right click 2 commits

答案 2 :(得分:3)

这是我使用Tortoise Git& amp;将回购存储在Assembla上(显然与GitHub相似)。

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

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

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

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

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

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

cd [your repo folder]
git push -f origin

完成!

更新:

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

答案 3 :(得分:1)

  • 转到Show Log,然后在当前提交时进行标记(例如“ tmp”)。
  • 将您想要更改的历史记录重新重置为历史上的第一次提交。
  • 如果看不到所有提交,则在日志底部切换All Branches
  • 然后选择所有较新的提交,然后右键单击它们: Cherry Pick selected commits...
  • 现在您处于交互式变基模式。在那里,您可以进行交互式变基的常见操作。

答案 4 :(得分:1)

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

如视频所示:

  1. 右键点击 TortoiseGit/Rebase...
  2. Upstream: 改为 FETCH_HEAD
  3. Pick ALL 改为 Squash ALL
  4. 点击Start Rebase

答案 5 :(得分:-1)

一种方法是:转到日志对话框并选择“rebase into *”然后选中“强制”复选框并标记“压缩”提交(例如输入“q”)。