如何使用TortoiseGit重新排序提交记录(变基)

7
我想推送几个单独的提交到我们主要的git代码库。然而阅读一些资料后,听起来我需要重新排序提交,因为 git 只会推送到指定提交为止的所有提交。首先,我不太明白为什么这不是内置在 git 中的(我是一个 git 新手)。无论如何,我需要重新排序提交,并且我使用 TortoiseGit。我已经找到了如何进入 rebase 菜单,但是我不知道该选择哪些选项。进入rebase菜单的方法是:
  1. 右键点击目录并选择TortoiseGit/Show Log
  2. 浏览到并选择我想要重新排序的提交。
  3. 选择“在此基础上重新创建”。
我看到了一个对话框,但是我不知道任何字段的含义。
首先,有一个分支字段,我看到master和一些远程选项。我没有任何分支。我克隆了一个代码库,并且迄今为止只从本地克隆中工作,为什么会有一个分支选项?
第二,有一个带有上下箭头的小按钮。这个按钮是用来干什么的?
第三,有一个 upstream 字段,默认情况下选择了存储库的 SHA。当我点击该字段时,我可以看到FETCH_HEAD、master和一些远程选项。
我期望看到提交列表,然后只需上下移动我的提交。通过勾选 Force Rebase 选项,我可以看到提交列表。这是否是我需要做的?但是我在强制执行什么,我只是想做一个普通的 rebase?
再次说明,我是 git 新手,感谢任何帮助。
5个回答

12

您正在走上正确的道路。强制变基是您需要使用的选项。在使用强制变基选项查看提交后,选择一个提交并使用上/下按钮重新排列您的提交。在按照您想要的顺序排序之后,按下开始变基按钮。

至于为什么您需要选择强制变基; 变基通常是在您想要基于更新的提交分支当前分支时执行的。由于您的当前分支已经基于您选择的提交,因此没有任何需要变基的内容。在您的情况下,您只是试图重新排列您的提交而不是进行变基。对此使用变基并没有问题,只需要明确选择强制变基即可。


我假设 Force Rebase 启用了一个强制标志,以供 git rebase 使用。为什么我需要使用 Tortoise 强制 rebase,而不是使用 git 命令行? - Samuel

3
以下是从geoji的答案中得出的完整步骤:
  1. 在代码库的根目录打开TortoiseGit“显示日志”
  2. 右键单击不是head的提交,选择“将“master”变基到这里…”
  3. 在弹出的Rebase对话框中,将Upstream更改为“FETCH_HEAD”
  4. 勾选“Force Rebase”
  5. 您的提交历史现在应该出现在Rebase对话框中
  6. 点击要移动的提交,并使用“上”和“下”按钮
  7. 在提交按您的要求排序后,按“开始变基”
  8. 它将更改每个必须移动以进行重新排序的提交的提交哈希值

1
这是一个解决方法。以下是我发现的内容:
上游和下游的定义: "downstream"和"upstream"的定义 FETCH_HEAD的定义:在Google中搜索“git中FETCH_HEAD是什么”。
我能否使用TortoiseGit的git命令行工具?:我能同时使用命令行Git工具和TortoiseGit吗? 如何重新排列git提交:使用git重新排序提交 在这篇博客文章中,他建议使用:
git rebase -i HEAD~3

我用了。
git rebase -i <SHA_of_oldest_commit>

相反,这将为您提供从头到SHA_of_oldest_commit的提交列表。要重新排序提交,只需按照所需的方式重新排序行并保存和关闭文件即可。


0

我即使在上面的答案的帮助下也无法重新排列TortoiseGit中的提交。最终,我选择安装 Source Tree,它具有更好的用户界面,在那里您可以通过单击一个按钮(交互式地重建哈希的子项 ...)通过向下向上按钮来重新排序历史记录。


0

这里有一个更简单的答案来自ShawnFeatherly's answer

  1. 在代码库的根目录下打开TortoiseGit“显示日志”
  2. 右键单击不是head的提交,通过“在此版本创建分支...”创建分支,我在以下称之为“baseBranch”。
  3. 右键单击带有分支“baseBranch”的提交,并选择“将“master”变基到此处...”,(“master”是此情况下应重新排序的分支)
  4. 在弹出的变基对话框中,“分支”已选择为“master”,“上游”为“baseBranch”。
  5. 勾选“强制变基”
  6. 现在您的提交历史记录应该显示在变基对话框中
  7. 单击要移动的提交并使用“上”和“下”按钮
  8. 在提交按您想要的顺序排序后,按“开始变基”
  9. 它将更改每个必须移动以进行重新排序的提交的提交哈希
  10. 删除分支“baseBranch”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接