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

2015-04-21 12:26:39 +08:00
 bestsanmao

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

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

3464 次点击
所在节点    git
16 条回复
YORYOR
2015-04-21 12:40:05 +08:00
$git checkout -b branch
$diff -urN brach/ Project(A)/ > diff.path //用linux的diff命令比较生成一个patch 非 git diff
$patch -p0 < diff.patch //将patch打到branch中

这样应该可以
bestsanmao
2015-04-21 13:15:00 +08:00
@YORYOR 不好意思
我这个是在win下
代码是vc工程
Muninn
2015-04-21 14:09:40 +08:00
新建个分支切换过去 在文件级别把A都复制过来 然后把changes都commit就好
我假设你是在用vs2013的git管理器...
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
2015-04-21 14:19:50 +08:00
补充一下。。上面``之间指的是代码块,我还以为评论支持markdown语法 = =||
bestsanmao
2015-04-21 14:34:36 +08:00
@Muninn
@caixiexin
谢谢两位
我明白两位的意思了
先在主版本的目录上建立个分支
然后把之前自己复制出来的分支文件覆盖到主目录里再commit一下
是吧

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

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

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

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

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

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

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

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

project(A) 跟 Project(B)是特殊客户定制的版本,一般不会跟主版本进行合并!
ziXiong
2015-11-03 08:42:25 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX