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

sly*_*sly 6 git git-rebase

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

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

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

在此输入图像描述

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

谢谢很多,

狡猾

Jos*_*rlo 9

我在命令行完成了这个,但是我将插入来自SourceTree的屏幕截图来说明发生了什么.

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

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

在此输入图像描述

以下是获取所需位置的步骤:

创建一个新的非根分支以开始从命名库构建提交

git symbolic-ref HEAD refs/heads/base
Run Code Online (Sandbox Code Playgroud)

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

git rm --cached -r .
Run Code Online (Sandbox Code Playgroud)

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

git clean -d --force
Run Code Online (Sandbox Code Playgroud)

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

git commit --allow-empty -m'Initial Commit'
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

git cherry-pick 50da9c3
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在将master分支重新绑定到基本分支

git rebase --onto base --root master
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

git branch -d base
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

git branch -D c4-c5branch
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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