合并本地git仓库和远程仓库

3

我有一个非常简单的远程Git仓库:

*---*---(a)---*---(b, HEAD) (master)

我一直在本地项目仓库中工作,其初始状态对应于提交(a)之后的状态,并且有许多分支:

(a')---*-------------*-----------* (my-master)
        \___________/___________/__ (my-dev)
         \______________..._______/ (feature, hotfix branches)

然而,本地仓库的初始提交并没有正确地获得(即没有使用git命令),而是通过复制项目文件(因此名称为(a'),因为它与(a)处于相同状态,但从Git的角度来看却不同)。现在我想将我的本地更改与远程仓库合并,但也要以某种方式“绑定”本地仓库的初始提交到提交(a),以获得以下图片:

*---*---(a)---*-----------------------(b)-- (merge-commit, HEAD) (master)
          \________________________________/ (my-master)
                  \___________/___________/__ (my-dev)
                   \______________..._______/ (feature, hotfix branches)

什么是最合适的做法?

添加真实的远程仓库,从中获取数据,然后将所有分支都基于真实的 a 提交进行变基。 - poke
刚刚回答了一个相关的问题,希望有所帮助。http://stackoverflow.com/questions/30245460/move-the-old-git-history-to-a-new-already-created-and-edited-repo/30291006#30291006 - Nick Volynkin
1个回答

2

感谢poke的评论,我找到了适合我的目的的解决方案。

# add remote repo and fetch it
git remote add repo <repo_addr>
git fetch repo

# create new branch for rebasing onto
# here 'a' is hash of the commit (a)
git checkout a
git branch my-huge-feature

# rebasing my-master branch onto my-huge-feature
git checkout my-master
git rebase my-huge-feature

# fast-forwarding my-huge-feature pointer
git checkout my-huge-feature
git merge my-master

在按照这些步骤后,我将本地提交历史记录整合到了远程存储库历史记录中(省略了推送我的巨大特性)。
然而,rebase命令不保存分支历史记录,所以远程存储库会将我的提交保存在单个分支中。尽管对我来说没有问题,但如果能提供保留分支历史记录的方法,我将非常感激。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接