Git多分支平行发展(一个仓库包含多个不同的项目)

背景

最近在用laravel开发微信小程序的接口,因为服务器PHP版本的问题,分别用了laravel 5.6(php 7.1,开发环境)laravel 5.4 (php 5.6,服务器环境),开发完成后,两个项目绝大部分的代码都差不多,不想再建一个仓库放php 5.6版的代码,便试着在原有仓库新建分支来存储php 5.6的项目,捣鼓的一上午终于搞出来了,现在记录下。

主要步骤:

  1. 在远程和本地仓库中新建一个分支(我建的是laravel54);
  2. 删除远程laravel54分支上的所有文件;
  3. 将新项目的文件推送到laravel54上。

流程

新建一个文件夹(我的是laravel5.4)

创建git本地仓库并关联远程仓库

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4
$ git init
Initialized empty Git repository in D:/PHP/xampp/htdocs/apple/laravel5.4/.git/

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git remote add origin git@xxxxxxxxxxxxxxxxxxxxx.git

建立远程仓库分支 laravel54

注意,建立远程分支后,暂时还不能在本地建立其他分支,因为刚创建的git仓库默认的master分支要在第一次commit之后才会真正建立,这时创建其他分支会报错,解决办法在后面说明。

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git branch laravel54
fatal: Not a valid object name: 'master'.

随便新建一个文件,里面可以不用写任何东西,然后commit

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ touch clearTheBranch

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git add clearTheBranch

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git commit -m'clean this branch'
[master (root-commit) c7c5349] clean this branch
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 clearTheBranch

推送之前先更新(下面的代码是最核心的代码)

新建的分支默认与master分支一样,所以要在推送之前先把分支上的内容拉下来。


沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git pull origin laravel54
warning: no common commits
remote: Enumerating objects: 2453, done.
remote: Counting objects: 100% (2453/2453), done.
remote: Compressing objects: 100% (2320/2320), done.
Receiviremote: Total 2453 (delta 1547), reused 229 (delta 89)
Receiving objects: 100% (2453/2453), 1.40 MiB | 1.38 MiB/s, done.
Resolving deltas: 100% (1547/1547), done.
From xxxxxxxxxxxxxxxxxxxxx
 * branch            laravel54 -> FETCH_HEAD
 * [new branch]      laravel54 -> origin/laravel54
fatal: refusing to merge unrelated histories

这个时候会报错,是正常现象,,原因是本地仓库和远程仓库不一样,有类似两者有完全不相同的commit历史,只需要在在pull的同时加上一行代码即可,代码如下:

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$  git pull origin laravel54 --allow-unrelated-histories
From xxxxxxxxxxxxxxxxxxxxx
 * branch            laravel54 -> FETCH_HEAD
Merge made by the 'recursive' strategy.
......

这步操作的时候,会有merge的commit说明,简单写下,这个只是merge的说明,并不会真正和mater合并。
经过这一步操作,就已经把远程仓库laravel54分支里面的文件都拉下来了,接下来建立与远程仓库对应的本地分支。

建立并切换到本地分支 laravel54

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git branch laravel54

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
$ git checkout laravel54
Switched to branch 'laravel54'

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$

// 也可以直接用 git checkout -b laravel54

删除本地仓库里的所有文件(除了.git的文件夹),然后推送

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$ git add .

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$ git commit -m'delete all files'
[laravel54 d8bf12d] delete all files
215 files changed, 32019 deletions(-)
......

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$ git push origin laravel54
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 683 bytes | 341.00 KiB/s, done.
Total 6 (delta 1), reused 1 (delta 0)
remote: Powered by Gitee.com
To xxxxxxxxxxxxxxxxxxxxx.git
   c810298..d8bf12d  laravel54 -> laravel54

这个时候,远程仓库的laravel54分支便和本地仓库的laravel54分支一样都是空白的,这样就可以随心所欲的推送了。

新项目推送

这时就可以把之前的项目拷进这个文件夹里面,然后按照正常的推送流程进行推送。

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$ git add .
warning: LF will be replaced by CRLF in .env.example.
The file will have its original line endings in your working directory.
.......

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$ git commit -m'laravel54 push'
[laravel54 eba0954] laravel54 push
 113 files changed, 11583 insertions(+)
 create mode 100644 .env.example
 create mode 100644 .gitattributes
 .......

沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
$ git push origin laravel54
Enumerating objects: 152, done.
Counting objects: 100% (152/152), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (126/126), done.
Writing objects: 100% (151/151), 211.43 KiB | 2.94 MiB/s, done.
Total 151 (delta 14), reused 42 (delta 4)
remote: Resolving deltas: 100% (14/14), done.
remote: Powered by Gitee.com
To xxxxxxxxxxxxxxxxxxxxx.git
   d8bf12d..eba0954  laravel54 -> laravel54

小总结

不用担心推送错分支导致分支合并

经过如上操作,就可以实现master分支和laravel54是两个完全不同的项目,可以保持两个项目平行发展,因为两个分支的提交历史不一样,所以即便是误操作,提交错了分支,git会给出相应的报错,不会把两个分支直接合并,下面是代码演示:

  1. 本地laravel54向远程master分支推送

    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ touch a.txt
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ git add a.txt
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ git commit -m'test file a.txt'
    [laravel54 e246705] test file a.txt
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 a.txt
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ git push origin master
    To xxxxxxxxxxxxxxxxxxxxx.git
     ! [rejected]        master -> master (fetch first)
    error: failed to push some refs to 'git@xxxxxxxxxxxxxxxxxxxxx.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    //本地版本回退
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ git log
    commit e246705e9894a658d3fb2ea8f51b1ee0dd8ff834 (HEAD -> laravel54)
    Author: muyan <xiao7shuang@qq.com>
    Date:   Fri Jun 29 14:50:35 2018 +0800
    
        test file a.txt
    
    commit eba09541b60e496127f6280c3db9611f72504744 (origin/laravel54)
    Author: muyan <xiao7shuang@qq.com>
    Date:   Fri Jun 29 14:36:48 2018 +0800
    
        laravel54 push
    
    commit d8bf12d9df1337f9f7e0de723608796a490f66dc
    Author: muyan <xiao7shuang@qq.com>
    Date:   Fri Jun 29 14:24:02 2018 +0800
    
        delete all files
    
    commit dcfb2b00f4f8ad0f1f672cde9b9e9ddc79d85239 (master)
    Merge: c7c5349 c810298
    Author: muyan <xiao7shuang@qq.com>
    Date:   Fri Jun 29 13:56:24 2018 +0800
    
        Merge branch 'laravel54' of xxxxxxxxxxxxxxxxxxxxx
    
        for claering the branch
    
    commit c7c5349779f868fbc1cf18d742d634c9d3267c32
    Author: muyan <xiao7shuang@qq.com>
    Date:   Fri Jun 29 13:55:01 2018 +0800
    
        clean this branch
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ git reset eba09541b60e496127f6280c3db9611f72504744    //回退到上一次提交之前的版本
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (laravel54)
    $ git status
    On branch laravel54
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            a.txt
    
    nothing added to commit but untracked files present (use "git add" to track)
    
    
  2. 本地master分支向远程master分支推送

    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
    $ git add a.txt
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
    $ git commit -m 'test file a'
    [master d3e8bba] test file a
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 a.txt
    
    沐@ MINGW64 /d/PHP/xampp/htdocs/apple/laravel5.4 (master)
    $ git push origin master
    To xxxxxxxxxxxxxxxxxxxxx.git
     ! [rejected]        master -> master (fetch first)
    error: failed to push some refs to 'git@xxxxxxxxxxxxxxxxxxxxx.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    

理论上可以实现无限平行分支

文章其他地址个人博客 segmentfault

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容