在Git上,假设我搞砸了我的提交,我想让版本3提交之前作为新版本。如果我签出xxxx,它创建了一个新的分支,似乎我只能合并它?我能把这个做成新的“主版本”吗?

我想要:

A-B-C-D-E

成为

A-B-C-D-E-F

F和C的含量完全相同

如果我使用git revert xxxx代替,它似乎肯定会有冲突,我需要手动解决它。

我真正想要的是在某个时候将旧的提交变成新的提交,不管我的工作目录或最新的提交中有什么。

我该怎么做呢?


当前回答

git rm -r .
git checkout HEAD~3 .
git commit

提交后,新HEAD中的文件将与修订HEAD~3中的文件相同。

其他回答

听起来你只是想重置到C;这就是做树:

a - b - c

你可以用reset来实现:

git reset --hard HEAD~3

(注:你说三次提交之前,所以这就是我写的;在你的例子中,C只是两次提交前,所以你可能想使用HEAD~2)


如果你想,你也可以使用revert,尽管据我所知,你需要一次做一个还原:

git revert HEAD     # Reverts E
git revert HEAD~2   # Reverts D

这将创建一个新的提交F,内容与D相同,G内容与c相同,如果你想,你可以把它们压缩在一起

git rm -r .
git checkout HEAD~3 .
git commit

提交后,新HEAD中的文件将与修订HEAD~3中的文件相同。

到目前为止,其他答案创建新的提交,撤销旧提交中的内容。我们有可能回到过去“改变历史”,但这可能有点危险。只有在您要更改的提交没有推送到其他存储库时才应该这样做。

你要找的命令是git rebase——interactive

如果你想改变HEAD~3,你想发出的命令是git rebase——interactive HEAD~4。这将打开一个文本编辑器,并允许您指定要更改哪些提交。

在对重要的内容进行尝试之前,请在不同的存储库上进行练习。手册页应该为您提供所需的所有其余信息。

选C

这里C是C的提交散列,这将旧的提交应用到最新的提交之上。

艾洛妮一份一份地

git checkout <commit-hash> <filename>

但是您可以通过这样做更容易地签出所有文件

git checkout <commit-hash> .