9

我遇到的问题是我的手指会自动键入git push origin master. 如果我正在工作new-branch并且打算输入git push origin new-branch并且有未推送的更改,master它们将被意外推送。有什么方法可以防止这种情况,以便我只能推入和推出当前分支?

4

6 回答 6

18

git push如果没有给出 refspec,push.default您可以使用git-config. 根据您的情况提供三种模式:

,和模式适用于那些想要在完成工作后推出单个分支的人simple,即使其他分支尚未准备好推出。currentupstream

请注意,此设置仅在没有给出 refspec 时生效,即在git push没有进一步参数的情况下运行。git push origin master仍然会推masterorigin.

根据经验,您应该始终创建单独的工作分支,并且永远不要将中间结果提交到您的主分支。git flow简化了这个工作流程。

文档中:

push.default

定义git push如果在命令行上没有给出 refspec,在远程没有配置 refspec,并且命令行上给出的任何选项都没有暗示 refspec 时应该采取的操作。可能的值为:

  • nothing- 不要推任何东西。

  • matching- 将所有具有相同名称的分支推入两端。这适用于那些将所有分支准备成可发布的形状,然后用一个命令将它们推出的人。它不适合推送到由多个用户共享的存储库,因为如果其他用户更新了分支,本地停滞的分支将尝试非快进推送。+ 这是目前的默认值,但 Git 2.0 会将默认值更改为simple.

  • upstream- 将当前分支推送到其上游分支(tracking这是不推荐使用的同义词)。这样,将更新与由、making和symmetricgit push合并的远程引用相同的远程引用。有关如何配置上游分支的信息,请参阅“branch..merge”。git pullpushpull

  • simple-like upstream,但如果上游分支的名称与本地分支不同,则拒绝推送。这是最安全的选择,非常适合初学者。它将成为 Git 2.0 中的默认设置。

  • current- 将当前分支推送到同名分支。

于 2012-08-17T10:22:49.287 回答
9

您想将 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
于 2012-08-17T12:31:24.617 回答
5

您可以创建一个别名,例如gitpushcurrent,指向git push origin $(git branch | grep "*" | sed "s/* //").

然后重新训练您的手指以自动键入gitpushcurrent而不是git push origin master. 因此,您无需考虑当前分支是什么。

于 2012-08-17T10:18:59.793 回答
1

我用了几天的 Git,但是,顺便说一下,你可以:

  1. 注意你用键盘输入的内容。Git 功能强大,而且,如果您的手指训练有素,可以自动输入任何内容,您可能会造成很大的损失,例如删除您的工作分支,或者在您不想要的时候合并分支。始终要小心。

  2. 为您的命令使用别名。它们非常强大,可以节省您的时间,防止您制作您并不真正想要的东西。

  3. 阅读一些有趣且有用的主题,例如这个SO question 或这个关于 ServerFault 的问题。

于 2012-08-17T10:42:17.703 回答
0

git -g config push.default 当前

于 2014-03-21T19:06:31.720 回答
0

这个问题与“确认 git push 命令”非常相似

而且,我也将在这里提出相同的解决方案。

您所需要的只是将提交预挂钩到受保护的分支(如“master”)中。

这个关于“如何防止推送到大师”的博客应该可以帮助你。

PS:需要 GIT 版本 1.8.2 或更高版本。

于 2014-10-02T20:02:21.883 回答