Git 仅在本地存储库中还原 public 提交

Git revert a public commit only in local repository

假设有一个 public 提交 "xxxx" 我 认为 导致了一个错误,我想在本地试验恢复该提交。

如果我从 git revert (1, 2) 的文档中理解正确,它会计算出还原目标提交 xxxx 所需的更改, 并将它们推送到 public 自动存储库。那是对的吗?这是我担心的最后一部分。

git revert xxxx 会还原 public 存储库中的 xxxx 吗?

如果是这样,有没有办法只在我的本地工作文件夹中执行此操作,这样我就可以构建 HEAD 的副本并还原该提交并对其进行试验,而不会影响其他开发人员?

我是否需要使用 --no-commit 选项:git revert xxxx --no-commit

或者还有其他方法吗?

谢谢。

与您显然读到或听到的相反,git revert 不会 将任何内容推送到远程存储库。它只是向您的 b运行ch 的 HEAD 添加一个(或更多)新提交,这在功能上撤消了提交或提交您传递的参数。如果你有一个提交 abcd1234 并且你 运行

git revert abcd1234

然后 Git 将向您的 b运行ch 添加一个新提交以撤消此提交。

一般来说,东西只会通过 git push 从您的本地 Git 传送到远程,所以只要您实际上不这样做,您就应该是安全的。

如果您非常谨慎,可以随时创建一个新的 b运行ch 并使用 git revert 测试其错误修复。顺便说一下,许多使用像 GitHub 这样的回购协议的人会配置关键的 b运行ches,作为安全预防措施,甚至不可能直接推送给他们。

不,它不会自动将还原提交推送到 public 回购。

git revert <commit> 只会在你的本地仓库中创建一个新的提交,git revert <commit> --no-commit 将工作目录更改为执行 git revert <commit> 后的目录,但实际上不会创建一个新的提交,你可以使用git revert --abort取消操作。

我们可以用图来说明:

假设 public 存储库和您的本地存储库首先在 master 分支上同步:

A---B---C---D   master, origin/master
  • 如果您想在本地回购中恢复提交 B 的更改。执行 git revert <commit id for B> 后,提交历史将是:

    A---B---C---D---B'   master
                |
           origin/master
    

    如您所见,已经创建了一个新的提交 B' 来恢复提交 B 的更改,而 origin/master 仍然指向提交 D。除非您执行 git push,否则 public 存储库将被更新。

  • 如果你执行git revert <commit id for B> --no-commit,它会改变git仓库的工作目录,但是masterorigin/master仍然指向提交 D.

    A---B---C---D   master, origin/master
    

    如果你想清理工作目录,你可以使用git revert --abort.