我有一种情况,我不了解内部发生的更新。
我有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
创建的分支受到影响,而不是其他分支!为什么会这样?
答案 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
执行三个作业:
git fetch
,git pull
,git push
它将针对远程 origin / dev 分支进行更新。如果没有最后一个arg,每次git fetch
,git pull
,git push
即git pull origin dev
时,您需要指定远程和分支例如,用远程开发站更新本地分支。因此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 --all
或git remote update
,这是等效的。甚至是git push --all
。