在Git上,假设我搞砸了我的提交,我想让版本3提交之前作为新版本。如果我签出xxxx,它创建了一个新的分支,似乎我只能合并它?我能把这个做成新的“主版本”吗?
我想要:
A-B-C-D-E
成为
A-B-C-D-E-F
F和C的含量完全相同
如果我使用git revert xxxx代替,它似乎肯定会有冲突,我需要手动解决它。
我真正想要的是在某个时候将旧的提交变成新的提交,不管我的工作目录或最新的提交中有什么。
我该怎么做呢?
在Git上,假设我搞砸了我的提交,我想让版本3提交之前作为新版本。如果我签出xxxx,它创建了一个新的分支,似乎我只能合并它?我能把这个做成新的“主版本”吗?
我想要:
A-B-C-D-E
成为
A-B-C-D-E-F
F和C的含量完全相同
如果我使用git revert xxxx代替,它似乎肯定会有冲突,我需要手动解决它。
我真正想要的是在某个时候将旧的提交变成新的提交,不管我的工作目录或最新的提交中有什么。
我该怎么做呢?
当前回答
选C
这里C是C的提交散列,这将旧的提交应用到最新的提交之上。
其他回答
到目前为止,其他答案创建新的提交,撤销旧提交中的内容。我们有可能回到过去“改变历史”,但这可能有点危险。只有在您要更改的提交没有推送到其他存储库时才应该这样做。
你要找的命令是git rebase——interactive
如果你想改变HEAD~3,你想发出的命令是git rebase——interactive HEAD~4。这将打开一个文本编辑器,并允许您指定要更改哪些提交。
在对重要的内容进行尝试之前,请在不同的存储库上进行练习。手册页应该为您提供所需的所有其余信息。
艾洛妮一份一份地
git checkout <commit-hash> <filename>
但是您可以通过这样做更容易地签出所有文件
git checkout <commit-hash> .
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相同,如果你想,你可以把它们压缩在一起
选C
这里C是C的提交散列,这将旧的提交应用到最新的提交之上。