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

时间:2018-09-13 00:49:03

标签: git branch rebase git-commit squash

我已经弄乱了树枝。

我一直在摔键,已经合并/拉扯/挤压,我不知道还有什么。

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

我想保留我的工作位置,但是我不希望有10个提交历史记录。

由于冲突,我再也无法压扁提交了,只是一团糟。

压扁不再是一种选择,因为git rebase-i HEAD〜2我在某个时候已经完成了合并,但是不能这样做-因为在重新设置中间,由于某些原因我的更改无法应用如何通过挤压落后于遥控器-我一定做错了。

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

做到这一点的最佳方法是什么? 还可以请您像我五岁那样解释解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果提交的文件内容正确,则可以从中创建一个新分支。假设提交哈希为abc123,新分支为foo

git checkout --orphan foo abc123
git commit

现在您拥有foo,并且只有一次提交,该提交与abc123具有相同的文件。然后您可以删除旧分支。

git branch -D <old_branch>

但是如果您可能后悔,只需保留旧分支,直到确定您不再想要它为止。

答案 1 :(得分: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"