如何将工作转移到新分支并删除所有提交历史记录?
How to move work on to a new branch and remove all commit history?
我真的搞砸了一个分支。
我一直在敲击钥匙并合并/拉动/压扁我不知道还有什么。
我的功能分支上的所有工作都应该在 1 次提交中
我想保留工作所在的位置,但我不想要 10 次提交历史记录。
我不能再压缩提交了,因为有冲突而且它变得如此混乱。
压缩不再是选项,因为 git rebase-i HEAD~2 我在某个时候做了合并但不能这样做 - 因为在 rebase 中间我的更改不能'不适用,因为我有些通过挤压落后于远程 - 我一定是做错了。
所以我想做的是签出一个新分支并删除最后一个之前的所有提交历史记录。
最好的方法是什么?
也请你像我 5 岁一样解释解决方案吗?
如果您有一个提交,其文件具有正确的内容,您可以从中创建一个新分支。假设提交哈希是abc123
,新分支是foo
git checkout --orphan foo abc123
git commit
现在你有 foo
,它只有一个提交,与 abc123
有相同的文件。然后就可以删除旧的分支了。
git branch -D <old_branch>
但如果您可能后悔,请保留旧分支,直到您确定不再需要它为止。
如果您的工作目录中有您需要的所有文件,您只需删除当前 git 存储库并创建一个新存储库:
rm -rf .git
git init
git add .
git commit -m "initial commit"
如果你想保持 reflog 不变,你还可以做的是使用 reset 作为一种廉价的变基方式。找出初始提交的哈希值,重置 --mixed 到它,将所有更改保留在工作目录中,然后提交 --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 次提交中
我想保留工作所在的位置,但我不想要 10 次提交历史记录。
我不能再压缩提交了,因为有冲突而且它变得如此混乱。
压缩不再是选项,因为 git rebase-i HEAD~2 我在某个时候做了合并但不能这样做 - 因为在 rebase 中间我的更改不能'不适用,因为我有些通过挤压落后于远程 - 我一定是做错了。
所以我想做的是签出一个新分支并删除最后一个之前的所有提交历史记录。
最好的方法是什么? 也请你像我 5 岁一样解释解决方案吗?
如果您有一个提交,其文件具有正确的内容,您可以从中创建一个新分支。假设提交哈希是abc123
,新分支是foo
git checkout --orphan foo abc123
git commit
现在你有 foo
,它只有一个提交,与 abc123
有相同的文件。然后就可以删除旧的分支了。
git branch -D <old_branch>
但如果您可能后悔,请保留旧分支,直到您确定不再需要它为止。
如果您的工作目录中有您需要的所有文件,您只需删除当前 git 存储库并创建一个新存储库:
rm -rf .git
git init
git add .
git commit -m "initial commit"
如果你想保持 reflog 不变,你还可以做的是使用 reset 作为一种廉价的变基方式。找出初始提交的哈希值,重置 --mixed 到它,将所有更改保留在工作目录中,然后提交 --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"