撤消 Git 中已推送到远程仓库的特定提交

问:

撤消特定提交的最简单方法是:

不在头部或头部

已被推送到远程。

因为如果不是最新的提交,

git reset HEAD

不起作用。而且因为它已经被推送到远程,

git rebase -i

git rebase --onto

会导致遥控器出现一些问题。

更何况,我真的不想修改历史。如果有错误的代码,它就存在于历史中并且可以看到。我只是想把它放在工作副本中,我不介意反向合并提交。

换句话说,以下 svn 命令的 Git 等价物是什么:

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

它通过反向合并这些修订中的所有更改作为新提交来删除从 295 到 302 的所有更改。

svn merge -c -302 ^/trunk

这会撤消 302 提交,当然是通过添加另一个提交来反向合并来自相应提交的更改。

我认为这应该是 Git 中一个相当简单的操作和一个相当常见的用例。原子提交还有什么意义?

我们有 staging stashing 和所有以确保提交是完全原子的,您不应该能够轻松撤消这些原子提交中的一个或多个吗?

答1:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

使用 git log 确定提交的哈希,然后使用 git revert 创建删除这些更改的新提交。在某种程度上,git revert 是 git cherry-pick 的反面——后者将补丁应用于缺少它的分支,前者将其从拥有它的分支中删除。

如果您想要返回代码,请使用 -n 开关,但不会再次自动提交

“m”选项有什么作用?我尝试了 git revert 8213f7d 但得到了这个:错误:提交 8213f7dad1ed546b434a0d8a64cb783b530a5a30 是一个合并,但没有给出 -m 选项。致命:还原失败

恢复合并: git revert -m 1

对任何想要恢复合并的人的警告: git revert 将撤消所有数据更改(即,文件更改将被恢复),但合并仍保留在历史记录中。因此,如果您稍后尝试再次合并相同的分支,它将不包括在恢复合并之前来自合并分支的任何提交。这很可能不是您想要的。为了再次完全合并分支,您需要首先恢复您恢复原始合并的提交。在此处了解更多信息:kernel.mirrors.pair.com/pub/software/scm/git/docs/howto/…

@etreworgy 评论中的链接是 404。我怀疑这是该链接的最新版本:kernel.org/pub/software/scm/git/docs/howto/…

答2:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

我不喜欢 git revert 所做的自动提交,因此这可能对某些人有所帮助。

如果您只想修改文件而不是自动提交,您可以使用 --no-commit

% git revert --no-commit 

这与 -n 相同

% git revert -n 

如果您已经在没有 -n 的情况下恢复,您也可以执行 git reset HEAD~1 --soft

但是 git reset HEAD~n 不会解决任何无法从头部连续到达的提交的撤消问题。查询是恢复任何特定的提交。

我使用了这个解决方案,但在还原过程中遇到了冲突。解决冲突后,我按照它的指示执行了git revert --continue。它奏效了,但遗憾的是承诺了结果。也许我需要做git revert --no-commit --continue。

@sangeethkumarp Daniel 的评论是您可以在 git revert 之后采取的额外步骤,如果您忘记了 -n;因为此时最后一次提交是还原,所以软重置将撤消该提交,但不会撤消还原的相关代码更改

@Daniel 通过评论工作为我提供了解决方案,非常感谢 ''git reset HEAD~1 --soft''

答3:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

因为它已经被推送了,所以你不应该直接操纵历史。 git revert 将使用新提交恢复来自提交的特定更改,以免操纵提交历史。

答4:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

如果您要恢复的提交是合并提交(已经合并),那么您应该选择 -m 1 或 -m 2 选项,如下所示。这将使 git 知道要使用合并提交的哪个父提交。更多详细信息,请参见HERE。

git revert <提交> -m 1

git revert <提交> -m 2

原文链接:https://www.huntsbot.com/qa/jmEm/undo-a-particular-commit-in-git-thats-been-pushed-to-remote-repos?lang=zh_CN&from=csdn

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

你可能感兴趣的:(git,github,svn,c++)