git 仓库合并

01 应用场景

场景:把2个原仓库和并为一个新仓库,且仓库目录降级。

https://localhost/test_group1/mnm.git
https://localhost/test_group1/srm.git

原仓库本地目录:

~/git/test_group1/mnm/.git
~/git/test_gorup1/srm/.git

需要合并到 ~/git/test_group1/src 仓库
目录结构如下:

~/git/test_group1/src/.git
~/git/test_group1/src/mnm
~/git/test_group1/src/srm

02 合并步骤

合并核心点:git merge 时指定参数 --allow-unrelated-histories
操作步骤如下:

# 合并多个仓库
cd ~/git/test_gropu1
# 已创建远程仓库 src.git
git clone https://localhost/test_group1/src.git
cd src

# 追加mnm远程仓库mnm的dev分支到rmnm
git remote add rmnm -t dev https://localhost/test_group1/mnm.git
# 更新远程仓库到本地
git fetch rmnm
# 建立mnm的dev分支的本地分支,用于合并
git checkout -b mnm rmnm/dev
# 查看分支情况
git branch -vv

创建mnm目录
# mkdir mnm
# 依次把该分支的文件移动到mnm目录
mv xxx1 ./mnm/
mv xxx2 ./mnm/
...
mv xxxn ./mnm/
# 追加所有需改
git add -A
# 提交到本地分支
git commit -a -m"mnm merge"

# 追加srm远程仓库dev分支到rsrm
git remote add rsrm -t dev https://localhost/test_group1/srm.git
# 更新远程仓库到本地
git fetch rsrm
# 建立srm的dev分支的本地分支,用于合并
git checkout -b srm rsrm/dev
# 查看分支情况
git branch -vv
创建srm目录
# mkdir srm
# 依次把该分支的文件移动到srm目录
mv xxx1 ./srm/
mv xxx2 ./srm/
...
mv xxxn ./srm/
# 追加所有需改
git add -A
# 提交到本地分支
git commit -a -m"srm merge"

# 合并到dev分支,如果没有建立,则切换到master分支,迁出为dev分支
#git checkout master
#git checkout -b dev master
git checkout dev

# 在dev分支合并mnm分支, 注意需要加--allow-unrelated-histories
git merge mnm --allow-unrelated-histories
# 在dev分支合并srm分支, 注意需要加--allow-unrelated-histories
git merge srm --allow-unrelated-histories

# 删除为合并建立的本地分支 mnm 和 srm
git branch -D mnm
git branch -D srm

03 push 命令

  1. 远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch

    git push

    # 比如: 
    cd d:\git\chromium\src
    git checkout -b b4515 branch-heads/4515
    git branch --set-upstream-to=origin/b4515
    git push
    
  2. 远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch

    git push -u origin/remote_branch

    # 比如
    git push -u origin/b4515
  1. 远程没有remote_branch分支并,本地已经切换到local_branch

    git push origin local_branch:remote_branch

:: 比如
git push origin b4515:b4515
  1. 覆盖远程分支
    如果用已有的一个git仓库去替换另外一个老的仓库或者重命名到远程
    比如 把下载到本地的chromium仓库push到gitlab中新建的空仓库中,可以如下操作
    设 新建的仓库名称为 https://dev.git.com/gorup01/x1.git
本地  .git/config  文件内容如下,注意修改远程仓库的url
[remote "origin"]
   url = https://dev.git.com/gorup01/x1.git
   fetch = +refs/heads/*:refs/remotes/origin/*
   pushurl = https://dev.git.com/gorup01/x1.git

# 执行如下push命令,覆盖远程仓库
D:\src\yyy>git push -u -f origin master:x333 --no-thin
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://dev.git.com/gorup01/x1.git
* [new branch]      master -> x333
Branch 'master' set up to track remote branch 'x333' from 'origin' by rebasing.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值