我承认标题有点挑衅。 当然,您需要推动更改。 我可能应该将其重命名为“不仅仅是git push”或“不要只是git push”。 但是我很喜欢clickbait标题。
我的意思是,您永远不要键入:
git push
这引起了一个问题,为什么? 回答这个问题是这篇文章的主题。
回归本源
如果您曾经与Git一起工作过,您就会知道git push
接受remote和branch作为参数, 例如 :
git push <remote> <branch>
一般来说:
-
<remote>
是origin
-
<branch>
是您当前正在处理的分支
git push origin master
当在同一分支上推送时,以上内容可以替换为:git push <origin> HEAD
优化击键
开发人员是懒惰的一群。 我当然会相信自己。一段时间之后,我们通常会尝试减少键入的键数。 为了做到这一点,我们在按下按钮时设置了遥控器 :
git push-u origin master
结果应类似于:
Branch 'master' set up to track remote branch 'master' from 'origin'.
这在项目的Git配置文件中也可见:
[branch "master"]
remote = origin
merge = refs/heads/master
这意味着本地master
分支跟踪远程origin/master
分支。 现在,只需在master
分支上键入git push
自动将其推送到origin/master
。
麻烦上升
一段时间后,我们可能会开始跟踪多个分支。 万物是世上最好的。 通常的工作流程如下:在特定分支上工作,发出请求请求,然后合并到master
。 但是,有朝一日,我们需要在重新推动之前重新设计本地分支机构。
git rebase-i <commit>
git push --force
到那时,我们注意到所有跟踪的分支都被立即推送 ! 用--force
!!!
我们回到第一个平方,发誓再也不要在没有参数的情况下进行推送。 但是,解决方案仍然可以实现。
为避免任何麻烦,请不要使用--force,而应使用--force-with-lease选项。 只是说。
推送默认值
让我们看一下文档:
在两端推送具有相同名称的所有分支。 这使您要推动的存储库记住将要推出的分支集( 例如,如果您始终将
maint
和master
推入那里,而没有其他分支,则要推入的存储库将具有这两个分支,以及本地的maint
和master
将被推到那里)。要有效地使用此模式,必须确保在运行
git push
之前已准备好将要推出的所有分支都git push
,因为此模式的要点是允许您一次推送所有分支。
https://git-scm.com/docs/git-config#git-config-pushdefault
幸运的是,有几个选项可以替代此默认设置。
推送选项
有几个选项:
选项 | 描述 | 笔记 |
---|---|---|
| Does not push anything if no branch is set | Default in Git 1.x |
| Pushes all branches having the same local and remote name | |
| Pushes the current branch to its upstream branch | |
| Like | |
| Pushes the current branch to a branch of the same name | Default in Git 2.x |
默认版本似乎取决于最初安装的版本,而不取决于运行时版本。 如果您在2.x之前开始使用Git-像我一样,默认情况下仍然可能匹配。
若要设置默认行为,请使用以下命令:
git config--global push.default simple
当然,然后可以在特定的Git项目上覆盖默认值:
git config push.default nothing
结论
如果不知道push.default
配置选项,则在不带任何参数的情况下键入git push
可能会导致问题。 调整这个非常小的参数可以在提高生产力和损坏存储库之间以及与团队之间的关系方面产生巨大差异。