git:合并 code.google.com 中主 repo 的更改

git:合并 code.google.com 中主 repo 的更改

假设我创建了一个克隆http://code.google.com/r/kkowalczyk-leveldbhttp://code.google.com/p/leveldb使用 code.google.com 上的网络界面

自从我创建克隆以来,http://code.google.com/p/leveldb我想将它们合并到我的克隆中,最好保留历史记录(即我可以使用 diff/merge 工具手动合并它们,但这不会保留 git 历史记录)。

执行这种合并的神奇命令是什么?

最好提供完整的命令。我猜想它会涉及 git fetch 和 git merge 以及远程跟踪分支等的组合。我的问题不是我无法阅读 git fetch 或 merge 的手册页,而是我不理解它们。

更新:

鉴于下面 Lazy Badger 的评论,我已经解决了一半的问题:

git remote add original https://code.google.com/p/leveldb/

创建指向源的名为“original”的内容。然后我可以执行以下操作:

git pull original master

它会获取原始更改并将其合并到我的分支 master 中。不过,我会分两个步骤来执行此操作:git fetch 和 git merge $something 以合并到我当前的分支中。

但是,在 git fetch original 之后,我不知道 $something 是什么。当我执行 git branch -a 时,我没有看到任何与我的远程 original 相关的东西。

使事情复杂化的是,原来也有 3 个分支。

那么,从原始数据获取的数据去往何处以及我应该如何在 git merge $something 中引用它?

答案1

您已经找到如何添加另一个远程服务器并直接从其中提取:

git remote add original https://code.google.com/p/leveldb/
git pull original master

如果您想要分别执行获取和合并(而不是单个拉取命令;可能是因为您想在合并之前检查发生了什么变化),那么您可以这样做:

git fetch original         # update refs/remotes/original/*
git merge original/master  # merge refs/remotes/original/master

您可以在使用此命令合并之前检查更改:

git log --reverse -p original/master@{1}..original/master@{0}

除了使用上述基于 reflog 的修订规范之外,您还可以复制并粘贴oldhash..newhash在获取期间输出的修订规范。


从技术上讲,git pull remote branch更接近于这对命令:

git fetch remote-or-url branch  # grab remote branch and put it in FETCH_HEAD
git merge FETCH_HEAD            # merge it

但是这对 (因此也使用指定的远程和分支进行拉取) 通常不太好,因为它不会更新远程跟踪分支 ( refs/remotes/original/*)。远程+分支调用 fetch 和 pull 适用于从存储库进行一次性合并,您并不特别希望保留一整套远程跟踪分支 (即从次要/罕见贡献者处获取/拉取合并请求)。

答案2

您可以将多个远程仓库添加到一个存储库。一旦您获得了第二个远程仓库,您就可以将第一个远程仓库的更改推送到第二个远程仓库。例如:

git clone <google_URI>
cd <projdir>
git remote add github <github_URI>
git push github master

相关内容