如何使用TortoiseGit重新排序提交(rebase)

问题描述 投票:6回答:4

我想将几个单一提交推送到我们的主git存储库。在做了一些阅读之后虽然听起来我必须重新排序提交才能做到这一点,因为git只会将所有提交推送到指定的提交。首先,我真的不明白为什么这不仅仅是内置于git(我是一个git新手)。无论如何,我需要重新排序提交,我正在使用TortoiseGit。我已经找到了如何进入rebase菜单,但我不知道选择哪个选项。要进入rebase菜单我:

  1. 右键单击目录并选择TortoiseGit / Show Log
  2. 浏览并选择我想重新排序的提交。
  3. 选择“Rebase”master“on this”。

我遇到了一个对话框,但我不知道这些字段是什么意思。

首先,有分支领域,我看到主人和一些遥控器选项。我没有任何分支机构。我克隆了一个存储库,到目前为止一直在从本地克隆工作,为什么有一个分支选项?

其次,有一个小按钮,左右箭头相互叠加。这个按钮是什么用的?

第三,有一个上游字段,默认情况下它选择了存储库的SHA。当我点击该字段时,我会看到FETCH_HEAD,master和一些遥控器选项。

我希望看到一个提交列表,我可以上下移动我的提交。通过检查Force Rebase选项,我可以看到提交列表。这是我需要做的吗?我有什么打算,我以为我只是想做一个普通的老底板?

再次,我是一个git新手,任何帮助表示赞赏。

git version-control git-rebase tortoisegit
4个回答
11
投票

你走在正确的轨道上。 Force Rebase是您需要使用的选项。使用Force Rebase选项查看提交后,选择提交并使用向上/向下按钮重新提交提交。根据需要订购后按下“开始”“rebase”按钮。

关于为什么需要选择Force Rebase; Rebase通常在您希望将当前分支基于较新的提交时完成。由于您当前的分支已经基于您选择的提交,因此没有任何内容可以重新定义。在您的情况下,您只是尝试重新排序提交而不是重新定位。使用rebase没有错。只需要明确选择Force Rebase。


1
投票

这是一种解决方案。这是我发现的:

上游和下游的定义:Definition of "downstream" and "upstream"

FETCH_HEAD的定义:在Google中搜索“git中的FETCH_HEAD是什么”。

我可以在TortoiseGit中使用git命令行工具吗?:Can I use command-line Git tools and TortoiseGit simultaneously?

如何使用git:http://blog.dennisrobinson.name/reorder-commits-with-git/重新排序提交

在这篇博客文章中,他建议使用:

git rebase -i HEAD~3

我用了

git rebase -i <SHA_of_oldest_commit>

代替。这将为您提供从头到SHA_of_oldest_commit的提交列表。为了重新排序提交,我只是按照我想要的方式对行进行重新排序并保存并关闭文件。


0
投票

即使在上面的答案的帮助下,我也无法重新排序TortoiseGit中的提交。最后,我最终安装了更好的用户界面的Source Tree,你可以通过向下和向上按钮只需点击一下(Rebase children of Hash interactivelyly)重新排序历史记录。


0
投票

以下是geoji's answer的完整步骤。

  1. 在存储库的根目录下打开TortoiseGit“显示日志”
  2. 右键单击不是头部的提交,然后选择“Rebase”master“on this ...”
  3. 在出现的Rebase对话框中。将上游更改为“FETCH_HEAD”
  4. 检查“强制重新启动”
  5. 您的提交历史记录现在应显示在Rebase对话框中
  6. 单击要移动的提交,然后使用“向上”和“向下”按钮
  7. 根据需要订购提交后,按“Start Rebase”
  8. 它将为每次必须移动到重新排序的提交更改提交哈希
© www.soinside.com 2019 - 2024. All rights reserved.