请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于git切换分支的几个问题

由于Git基础有点薄弱,有些问题没弄清楚,可能问得有点小白,但还是想问下:

1. git checkout -b v2.0 origin/v1.0  是不是基于远程分支v1.0的基础上创建分支v2.0,并切换过去?

2. 假若单独的git checkout -b v2.0 是不是就是在当前所在的本地分支的基础上创建v2.0,并切换过去?

3. 若是这样的话,若本地没有远程v1.0分支的代码,git checkout -b v2.0 origin/v1.0 这命令是不是现在本地创建V2.0分支,再对远程仓库分支v1.0里的代码进行一次拉取?

4. 假若我在本地拉取一个项目的V1.0分支上的代码,现在我想拉取这项目另一个分支的代码,老师你们一般是怎么操作的?

正在回答

3回答

你好,同学


  1. 是的

  2. 是的,如果不指定的话,就是当前的本地分支版本

  3. 首先origin就指定了是远程分支哟,所以判断的是远程分支,不是本地分支。不会拉取

  4. 重新创建一个文件夹,重新clone,然后切换分支。

0 回复 有任何疑惑可以回复我~
  • 提问者 Echo鑫 #1
    对于第三点,还是有点没弄明白,既然我指定的是远程分支,我在没拉取V1.0版本代码的前提下,在本地新建一个分支v2.0,执行代码如下:
    git checkout -b v2.0 origin/v1.0 ,
    既然是基于远程分支V1.0上的代码前提下创建的V2.0分支,按理说,要么这命令有错,要么这应该会拉取或者同步远程分支V1.0上的代码啊。
    我做了个测试,先拉取了master分支,在master本地分支上执行上述命令,出现这命令:Branch v2.0 set up to track remote branch v1.0 from origin. 没出现什么拉取,但远程分支V1.0上与master的差异文件却同步到了本地V2.0上。
    回复 有任何疑惑可以回复我~ 2017-11-28 11:10:12
  • Geely 回复 提问者 Echo鑫 #2
    http://lishicongli.blog.163.com/blog/static/1468259020132125247302/
    同学你好,给你找了个blog,建议同学看一下课程推荐的免费git课程哟,在课程前面推荐的。
    
    没拉取是因为最开始创建的分支--->例如checkout -b创建的分支都是在本地的。
    
    同学,你能把你这一套操作来一套命令行截图 我看看么
    
     git checkout -b v2.0 origin/v1.0 基于远程分支,这个拉取对你是不可见的。但是拉取的就是远程的v1.0哟~
    回复 有任何疑惑可以回复我~ 2017-11-29 21:23:37
  • 提问者 Echo鑫 回复 Geely #3
    已传其他楼了,打扰老师了。
    回复 有任何疑惑可以回复我~ 2017-11-30 21:36:52
提问者 Echo鑫 2017-11-30 21:36:28

这是我对另一个master没代码的项目进行拉取,master就两个文件,先git clone, 自动切换到了master分支

https://img1.sycdn.imooc.com//szimg/5a20090a00017f7b07410577.jpg

从结果可以看出,证明了上述的观点,git checkout -b v2.0 origin/v1.0, 会对远程的代码进行拉取,但拉取过程不可见。

接下来我又换了种方式,执行 git checkout -b v2.0 origin mall_v1.0, 出现了错误。

https://img1.sycdn.imooc.com//szimg/5a2004d70001f0af07510536.jpg

于是我先在本地创建分支V2.0 然后 git pull origin mall_v1.0,也成功把V1.0 的代码拉到了本地新建分支v2.0上。

https://img1.sycdn.imooc.com//szimg/5a20043900015f8507220356.jpg

问题:

  1. 证明了我的理解,git checkout -b v2.0 origin/v1.0 会对远程代码进行拉取,但这个拉取是不可见的,跟git pull 有区别,但不知道为什么

  2. git checkout -b v2.0 origin/v1.0  与git checkout -b v2.0 origin v1.0 的区别是什么

  3. 为什么git 切换不同分支,代码也会同步发生变化,比如切到master上的代码是A,切回到分支v1.0后,代码就同步成了B,这是什么原理,另个分支的代码是存在哪里不可见的。


0 回复 有任何疑惑可以回复我~
  • Geely #1
    1. checkout -b 会创建本地分支,但是不会创建远程分支。git pull只是拉取 是 git fetch 和 git merge的组合
    2. 区别就是第二个是错误的命令。远程一定是origin/这样的
    3.不同的分支代码肯定会发生变化的。。
    
    http://blog.jobbole.com/26209/
    
    我特意给同学找了一下git的原理,同学来看看哟
    回复 有任何疑惑可以回复我~ 2017-12-02 00:06:08
提问者 Echo鑫 2017-11-30 21:14:07

https://img1.sycdn.imooc.com//szimg/5a2003860001136c08000682.jpg

这是我对master 先拉取,这项目master和v1.0的差别就在于init.sql文件,我正常先git clone这个代码,拉取到了master分支,然后就直接执行git checkout -b v2.0 origin/v1.0  这个sql文件自动同步下来了,没有拉取过程,换回master,则个文件就消失了,接下来我又对master上面没代码的项目做了个测试。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信