我遇到的问题是我的手指会自动键入git push origin master
. 如果我正在工作new-branch
并且打算输入git push origin new-branch
并且有未推送的更改,master
它们将被意外推送。有什么方法可以防止这种情况,以便我只能推入和推出当前分支?
6 回答
git push
如果没有给出 refspec,push.default
您可以使用git-config
. 根据您的情况提供三种模式:
,和模式适用于那些想要在完成工作后推出单个分支的人
simple
,即使其他分支尚未准备好推出。current
upstream
请注意,此设置仅在没有给出 refspec 时生效,即在git push
没有进一步参数的情况下运行。git push origin master
仍然会推master
到origin
.
根据经验,您应该始终创建单独的工作分支,并且永远不要将中间结果提交到您的主分支。git flow
简化了这个工作流程。
从文档中:
push.default
定义
git push
如果在命令行上没有给出 refspec,在远程没有配置 refspec,并且命令行上给出的任何选项都没有暗示 refspec 时应该采取的操作。可能的值为:
nothing
- 不要推任何东西。
matching
- 将所有具有相同名称的分支推入两端。这适用于那些将所有分支准备成可发布的形状,然后用一个命令将它们推出的人。它不适合推送到由多个用户共享的存储库,因为如果其他用户更新了分支,本地停滞的分支将尝试非快进推送。+ 这是目前的默认值,但 Git 2.0 会将默认值更改为simple
.
upstream
- 将当前分支推送到其上游分支(tracking
这是不推荐使用的同义词)。这样,将更新与由、making和symmetricgit push
合并的远程引用相同的远程引用。有关如何配置上游分支的信息,请参阅“branch..merge”。git pull
push
pull
simple
-likeupstream
,但如果上游分支的名称与本地分支不同,则拒绝推送。这是最安全的选择,非常适合初学者。它将成为 Git 2.0 中的默认设置。
current
- 将当前分支推送到同名分支。
您想将 git 升级到 1.7.11 或更高版本,并使用“简单”push.default:
o simple - like upstream, but refuses to push if the upstream branch's name is different from the local one. This is the safest option and is
well-suited for beginners. It will become the default in Git 2.0.
这将准确地防止您的问题。请注意,它也将成为 Git 2.0 中的默认选项。您可以通过以下方式启用它:
git config push.default simple
您可以创建一个别名,例如gitpushcurrent
,指向git push origin $(git branch | grep "*" | sed "s/* //")
.
然后重新训练您的手指以自动键入gitpushcurrent
而不是git push origin master
. 因此,您无需考虑当前分支是什么。
git -g config push.default 当前
这个问题与“确认 git push 命令”非常相似
而且,我也将在这里提出相同的解决方案。
您所需要的只是将提交预挂钩到受保护的分支(如“master”)中。
这个关于“如何防止推送到大师”的博客应该可以帮助你。
PS:需要 GIT 版本 1.8.2 或更高版本。