【发布时间】:2012-08-13 18:52:00
【问题描述】:
我遇到的问题是我的手指会自动输入git push origin master。如果我正在处理new-branch 并且打算输入git push origin new-branch 并且master 上有未推送的更改,它们将被意外推送。有什么方法可以防止这种情况,让我只能推送到当前分支吗?
【问题讨论】:
标签: git
我遇到的问题是我的手指会自动输入git push origin master。如果我正在处理new-branch 并且打算输入git push origin new-branch 并且master 上有未推送的更改,它们将被意外推送。有什么方法可以防止这种情况,让我只能推送到当前分支吗?
【问题讨论】:
标签: git
您可以使用git-config 中的push.default 设置指定git push 在没有给出参考规范的情况下做什么。三种模式适合您的情况:
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是已弃用的同义词)。这样,git push将更新与git pull合并的远程引用相同的远程引用,使push和pull对称。上游分支的配置方法见“branch..merge”。
simple- 类似于upstream,但如果上游分支的名称与本地分支不同,则拒绝推送。这是最安全的选择,非常适合初学者。它将成为 Git 2.0 中的默认设置。
current- 将当前分支推送到同名分支。
【讨论】:
git push 的行为不感兴趣,您可以为所有分支设置上游分支并使用git push HEAD 推送当前签出的分支。跨度>
HEAD 在其他地方。
您想将 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
【讨论】:
git push origin master还是推master->master而不是什么都不做。
git push 并让它在跟踪远程分支的分支上正常工作.
mygitpush remote branch,但禁止推送到非活动分支,然后隐藏git push。我喜欢被强迫直言不讳,否则我会搞砸的。
您可以创建一个别名,例如,gitpushcurrent,指向git push origin $(git branch | grep "*" | sed "s/* //")。
然后重新训练您的手指以自动键入 gitpushcurrent 而不是 git push origin master。因此您无需考虑当前分支是什么。
【讨论】:
git -g config push.default 当前
【讨论】:
这个问题和“Confirmation of git push command”很相似
而且,我也将在这里提出same solution。
您所需要的只是提交到“master”等受保护分支的预挂钩。
"how-to-prevent-push-to-master" 上的这个博客应该对您有所帮助。
PS:需要 GIT 1.8.2 或更高版本。
【讨论】: