我遇到的问题是我的手指会自动输入git push origin master。如果我使用的是new-branch,而我的意思是输入git push origin new-branch,而master上有未推送的更改,那么这些更改将被意外推送。有没有什么方法可以防止这种情况,使我只能推送到当前分支和从当前分支推送?
发布于 2012-08-17 18:19:00
您可以创建一个指向git push origin $(git branch | grep "*" | sed "s/* //")的别名,比方说,gitpushcurrent。
然后重新训练你的手指,让它自动输入gitpushcurrent而不是git push origin master。因此,您不需要考虑当前分支是什么。
发布于 2012-08-17 18:22:49
您可以使用git push中的push.default设置指定在未提供refspec时git-config执行的操作。根据您的情况,有三种模式:
simple,current和upstream模式适用于那些想要在完成工作后推出单个分支的人,即使其他分支还没有准备好推出。
请注意,此设置仅在未提供refspec时生效,即运行git push而不使用其他参数。git push origin master仍然会将master推送到origin。
根据经验,您应该始终创建单独的工作分支,并且永远不要将中间结果提交给您的主分支。git flow简化了此工作流程。
从documentation
push.default
定义在以下情况下git push应执行的操作:在命令行上未指定refspec,在远程服务器中未配置refspec,并且命令行上给定的任何选项均未隐含refspec。可能的值包括:
nothing -不推送anything.matching -推送两端具有相同名称的所有分支。这是为那些准备好所有分支到一个可发布的形状,然后用一个命令推出它们的人准备的。它不适合推送到由多个用户共享的存储库,因为如果其他用户更新了分支,则本地停止的分支将尝试非快进推送。+这是当前的默认设置,但是Git2.0会将默认设置更改为simple.upstream -将当前分支推送到其上游分支(tracking是此选项的一个已弃用的同义词)。这样,git push将更新与git pull合并的远程ref相同的ref,使push和pull对称。配置上游类似branch.simple的upstream请参考branch..merge,但如果上游分支名称与本地分支名称不一致,则会拒绝推送。这是最安全的选择,非常适合初学者。这将成为Git 2.0.current的默认设置--将当前分支推送到同名分支。发布于 2012-08-17 20:31:25
您希望将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.这将准确地防止您的问题。请注意,它也将成为Git2.0的默认选项。您可以使用以下命令来启用它:
git config push.default simplehttps://stackoverflow.com/questions/12003826
复制相似问题