如何配置git push

1. 背景介绍

有时我们在push代码时候,需要写很长一段命令,尤其在branch的名字非常长的时候,而且在团队合作的环境中,分支名都是自解释型的,名称通常都很长。当然在理解git原理的前提下,可以自己写shell脚本去读取当前分支名,将很长的一串命令缩短,配置一个简短的别名去调用脚本,也是可以的。这里介绍一种简单的通过配置git configuration方式达到使用git push将change推送到远程同名分支的方式。

2. git push介绍

git push默认行为是将本地所有与远程同名的分支推送到远程,这种默认行为往往不是我们期望的。为了能让用户这种行为,git为我们提供了push.default选项。这个选项有如下几个值:
nothing - 不要推任何东西.
matching - 推送所有匹配的分支。两端具有相同名称的所有分支都被认为是匹配的。这是默认设置。.
upstream - 将当前分支推送到其上游分支.
tracking - 已不推荐使用,是upstream的同义词.
current - 将当前分支推送到同名分支.
simple -(Git 1.7.11 新增,自 Git 2.0 起默认)类似于上游,但如果上游分支的名称与本地分支名称不同,则拒绝推送。

如果您想查询当前设置,可以执行以下操作。默认情况下,它将返回matching。

1
2
$ git config --global push.default
matching

如果我们要将其更改为仅推送当前分支,可以执行继续说:

1
git config --global push.default simple

说明:

  • 省略 –global 标志只会为当前存储库更改它。由于很难记住哪个项目哪个项目使用哪种默认行为方式,因此建议使用 –global选项将起设置为全局配置。

  • 无论您使用哪个选项,手动执行长命令 git push origin my-branch 以明确仅推送您当前的分支还是有效的,不会受到任何影响。

警告:

  • 对于我们大多数人来说,current是最安全的推动行为。但是,它有一个小的副作用:当远程上不存在具有你本地名称的分支时,它会自动在远程上创建它。虽然这通常是您想要的,但它不会在您的本地和远程分支之间设置跟踪。这意味着 git pull 将不起作用,并且当您的本地和远程分支不同时,Git pull得到任何提示信息。要在远程和设置跟踪上创建具有相同名称的分支,请使用 -u 选项:

    1
    git push -u
  • 如果您不小心创建了远程分支,但忘记设置跟踪,您也可以再次运行 git push -u 。如果您当前无法推送,请使用

    1
    2
    3
    git branch --set-upstream-to=origin/$(git rev-parse --abbrev-ref HEAD)
    #或者:for git 2.22 or above
    git branch --set-upstream-to=origin/$(git branch -show-current)

3. 参考文档

github docs

Git: How to configure git to push only your current branch