Git多分支平行發(fā)展(一個(gè)倉庫包含多個(gè)不同的項(xiàng)目)

背景

最近在用laravel開發(fā)微信小程序的接口,因?yàn)榉?wù)器PHP版本的問題彬向,分別用了laravel 5.6(php 7.1逃片,開發(fā)環(huán)境)laravel 5.4 (php 5.6屡拨,服務(wù)器環(huán)境),開發(fā)完成后褥实,兩個(gè)項(xiàng)目絕大部分的代碼都差不多呀狼,不想再建一個(gè)倉庫放php 5.6版的代碼,便試著在原有倉庫新建分支來存儲php 5.6的項(xiàng)目损离,搗鼓的一上午終于搞出來了哥艇,現(xiàn)在記錄下。

主要步驟:

  1. 在遠(yuǎn)程和本地倉庫中新建一個(gè)分支(我建的是laravel54)僻澎;
  2. 刪除遠(yuǎn)程laravel54分支上的所有文件貌踏;
  3. 將新項(xiàng)目的文件推送到laravel54上。

流程

新建一個(gè)文件夾(我的是laravel5.4)

創(chuàng)建git本地倉庫并關(guān)聯(lián)遠(yuǎn)程倉庫

沐@ 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

建立遠(yuǎn)程倉庫分支 laravel54

注意窟勃,建立遠(yuǎn)程分支后祖乳,暫時(shí)還不能在本地建立其他分支,因?yàn)閯倓?chuàng)建的git倉庫默認(rèn)的master分支要在第一次commit之后才會真正建立秉氧,這時(shí)創(chuàng)建其他分支會報(bào)錯眷昆,解決辦法在后面說明。

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

隨便新建一個(gè)文件谬运,里面可以不用寫任何東西隙赁,然后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

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

新建的分支默認(rèn)與master分支一樣,所以要在推送之前先把分支上的內(nèi)容拉下來梆暖。


沐@ 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

這個(gè)時(shí)候會報(bào)錯伞访,是正常現(xiàn)象轰驳,厚掷,原因是本地倉庫和遠(yuǎn)程倉庫不一樣弟灼,有類似兩者有完全不相同的commit歷史,只需要在在pull的同時(shí)加上一行代碼即可冒黑,代碼如下:

沐@ 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.
......

這步操作的時(shí)候田绑,會有merge的commit說明,簡單寫下抡爹,這個(gè)只是merge的說明掩驱,并不會真正和mater合并。
經(jīng)過這一步操作冬竟,就已經(jīng)把遠(yuǎn)程倉庫laravel54分支里面的文件都拉下來了欧穴,接下來建立與遠(yuǎn)程倉庫對應(yīng)的本地分支。

建立并切換到本地分支 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

這個(gè)時(shí)候涮帘,遠(yuǎn)程倉庫的laravel54分支便和本地倉庫的laravel54分支一樣都是空白的,這樣就可以隨心所欲的推送了笑诅。

新項(xiàng)目推送

這時(shí)就可以把之前的項(xiàng)目拷進(jìn)這個(gè)文件夾里面调缨,然后按照正常的推送流程進(jìn)行推送。

沐@ 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

小總結(jié)

不用擔(dān)心推送錯分支導(dǎo)致分支合并

經(jīng)過如上操作吆你,就可以實(shí)現(xiàn)master分支和laravel54是兩個(gè)完全不同的項(xiàng)目弦叶,可以保持兩個(gè)項(xiàng)目平行發(fā)展,因?yàn)閮蓚€(gè)分支的提交歷史不一樣妇多,所以即便是誤操作湾蔓,提交錯了分支,git會給出相應(yīng)的報(bào)錯砌梆,不會把兩個(gè)分支直接合并,下面是代碼演示:

  1. 本地laravel54向遠(yuǎn)程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分支向遠(yuǎn)程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.
    
    

理論上可以實(shí)現(xiàn)無限平行分支

文章其他地址個(gè)人博客 segmentfault

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贬循,一起剝皮案震驚了整個(gè)濱河市咸包,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杖虾,老刑警劉巖烂瘫,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奇适,居然都是意外死亡坟比,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門嚷往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葛账,“玉大人,你說我怎么就攤上這事皮仁〖眨” “怎么了菲宴?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趋急。 經(jīng)常有香客問我喝峦,道長,這世上最難降的妖魔是什么呜达? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任谣蠢,我火速辦了婚禮,結(jié)果婚禮上查近,老公的妹妹穿的比我還像新娘眉踱。我一直安慰自己,他們只是感情好嗦嗡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布勋锤。 她就那樣靜靜地躺著,像睡著了一般侥祭。 火紅的嫁衣襯著肌膚如雪叁执。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天矮冬,我揣著相機(jī)與錄音谈宛,去河邊找鬼。 笑死胎署,一個(gè)胖子當(dāng)著我的面吹牛吆录,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琼牧,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恢筝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巨坊?” 一聲冷哼從身側(cè)響起撬槽,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趾撵,沒想到半個(gè)月后侄柔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡占调,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年暂题,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片究珊。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薪者,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苦银,到底是詐尸還是另有隱情啸胧,我是刑警寧澤赶站,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站纺念,受9級特大地震影響贝椿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陷谱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一烙博、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烟逊,春花似錦渣窜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至访雪,卻和暖如春详瑞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臣缀。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工坝橡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人精置。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓计寇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脂倦。 傳聞我的和親對象是個(gè)殘疾皇子番宁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容