签出然后使用git编辑旧提交

时间:2015-07-06 16:15:59

标签: git svn

在我的项目中,我有两次提交; A,然后是B,两者都被推到了遥控器上。

但是我意识到我在提交B中的更改是一个坏主意,并使用git checkout A恢复为提交A.

然后我做了一些更改来提交A,进行提交C,这就是我想要将其作为最新提交推送到我的远程。但是,当我这样做时,它只会将A和C之间的差异推到当前版本的遥控器上,即B;换句话说,它应用提交C来提交B.

如何将本地副本作为 new 提交到远程控制器上,以便提交历史记录如下:A,B,C(即没有恢复B - 我仍然想要B在我的提交历史)

3 个答案:

答案 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将按顺序应用这些更改。