将本地git仓库与远程仓库

时间:2015-05-18 09:00:26

标签: git

我有一个非常简单的远程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)

最合适的方法是什么?

1 个答案:

答案 0 :(得分: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

完成这些步骤后,我将本地提交历史记录集成到远程仓库历史记录中(省略了my-huge-feature)。

但是,rebase命令不保存分支历史记录,因此远程仓库会将我的提交存储在单个分支中。虽然对我来说没问题,但如果这个答案能够提供保存分支历史的方法,我将不胜感激。