Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 撤消一些合并/提交,但保留一些_Git_Git Revert_Git Cherry Pick - Fatal编程技术网

Git 撤消一些合并/提交,但保留一些

Git 撤消一些合并/提交,但保留一些,git,git-revert,git-cherry-pick,Git,Git Revert,Git Cherry Pick,我有一个错误的合并,然后是几个好的提交。我试图恢复错误的合并,但是我不想丢失这些更改,也就是说,我不想进一步提交,这会撤消更改,我只是不希望它们出现在我的分支中 因此,我的日志如下所示: 7975c057 | Reverts bad merge 40a01d2f | Good commit 3b2c3825 | Good commit 1f3f1858 | Bad merge - code shouldnt be in this branch 37f71a89 | Good commit ...

我有一个错误的合并,然后是几个好的提交。我试图恢复错误的合并,但是我不想丢失这些更改,也就是说,我不想进一步提交,这会撤消更改,我只是不希望它们出现在我的分支中

因此,我的日志如下所示:

7975c057 | Reverts bad merge
40a01d2f | Good commit
3b2c3825 | Good commit
1f3f1858 | Bad merge - code shouldnt be in this branch
37f71a89 | Good commit
... (more good commits...)

如何从我的分支中删除1f3f1858 |坏合并和7975c057 |还原坏合并?

还原合并提交很棘手,因为合并有两个父级,并且只能遵循一个父级的路径。如果使用交互式重基,通常必须完全重做合并。出于这个原因,我可以建议以下策略:

git checkout -b good_branch 37f71a89    # create new branch from 37f71a89
git cherry-pick 3b2c3825                # cherry-pick first good commit
git cherry-pick 40a01d2f                # cherry-pick second good commit

这将为您留下您想要的分支结构,尽管这两个好的提交实际上会有新的SHA-1哈希值,因为cherry picking总是创建一个新的提交,尽管提交在功能上与原始提交完全相同。

当尝试应用最后一个好的提交时,我得到一个错误;无法应用提交40a01d2f。提示:解决冲突后,使用“git add”或“git rm”标记更正的路径,并使用“git commit”提交结果。你知道为什么,或者如何解决这个问题吗?thanks@Klicker事实上,提交被应用。只是因为存在合并冲突,所以没有进行正式提交。只需解决冲突,然后手动执行git提交。键入git status以查看哪些文件存在冲突。然后,解决冲突,git添加这些文件。从这个commit 37f71a89签出一个新的分支,似乎会丢失在此之前的一些提交。应该发生吗?不,不应该发生。啊,好的commit 37f71a89实际上是一个合并,这大概就是原因。我所做的是在此之前从提交中签出、重新合并并重新应用所需的提交。谢谢你的帮助