如何将工作转移到新分支并删除所有提交历史记录?

问题描述 投票:1回答:2

我皇室搞砸了一个分支。

我一直在关键砰击,合并/拉/挤压,我不知道还有什么。

我的功能分支上的所有工作都应该是1次提交

我想保留我的工作所在,但我不想要10个提交历史。

由于存在冲突,我不能再压缩提交,而且它只是变得如此混乱。

压扁不再是选项因为git rebase-i HEAD~2我在某个时候做了合并而不能这样做 - 因为在rebase中间我的更改无法应用因为我有些落后通过挤压远程 - 我一定做错了。

所以我想做的是签出一个新的分支并删除最后一个之前的所有提交历史记录。

做这个的最好方式是什么?你也可以解释一下像我5岁那样的解决方案吗?

git branch rebase git-commit squash
2个回答
1
投票

如果您在工作目录中拥有所需的所有文件,则可以删除当前的git存储库并创建一个新文件:

rm -rf .git
git init
git add .
git commit -m "initial commit"

如果你想保持reflog不变,你还可以做的就是使用reset作为一种廉价的变基方式。找出初始提交的哈希值,重置 - 混合,保留工作目录中的所有更改,然后提交--amend将这些更改添加到初始提交中:

# find out the id of your first commit
git rev-list --max-parents=0 --abbrev-commit HEAD

# reset to it
git reset --mixed <first commit id>

# add files to index and amend
git add .
git commit --amend -m "initial commit"

1
投票

如果您的文件具有正确的内容,则可以从中创建新分支。假设提交哈希是abc123而新分支是foo

git checkout --orphan foo abc123
git commit

现在你有foo,它只有一个提交,它与abc123具有相同的文件。然后你可以删除旧分支。

git branch -D <old_branch>

但是如果您感到遗憾,只需保留旧分支,直到您确定不再需要它为止。

© www.soinside.com 2019 - 2024. All rights reserved.