(又一个)修改git历史记录以添加第一个提交

时间:2012-04-09 23:47:45

标签: git git-rebase

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

然后加上侮辱伤害,我将原始代码添加为我的第一次编辑的分支..换句话说,它现在是一个大混乱:(

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

enter image description here

如何修改历史记录以实现此目的?

非常感谢,

狡猾

1 个答案:

答案 0 :(得分:9)

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

首先从C5提交中获取提交ID(50da9c3)的前7位或8位数字并将其放入剪贴板或textedit或其他内容 - 稍后您将需要它

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

enter image description here

以下是获取目标的步骤:

创建一个新的非根分支,以开始从命名基础

构建提交
git symbolic-ref HEAD refs/heads/base

现在从git

中删除所有文件和目录
git rm --cached -r .

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

git clean -d --force

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

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

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

enter image description here

现在,樱桃挑选c5提交(你在剪贴板上有什么)

git cherry-pick 50da9c3

enter image description here

现在将master分支重新启动到基本分支

git rebase --onto base --root master

enter image description here

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

git branch -d base

enter image description here

git branch -D c4-c5branch

enter image description here

请记住,'Initial Commit'是一个没有文件的空提交,所以不要被愚弄。 C5提交实际上是第一个基于内容的提交。