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 命令
-
远程已有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
-
远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch
git push -u origin/remote_branch
# 比如
git push -u origin/b4515
-
远程没有remote_branch分支并,本地已经切换到local_branch
git push origin local_branch:remote_branch
:: 比如
git push origin b4515:b4515
- 覆盖远程分支
如果用已有的一个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.