git push -u 初见感悟

311 阅读2分钟

问题出现的场景:

为了修复生产问题,需要从master上拉取hotfix分支进行修复后并提交的该分支上,后续等待上线时进行代码合并。当前为master分支上创建新分支的语句:

git checkout -b hotfix/text origin/master

当修改好代码后进行提交git push时发现,代码直接提交到了master分支上,此时翻阅了git提交文档时发现,需要用git push -u origin text进行提交,此时对git push -u产生了疑惑。以下是通过不同方式创建分支时的不同情形:

方法一

git checkout -b feature/test

  1. 这种方式创建的新分支没有关联到远端分支,即依据当前的分支创建的本地独立test分支;
  2. git pull时,会有产生下面的提示

image.png

基础知识理解

新建分支常用方法
// 方法一、这种创建的分支是没有关联到远端分支,即依据当前的分支创建的本地独立test分支
git checkout -b feature test

// 方法二、下面这种创建方式会直接关联到对应的’origin master‘分支上,
// 即在操作git pull时会从origin master分支上拉取代码,而上面一种方式则会报未存在关联的远端分支,无法拉取代码
git checkout -b hotfix/test origin/master
git pull

理解了创建分支的不同,那么来看看不同的创建方式,对应的拉取方式如何变化。

理解了上面两种创建方式,下面我们要引出提交代码的 git push -u了。

代码提交方式(git push)
  1. git push(后未加任何参数)
  • 当首次创建分支但未关联任何远端分支是(即方法一创建分支的方式),此时git push会提示"未存在关联的远端分支"并且提交失败。
  • 默认只推送当前分支,这叫做simple方式。
  1. git push -u origin test
  • 这种方法更通用,当远端没有 test 分支时,会自动创建一个 origin test 分支,然后进行关联;
  1. git push --set-upstream-to=origin/
  • 这个方法跟 git push -u 则不同,当远端没有对应的分支时,则无法进行关联。

通过 git push 的方法即可与远端进行关联了,后续即可使用简写方式 git pull/push 直接进行操作了。