git - 如何测试是否允许强制推送?

标签 git git-rebase

如果我想编辑已经推送到远程的过去的提交,我如何测试是否允许我在不实际更改任何内容的情况下强制推送?

要编辑过去的提交,我通常使用 git rebase -i HEAD~N 然后将 pick 更改为 edit 我想做的地方变化。 如果我这样做并且后来意识到我不允许强制推送,我需要重置我的工作区(我想避免这种情况,因为我对提交所做的更改将会丢失)。

我知道对已经推送的提交执行此操作可能是不好的做法。

有没有办法在我实际进行 rebase 之前对此进行测试?

最佳答案

唯一完全可靠的测试你是否有权做 X(对于一些任意的 X,通常甚至与 Git 无关)是尝试做 < em>X 看看是否成功。 “测试是否允许X,然后执行X”的根本问题是答案可能会在测试和尝试之间发生变化。 (一些系统确实可靠地支持请求权限优先,但大多数系统不支持:大多数系统给你的答案在你得到它时就过期了。)

就是说,Git 的强制推送权限是由 other Git 决定的,除了试一试之外别无他法!最接近询问另一个 Git 的方法是询问另一个系统关于它的 Git,以某种其他系统特定的方式。最好的办法可能是创建一个临时分支,强制推送到它,然后删除它。如果强制推送步骤成功,那么您就知道您至少有权在那一刻强制推送到那个分支。

由于像 GitHub 这样的常见主机站点允许管理员“锁定”或“保护”某些特定分支。这是如何工作的,以及谁拥有什么权限的细节取决于那些托管站点。 Here is the GitHub page on their branch restriction options.

关于git - 如何测试是否允许强制推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943862/

相关文章:

大重构后的 git rebase

git - 在 GIT 中重做错误的 merge

git - 更改根提交父项以指向另一个提交(连接两个独立的 git 存储库)

git - 如何同步两个远程 Git 存储库?

eclipse - Egit "Revert Commit"是否永久删除原始提交?

git - 如何撤消 "git rm -r -f * "

windows - 安装包后找不到 Git Bash 命令

git 推送失败 : Failed with error: ssh variant 'simple' does not support setting port

git merge 和 rebase : Do they only affect the currently checked out branch?

git - 为什么我们的 Git 存储库中缺少代码,可以通过 rebase 解决吗?