如何合并两个Git仓库

假设有两个Git仓库:

  1. https://github.com/jiangxincode/thesis.git
  2. https://jiangxincode@bitbucket.org/jiangxincode/thesis.git

现在需要进行合并,保留双方的历史提交记录,并将1的内容删除,合并之后的内容推送到2中。

从Github上clone仓库到github目录:

$ git clone https://github.com/jiangxincode/thesis.git github
Cloning into 'github'...
remote: Enumerating objects: 29, done.
remote: Total 29 (delta 0), reused 0 (delta 0), pack-reused 29
Unpacking objects: 100% (29/29), done.

从Bitbucket上clone仓库到bitbucket目录:

$ git clone https://jiangxincode@bitbucket.org/jiangxincode/thesis.git bitbucket
Cloning into 'bitbucket'...
remote: Counting objects: 153, done.
remote: Compressing objects: 100% (150/150), done.
remote: Total 153 (delta 63), reused 0 (delta 0)
Receiving objects: 100% (153/153), 26.68 MiB | 2.64 MiB/s, done.
Resolving deltas: 100% (63/63), done.

在合并前根据实际情况分别处理两个目录的内容,并提交上传到远程仓库。

在仓库bitbucket中添加远程仓库github,命名为github

$ cd bitbucket/
$ git remote add github ../github/
$ git remote
github
origin

检出历史信息

$ git fetch github
warning: no common commits
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 32 (delta 8), reused 0 (delta 0)
Unpacking objects: 100% (32/32), done.
From ../github
 * [new branch]      master     -> github/master

基于github的master分支创建并检出新的分支,名字为github_master

$ git checkout -b github_master github/master
Switched to a new branch 'github_master'
Branch 'github_master' set up to track remote branch 'master' from 'github'.

切到仓库2的主线分支

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

合并基于github创建的分支github_master到仓库bitbucket的master分支上

$ git merge github_master  --allow-unrelated-histories
Auto-merging .gitignore
CONFLICT (add/add): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.

此处可以看出出现了冲突,需要先解决冲突

$ git status
On branch master
Your branch is up to date with 'origin/master'.

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:

        new file:   tex-source/LICENSE
        new file:   tex-source/Makefile
        new file:   tex-source/abstract.tex
        new file:   tex-source/dtx-style.sty
        new file:   tex-source/englishabstract.tex
        new file:   tex-source/gbt7714-2005.bst
        new file:   tex-source/get_texmf_dir.sh
        new file:   tex-source/jiangxin.bib
        new file:   tex-source/jiangxin.tex
        new file:   tex-source/njulogo.eps
        new file:   tex-source/njuname.eps
        new file:   tex-source/njuthesis.cfg
        new file:   tex-source/njuthesis.cls
        new file:   tex-source/njuthesis.dtx
        new file:   tex-source/njuthesis.ins
        new file:   tex-source/preface.tex

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both added:      .gitignore

$ git add .gitignore

$ git commit
[master 3d6cb22] Merge branch 'github_master'

最后push本地所有分支到bitbucket

$ git push origin master
Enumerating objects: 37, done.
Counting objects: 100% (37/37), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (32/32), done.
Writing objects: 100% (35/35), 320.42 KiB | 3.56 MiB/s, done.
Total 35 (delta 9), reused 0 (delta 0)
To https://bitbucket.org/jiangxincode/thesis.git
   f92ef9e..3d6cb22  master -> master

$ git push origin github_master:github_master
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create pull request for github_master:
remote:   https://bitbucket.org/jiangxincode/thesis/pull-requests/new?source=github_master&t=1
remote:
To https://bitbucket.org/jiangxincode/thesis.git
* [new branch]      github_master -> github_master

此时查看本地和远程的所有分支

$ git branch -a
  github_master
* master
  remotes/github/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/github_master
  remotes/origin/master
  origin/master

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python3

SourceTree安装

SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mercurial和Subversion版本控...

14410
来自专栏吴老师移动开发

【iOS开发】Cocoapods详解-使用及创建私有库

CocoaPods现在是通过target来组织的,如果项目有多个target,可以写多个target为每个target引入不同的第三方库。 写法:

11750
来自专栏Aloys的开发之路

版本管理工具总结

代码托管网站: https://github.com/ (Git) https://bitbucket.org/ (Git Mercurial) https:/...

23290
来自专栏iOS 开发杂谈

学习笔记之git命令行的详细使用

git仓库,你可以简单理解成一个目录,这个目录里面的所有文件都可以被git仓库管理起来,每个文件的修改、删除,git都能跟踪,以便任何时刻都可以追踪历史,或者在...

17920
来自专栏腾讯DevOps

Git 的一些事

假设远程分支上有2个提交,然后基于远程develop,再创建一个分支feature。

10.8K20
来自专栏斑斓

【工具箱】GIT的使用场景

无论学习什么技术,都需要了解该技术的本质。若是靠死记硬背该技术提供的方法或者语法,终归是知其然而不知其所以然,当发现错误时,你根本不知道是什么原因导致的。我在使...

33940
来自专栏Crossin的编程教室

图解Git

此页图解git中的最常用命令。如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻。 正文 基本用法 约定 命令详解 Diff Commit Chec...

41080
来自专栏维C果糖

详述 IntelliJ IDEA 中恢复代码的方法「进阶篇」

在博文“ 详述 IntelliJ IDEA 中恢复代码的方法 ”中,咱们已经了解了如何将代码恢复至某一版本,但是通过Local History恢复代码有的时候并...

21680
来自专栏软件开发

一个小时学会Git

最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统。在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本...

39150
来自专栏Petrichor的专栏

安装teamviewer 远程桌面

版权声明:转载请注明出处 https://blog.csdn.net/JNingWei/article/details/73436761 ...

51240

扫码关注云+社区

领取腾讯云代金券