在我的项目中,我有两次提交; A,然后是B,两者都被推到了遥控器上。
但是我意识到我在提交B中的更改是一个坏主意,并使用git checkout A
恢复为提交A.
然后我做了一些更改来提交A,进行提交C,这就是我想要将其作为最新提交推送到我的远程。但是,当我这样做时,它只会将A和C之间的差异推到当前版本的遥控器上,即B;换句话说,它应用提交C来提交B.
如何将本地副本作为 new 提交到远程控制器上,以便提交历史记录如下:A,B,C(即没有恢复B - 我仍然想要B在我的提交历史)
答案 0 :(得分:1)
如果您不想重写历史记录,则只需为提交B提交一个还原:
git revert B
git commit
答案 1 :(得分:1)
您可以创建一个包含A和C之间差异的补丁,并将其应用于B之上以创建全新的提交,如下所示:
git diff A C > patch.git
git checkout B
...
此时请确保您的工作目录是干净的。
git apply patch.git
...
上面的命令只会更改工作目录。因此,您需要自己添加文件。
git add ...
git commit
答案 2 :(得分:0)
您可以使用交互式rebase ,它允许您随机提交顺序。通过运行git rebase -i HEAD^^^
,您可以返回最后三次提交;您将获得一个带有哈希提交的文件。只需通过向上/向下移动线条来编辑文件,然后按照所需的顺序排列它们,然后保存文件,git将按顺序应用这些更改。