创建有或没有本地分支的区别' -b'

时间:2016-07-18 12:30:59

标签: git

我有一种情况,我不了解内部发生的更新。

我有2个远程分支:

master
dev

现在,我想从dev创建3个本地分支。

命令1:

git checkout dev

命令2:

git checkout -b "Us1DevBranch" origin/dev

命令3:

git checkout -b "Us2DevBranch" origin/dev

当我执行git branch命令时,

dev
Us1DevBranch
Us2DevBranch

方案: - 5天后,我挑选了一个分支Us1DevBranch并开始在这个分支中添加一些文件。在这5天中,我们假设对远程开发分支进行了5次修改,我想进行更新。

现在我做了git pull origin dev,它只影响了我的本地dev分支。其他两个分支Us1DevBranch & Us2DevBranch没有更新。

问题: -

1)我在文档和其他讨论论坛中读到的是,git pull在内部执行git fetch,然后git merge到从该分支创建的本地分支。但是为什么其他两个分支机构没有更新!

2)我的印象是,使用-b选项检出分支只是为了给分支机构提供不同的本地名称。其他一切都是一样的。但是还有更多的东西,就像我git pull时一样,只有选项git checkout dev创建的分支受到影响,而不是其他分支!为什么会这样?

3 个答案:

答案 0 :(得分:3)

1)当您创建新分支时,它与该时间点完全不同。您还必须手动更新所有这些分支。

2)如果你只是想给它一个不同的名字,并保持其他一切相同:

git branch -m newbranchname

答案 1 :(得分:2)

以下命令:

git checkout dev

只执行一个作业:它将您当前的分支更改为 dev ;它不会创建任何名为 dev 的分支!您可以执行git checkout dev,因为克隆您的远程分支有 dev 分支,因此您已在本地分支中拥有它。

BUT

git checkout -b "Us1DevBranch" origin/dev

执行三个作业:

  1. 它创建了一个名为 Us1DevBranch
  2. 的分支
  3. 它检出该分支(即将您当前的分支更改为新创建的 Us1DevBranch 分支
  4. 设置此本地分支以跟踪远程 origin / dev 分支(即每次您在此分支上并执行git fetchgit pullgit push它将针对远程 origin / dev 分支进行更新。如果没有最后一个arg,每次git fetchgit pullgit pushgit pull origin dev时,您需要指定远程分支例如,用远程开发站更新本地分支。
  5. 因此git checkout -b "Us1DevBranch"等于git branch "Us1DevBranch" + git checkout "Us1DevBranch",您的命令origin/dev的最后一个参数将为这个新创建的分支设置跟踪。

    最后,您可以通过以下方式手动设置现有分支的跟踪,例如 dev

    git branch -u origin/dev dev
    

    并且无需为 master 设置跟踪,因为它会自动设置为跟踪 origin / master 作为克隆的结果。

    您可以通过以下命令检查分支的跟踪信息(即我的本地分支跟踪哪个远程brach?):

    git branch -vv
    

答案 2 :(得分:1)

解决标题问题。传递给git checkout的'-b'选项是创建一个新分支。当您想要在一行中创建和签出新分支时使用它。

现在,如果您想要提取/拉取所有分支,可以使用git fetch --allgit remote update,这是等效的。甚至是git push --all