如何使用tortoisegit进行rebase(squash)

zer*_*kms 42 git tortoisegit

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

git rebase -i HEAD~2
Run Code Online (Sandbox Code Playgroud)

然后像往常一样压扁.但是如何在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"
Run Code Online (Sandbox Code Playgroud)

因此,在压缩之后我们将有1个提交3个文件.

有什么建议?

ssc*_*rth 54

这适用于我使用TortoiseGit 1.7.12:

  1. 右键单击要进行交互式rebase的工作目录,然后从上下文菜单中选择TortoiseGit- > Show log.
  2. 在出现的"登录信息"对话框中,在最近右键单击提交,你会喜欢了重订,并选择Rebase master onto this...从上下文菜单中.
  3. 在出现的"调整基线"对话框中,勾选Force Rebase复选框,并在提交然后右键单击之间进行选择Pick,Squash等等,或勾选Squash ALL复选框,在您的案件.
  4. 按下Start Rebase按钮,成功后变为Commit按钮,然后Done按下按钮.按下所有这些.

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

  • 警告(TortoiseGit 1.6.5.0):我在分支上尝试了这种方法,重新定位到分支提交(在分支上第一次提交之前),结果是分支HEAD指向分支关闭点,所有在树枝上的提交和他们的修改丢失了! (3认同)

reg*_*bsb 51

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

  • 像这样组合两个(相邻)提交是一个非常特殊的重新定位/压缩的情况.对于更通用的解决方案(例如,压缩尚未相邻的提交),请参阅我的答案. (5认同)
  • 我在TortoiseGit 1.8.7上,很久以前我曾经看过这个菜单选项,但无论我现在选择什么提交,"合并到一个提交"的选项永远不会出现.您显示的所有其他人都在显示.它被删除或者我的所有提交都阻止我这样做(我希望他们在那种情况下显示并禁用它) (3认同)
  • @PandaWood 提交需要位于图表的“尾部”,没有任何合并等,如图所示。 (2认同)
  • @sschuberth你可以选择两个以上我认为 (2认同)

Buv*_*inJ 5

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

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

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

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

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

3) 不幸的是,您不能将其推送到 Assembla。它会拒绝这一点,坚持认为你的“头”在远程分支的后面。因此,要解决该问题,请首先转到 Assembla 中存储库的“设置”页面。启用“允许 – 强制推送”。

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

cd [your repo folder]
git push -f origin
Run Code Online (Sandbox Code Playgroud)

完毕!

更新:

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