Git 如何使用龟板进行重基(挤压)

Git 如何使用龟板进行重基(挤压),git,tortoisegit,Git,Tortoisegit,无法获取如何对当前分支执行挤压重基。控制台命令将是 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个文件 有任何建议吗?一种方法是:进入日志对话框,选择“

无法获取如何对当前分支执行挤压重基。控制台命令将是

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个文件


有任何建议吗?

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

这对我来说适用于使用Ortoisegit 1.7.12:

  • 右键单击要在其中执行交互式重基的工作目录,然后从上下文菜单中选择
    TortoiseGit
    ->
    Show log
  • 在出现的“日志消息”对话框中,右键单击您不想重新设置基址的最新提交,然后从关联菜单中选择重新设置主控基础到该…
  • 在出现的“重设基础”对话框中,勾选
    强制重设基础
    复选框,然后右键单击提交以在
    拾取
    挤压
    等之间进行选择,或者勾选案例中的
    挤压所有
    复选框
  • 按下
    Start Rebase
    按钮,成功后该按钮将变为
    Commit
    按钮,然后变为
    Done
    按钮。全部按下

  • 请注意,在示例脚本中,您将挤压/修复到根提交,并且不会像上面所述那样工作,因为根提交没有可以在步骤2中选择的父级。

    您可以使用GUI将两个相邻的提交组合起来,如下所示。请记住,不要合并共享存储库中已有的提交。 见:
    以下是我使用Tortoise Git所做的工作&将回购存储在Assembla上(显然是通过类似于GitHub的方式)

    我决定要有效地删除我的整个提交历史记录,从头开始回购。我本可以删除本地git文件夹和Assembla中相应的repo,然后重新创建它,但我认为最好找出“正确的方法”来实现这一点

    我是如何做到这一点的:

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

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

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

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

    cd [your repo folder]
    git push -f origin
    
    完成了

    更新:

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

    • 转到
      显示日志
      ,然后在当前提交时做一个标记(例如“tmp”)
    • 重设为历史上您不想更改的第一次提交
    • 如果看不到所有提交,请在日志底部切换
      所有分支
    • 然后选择所有较新的提交并右键单击它们:
      Cherry Pick selected提交…
    • 现在您处于交互式重设基础模式。在那里,您可以执行交互式重新基准的常见操作

    您可以从“重新设置基础”窗口执行此操作。这段视频很好地介绍了这一点:

    如视频所示:

  • 右键单击
    TortoiseGit
    /
    Rebase…
  • 上游:
    更改为
    取头
  • 全部拾取
    更改为
    全部挤压
  • 单击
    Start Rebase

  • tortoisegit 1.7.0.0的changelog有这样一行:修复了问题#784:Rebase窗口应该允许更容易地选择Pick/Squash/Edit/Skip(键:空格:切换状态,s:Skip,e:Edit,p:Pick,q:Squash)@willoller:我确信这只是关于向已经存在的按钮添加快捷方式,如果我右键单击commit并加上注释“1”,选择“rebase…”并按照您的建议执行-我以2次提交完成:“1”和“2”:您是否得到1次提交?PS:是的,我也安装了最新的TGit版本。对于您的合成示例,我也会提交2次而不是1次,但这是由于我提到的特殊情况。修改根提交(即历史上的第一次提交)的交互式重基是一件特殊的事情,据我所知,目前无法在Ortoisegit中完成。在命令行中,这也是一种棘手的问题。请参阅我提到的链接。对于不涉及根提交的任何其他情况,您可以使用Ortoisegit和上面的步骤轻松挤压任意多个提交。警告(Ortoisegit 1.6.5.0):我在一个分支上尝试了这种方法,在分支off提交(分支上第一次提交之前的一个)上重定基址,结果是分支头指向分支关闭点,分支上的所有提交及其修改都丢失了!那神秘的根呢?我不是经常使用Ortoisegit,但我猜Ortoisegit并不支持它。但是,如果您选择在GUI中重新设置根提交的基础,我认为可以在Ortoisegit中实现一些“智能”逻辑来自动使用“-root”选项。将两个(相邻的)提交组合在一起是重新设置基础/挤压的一种非常特殊的情况。对于更通用的解决方案(例如,挤压尚未邻接的提交)