撤消Git中的特定提交,该提交为';它被推到远程回购
撤消特定提交的最简单方法是:撤消Git中的特定提交,该提交为';它被推到远程回购,git,version-control,git-reset,git-revert,Git,Version Control,Git Reset,Git Revert,撤消特定提交的最简单方法是: 不在头部或头部 已推送到远程 因为如果这不是最新的承诺 git reset HEAD 不起作用。因为它被推到了一个遥控器上 git rebase -i 及 将导致遥控器出现一些问题 更重要的是,我不想修改历史记录。如果有不好的代码,它就存在于历史中,并且可以被看到。我只希望它在工作副本中输出,我不介意反向合并提交 换句话说,以下svn命令的等效项是什么: svn merge -r 303:295 http://svn.example.com/repos/ca
- 不在头部或头部
- 已推送到远程
git reset HEAD
不起作用。因为它被推到了一个遥控器上
git rebase -i
及
将导致遥控器出现一些问题
更重要的是,我不想修改历史记录。如果有不好的代码,它就存在于历史中,并且可以被看到。我只希望它在工作副本中输出,我不介意反向合并提交
换句话说,以下svn命令的等效项是什么:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
它通过将这些修订中的所有更改作为新提交进行反向合并,从而删除从295到302的所有更改
svn merge -c -302 ^/trunk
这会撤消302提交,当然是通过添加另一个提交来反向合并来自相应提交的更改
我认为它在Git中应该是一个相当简单的操作,也是一个相当常见的用例。原子提交还有什么意义
为了确保提交是完全原子化的,我们提供了暂存和所有功能,难道您不应该轻松撤消一个或多个原子提交吗?因为它已经被推送,所以您不应该直接操纵历史记录
git revert
将使用新提交还原来自提交的特定更改,以便不操纵提交历史记录。使用git log
标识提交的哈希,然后使用git revert
创建删除这些更改的新提交。在某种程度上,git revert
与git cherry pick
相反——后者将补丁应用于缺少它的分支,前者将它从拥有它的分支中删除。我不喜欢git revert
所做的自动提交,因此这可能对某些人有所帮助
如果只需要修改的文件而不需要自动提交,可以使用--无提交
% git revert --no-commit <commit hash>
如果要还原的提交是合并的提交(已合并),则应选择
-m1
或-m2
选项,如下所示。这将让git知道要使用合并提交的哪个父提交。可以找到更多细节
git revert-m1
git还原-m2
-n
的情况下恢复了,您也可以执行git reset HEAD~1--soft
,但是git reset HEAD~n
无法解决任何无法从头部连续访问的提交的撤消问题。查询是回复任何特定的提交。我使用了这个解决方案,但是在回复的中间遇到了冲突。解决冲突后,我按照它的指示执行了git revert--continue。它起了作用,但不幸的是,它带来了结果。也许我需要做git revert--no commit--continue
@sangeethkumarp如果你忘记了-n
,Daniel的评论是在git revert
之后你可以采取的额外步骤;因为在这一点上,最后一次提交是恢复,所以软重置将撤消该提交,但不会撤消revert@Daniel通过评论为我提供解决方案,感谢“git重置头~1--软”
% git revert --no-commit <commit hash>
% git revert -n <commit hash>