项目有很大的变化的情况下,怎么处理
如果一个Git管理版本的项目需要做一些很大的改动,例如重写,另起炉灶,怎么将新的项目合并到老的项目,不改变git仓库的地址?
例如,一个基于PHP框架Laravel的项目,之前是5.0版本,现在升级到5.4版本,框架的许多地方都改变了,与其在原项目中修改,不如直接另起一个项目,替换掉原来的master分支即可。
新建目录,初始化Laravel5.4,将原来的代码拷贝进Laravel的目录,然后”git init“初始化为git目录,添加远程仓库地址:”git remote add origin git_remote_address“,这时你想要推送到远程仓库,必须先同步远程仓库,由于执行过”git init“,本地默认为master分支,因此我们需要同步远程master分支状态:”git pull origin master“,这时会遇到问题:
fatal: refusing to merge unrelated histories
这是因为git默认不允许两个完全不相干的项目合并,而我们就是要合并,因此我们来强制合并:
git pull origin master --allow-unrelated-histories
这里有个事情要注意,合并时会遇到冲突,我们需要采用本地的更改,因为本地的更改是我们想要的:
git pull origin master --allow-unrelated-histories -X ours
至此,大功告成,这里需要注意的有两点:
- "--allow-unrelated-histories"用于合并两个完全不相干的分支,不相干是指历史完全不同;
- "-X ours/theirs"用于在合并过程中指定使用哪方更改,否则,在有大量更改时手动处理冲突,可是一件麻烦事。
合并某开发分支到主分支,不想有太多的commit
git merge有个参数:`--squash`,它可以将待合并分支的所有commit合并为一个commit,执行这个git merge之后,要执行一个git commit,可以修改提交信息,通常,所有的提交信息会默认在总的提交信息中。