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仓库的工作目录,但是master
和origin/master
仍然指向提交 D
.
A---B---C---D master, origin/master
如果你想清理工作目录,你可以使用git revert --abort
.
假设有一个 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仓库的工作目录,但是master
和origin/master
仍然指向提交D
.A---B---C---D master, origin/master
如果你想清理工作目录,你可以使用
git revert --abort
.