fork上游仓库后git checkout与git checkout -B操作差异咨询
Git分支操作相关问题解答
1. git fetch upstream model-package的作用
你理解的基本正确,该命令会仅拉取上游仓库(upstream)的model-package分支的更新数据,存储到你本地的远程跟踪分支upstream/model-package中。
注意拉取的内容不会直接修改你的工作区,也不会改动你已有的本地普通分支,只会更新本地存储的上游分支状态快照。
2. 后续执行git checkout model-package的行为
该操作的结果取决于你本地是否已经存在同名的普通分支:
- 如果你本地已存在model-package分支:会直接切换到该本地分支,不会自动和任何远程分支(包括origin、upstream的model-package)同步,分支状态和你上次操作该本地分支时完全一致。
- 如果你本地不存在model-package分支:Git会自动检索所有已配置的远程仓库下的同名分支:
- 仅存在一个匹配的远程分支时,会自动创建同名本地分支,设置该分支的跟踪上游为对应的远程分支,此时切过去的分支状态和对应远程分支完全一致。
- 存在多个匹配的远程分支(比如origin和upstream都有model-package分支)时,Git会报错,要求你明确指定要跟踪的远程源。
3. git checkout -B model-package upstream/model-package的作用
该命令确实会生成一个和upstream/model-package完全同步的本地model-package分支,关于覆盖规则:
- 如果本地不存在model-package分支:效果和
git checkout -b model-package upstream/model-package一致,直接新建对应分支并切换,无覆盖行为。 - 如果本地已存在model-package分支:会强制重置该本地分支的提交指针,完全和
upstream/model-package对齐,该本地分支此前未同步到上游的所有提交都会被覆盖,等价于先删除旧的model-package分支,再基于upstream/model-package新建同名分支的效果。
注意:如果你操作时工作区有未提交的修改,且修改内容和切换后的分支文件有冲突,Git会报错提示你先处理修改,不会强制覆盖工作区的未提交内容。
内容的提问来源于stack exchange,提问作者Ziv
相关产品推荐
相关产品推荐

