从master创建分支后,未设置上游如何执行git push?
这问题我日常用Git时碰到过好几次,其实核心在于Git的推送配置和手动指定推送目标两种玩法,下面给你讲得明明白白:
为什么你能push但没跟踪远程分支?
你之前用git push成功推送了general分支,但git branch -vv没显示跟踪关系,是因为你的Git配置里push.default可能设成了current或者matching(不过现在默认更多是simple,但如果是current的话就会允许这种操作)。这个配置会让Git自动把当前本地分支推送到远程仓库的同名分支,但不会自动建立本地分支和远程分支的跟踪关联——跟踪关系必须通过-u参数来触发设置。
两种未设置上游时的Push方法
1. 手动指定远程和分支(最直观的临时操作)
如果你只是临时推一次未关联上游的分支,直接在push命令里明确指定远程仓库和分支对应关系就行:
git push <远程仓库名> <本地分支名>:<远程分支名>
比如你的场景里,远程仓库是默认的origin,分支都是general,那命令就是:
git push origin general:general
这样Git就会把本地general分支的内容推送到远程origin/general分支,全程不会设置上游跟踪。
2. 修改Git配置实现简化推送(适合长期习惯)
如果你经常需要推送未设置上游的分支,不想每次都打长命令,可以修改push.default的配置为current:
# 全局生效(所有仓库都适用) git config --global push.default current # 仅当前仓库生效 git config push.default current
设置之后,只要你在本地分支上执行git push,Git就会自动把当前分支推送到远程的同名分支,而且同样不会建立跟踪关系——这就是你之前操作成功的原因。
补充:什么时候需要设置上游?
如果之后你想通过git pull自动拉取对应远程分支的内容,或者让git status显示本地分支和远程分支的差异,那才需要用git push -u origin general或者git branch -u origin/general来建立跟踪关联。如果只是单纯推送代码,上面两种方法完全够用。
内容的提问来源于stack exchange,提问作者Unknown developer

