6

我正在修改别人的(非 git)代码。我下载了原始版本,然后进行了修改,然后开枪将修改后的版本作为我的第一次提交。这是一个错误,我应该将原始下载的代码添加为我的第一次提交。

然后为了雪上加霜,我添加了原始代码作为我第一次编辑的一个分支。换句话说,现在是一团糟:(

简单来说,我所拥有的看起来像下面的蓝色图表。C5 是实际的原始代码,C1,C2-C6 是我逐渐修改的(C4 是多余的)。我宁愿让绿色成为我的历史。

在此处输入图像描述

任何想法如何修改历史来实现这一点?

非常感谢,

狡猾

4

1 回答 1

10

我已经完全在命令行中完成了这项工作,但我将插入 SourceTree 的屏幕截图来说明正在发生的事情。

首先从 C5 提交中获取提交 id (50da9c3) 的前 7 或 8 位数字,然后放入剪贴板或 textedit 或其他东西 - 你稍后会需要它

为了确认,这是我们的起始状态:

在此处输入图像描述

以下是到达您想要的位置的步骤:

创建一个新的无根分支以开始从命名基础构建提交

git symbolic-ref HEAD refs/heads/base

现在从 git 中删除所有文件和目录

git rm --cached -r .

现在所有文件都“未跟踪”,将它们从本地工作目录中删除

git clean -d --force

现在创建一个没有任何内容的提交(这将是构建其他所有内容的提交)。

git commit --allow-empty -m'Initial Commit'

你的树现在应该是这样的:

在此处输入图像描述

现在樱桃选择 c5 提交(您在剪贴板上的内容)

git cherry-pick 50da9c3

在此处输入图像描述

现在将主分支重新植根到基础分支

git rebase --onto base --root master

在此处输入图像描述

现在您可以删除 base 和 c4-c5 分支

git branch -d base

在此处输入图像描述

git branch -D c4-c5branch

在此处输入图像描述

请记住,“初始提交”是一个没有文件的空提交,所以不要上当。C5 提交实际上是第一个基于内容的提交。

于 2012-04-11T08:43:20.380 回答