git - (还有一个)修改 git 历史以添加第一次提交

标签 git git-rebase

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

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

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

enter image description here

任何想法如何修改历史来完成这个?

非常感谢,

狡猾的

最佳答案

我已完全在命令行中完成此操作,但我将插入来自 SourceTree 的屏幕截图来说明发生了什么。

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

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

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 分支重新根植到 base 分支上

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

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

关于git - (还有一个)修改 git 历史以添加第一次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081308/

相关文章:

git 保存已解决 merge 冲突的历史记录

git - 除了生成的 git 树结构之外,git pull 与 git fetch + git rebase 之间还有什么重要区别吗?

git - Bitbucket 上的 POST Hook

git - 在 post-update hook 中查找 Git 分支名称

git - 自动中止 "failed"git rebase?

git error unpack failed missing blob on git review to gerrit

git - 从 git log 中通过扩展名排除特定文件

git - 在不改变内容的情况下 rebase

git - git交互式rebase-编辑vs中断

git - 将最新提交拆分为多个分支