V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
bestsanmao
V2EX  ›  git

git 新手求教分支合并问题!

  •  
  •   bestsanmao · 2015-04-21 12:26:39 +08:00 · 3443 次点击
    这是一个创建于 3486 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情况是这样的
    以前不会用版本控制工具,于是备份就直接把当前代码目录zip一下
    有定制版需要做个分支的话就直接复制出一个文件夹,改个名字,然后在新文件夹中修改
    于是就有了Project、Project(A)、Project(B)这样的文件夹

    现在在学习git
    于是就在主版本目录也就是 Project文件夹里创建一个库
    此时如果又有需要定制的,我可以直接创建一个分支做为定制版
    但是我怎么把以前复制并修改过的Project(A)、Project(B)做为主版本Project的两个分支呢?

    16 条回复    2015-11-03 08:42:25 +08:00
    YORYOR
        1
    YORYOR  
       2015-04-21 12:40:05 +08:00   ❤️ 1
    $git checkout -b branch
    $diff -urN brach/ Project(A)/ > diff.path //用linux的diff命令比较生成一个patch 非 git diff
    $patch -p0 < diff.patch //将patch打到branch中

    这样应该可以
    bestsanmao
        2
    bestsanmao  
    OP
       2015-04-21 13:15:00 +08:00
    @YORYOR 不好意思
    我这个是在win下
    代码是vc工程
    Muninn
        3
    Muninn  
       2015-04-21 14:09:40 +08:00
    新建个分支切换过去 在文件级别把A都复制过来 然后把changes都commit就好
    我假设你是在用vs2013的git管理器...
    caixiexin
        4
    caixiexin  
       2015-04-21 14:17:51 +08:00
    看样子好象是不熟悉怎么做分支管理,应该是这样:
    新建一个分支,然后把Project(A) 文件拷贝进现在的代码目录,提交修改。一个区别于master分支的分支就出现了。然后用`git checkoout 分支名`在各分支之间切换。
    具体步骤就是:
    1. 当前处于master分支
    2. 执行命令`git checkout -b 新分支名`,建立并切换到新分支。新建的分支是从master分支创建的,所以目前文件跟master一样。
    3. 把你要修改的文件覆盖掉(相当于在新分支上做了修改)
    4. 执行`git add .` 和 `git commit -m "commit日志"` 提交新分支的所有修改
    5. 用`checkout 分支名` 可以在创建的分支之间切换。

    但愿我没理解错:)
    caixiexin
        5
    caixiexin  
       2015-04-21 14:19:50 +08:00   ❤️ 1
    补充一下。。上面``之间指的是代码块,我还以为评论支持markdown语法 = =||
    bestsanmao
        6
    bestsanmao  
    OP
       2015-04-21 14:34:36 +08:00
    @Muninn
    @caixiexin
    谢谢两位
    我明白两位的意思了
    先在主版本的目录上建立个分支
    然后把之前自己复制出来的分支文件覆盖到主目录里再commit一下
    是吧

    这样不会把主版本的文件给覆盖没了吧(看来我对git还是不太放心,呵呵)

    再次感谢
    caixiexin
        7
    caixiexin  
       2015-04-21 14:41:28 +08:00   ❤️ 1
    @bestsanmao 不会,不放心你可以操作前把project文件夹先拷贝一份试试,当初学的时候也这么担心。
    Muninn
        8
    Muninn  
       2015-04-21 15:07:24 +08:00
    ...你需要系统的学习下git 磨刀不误砍柴工
    其实git还蛮复杂的...
    git pro 或者 廖雪峰那个教程
    看完了还需要看下github workflow
    jimmy66
        9
    jimmy66  
       2015-04-21 15:15:38 +08:00
    分支,合并,不少东西的,自己耐心看一下吧...自己checkout试一试,你就懂了。。windows下也有配的git命令行界面,以上
    fourj
        10
    fourj  
       2015-04-21 16:16:10 +08:00
    写过一个关于分支开发的gist: https://gist.github.com/tonycn/eeb147134dbedc2302e3
    dotcool
        11
    dotcool  
       2015-04-21 16:19:01 +08:00
    推荐你使用sourcetree这个工具很相信的使用git,我已经用了很久了,有windows和mac版本的。
    http://www.ejiakt.com/play/1901 这个是一个简单的视频教程,讲的还算ok啦。快去看看吧
    arkilis
        12
    arkilis  
       2015-04-23 10:04:53 +08:00
    @caixiexin 基本上如他所说.

    但是你要注意在主版本上开发之后, 分支版本也要进行同步.

    git merge --no-ff -m "commit msg" master

    否则你切换到新的版本之后有冲突.
    bestsanmao
        13
    bestsanmao  
    OP
       2015-04-23 10:20:49 +08:00
    @arkilis 什么意思
    分支之间不是相互隔离的吗?
    arkilis
        14
    arkilis  
       2015-04-23 10:36:23 +08:00
    @bestsanmao

    正是分支是隔离的. 所有你要保证你其他定制的版本与之同步.

    Git branch本身是用来实现测试功能的开发的, 最终(大部分情况下)要 merge回去.

    而你的project(A) 和 Project(B)是类似于一个special定制版本. 如果不去从branch去merge的话. 3个版本进行同时开发, 冲突是不可避免的.
    bestsanmao
        15
    bestsanmao  
    OP
       2015-04-23 11:01:33 +08:00
    @arkilis
    我的理解是不同的branch是相互独立 互不影响的
    我无论怎么改其中的一个分支,对其它分支都没有任何影响
    不是这样吗?

    project(A) 跟 Project(B)是特殊客户定制的版本,一般不会跟主版本进行合并!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3211 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 00:36 · PVG 08:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.