假设我创建了一个克隆http://code.google.com/r/kkowalczyk-leveldb的http://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