我正在使用一个git存储库,需要从另一个git存储库提交,该存储库对第一个一无所知。
通常我会在reflog中使用HEAD@{x}进行筛选,但因为这个.git不知道这个reflog条目(不同的物理目录),我如何才能筛选它,或者我可以吗?
我使用git-svn。我的第一个分支使用Subversion repo中继的git-svn,下一个分支在Subversion分支上使用git-svn。
我正在使用一个git存储库,需要从另一个git存储库提交,该存储库对第一个一无所知。
通常我会在reflog中使用HEAD@{x}进行筛选,但因为这个.git不知道这个reflog条目(不同的物理目录),我如何才能筛选它,或者我可以吗?
我使用git-svn。我的第一个分支使用Subversion repo中继的git-svn,下一个分支在Subversion分支上使用git-svn。
当前回答
你可以这样做,但是需要两个步骤。方法如下:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
将<remote-git-url>替换为您想从中选择的存储库的url或路径。
将<branch>替换为您想要从远程存储库中挑选的分支或标记名称。
你可以用分支中的git SHA替换FETCH_HEAD。
更新:根据@pkalinow的反馈进行了修改。
其他回答
下面是一个远程获取-合并的例子。
cd /home/you/projectA
git remote add projectB /home/you/projectB
git fetch projectB
然后你可以:
git cherry-pick <first_commit>..<last_commit>
或者你甚至可以合并整个分支(只有当你真的需要合并所有东西时)
git merge projectB/master
下面是添加远程、获取分支和选择提交的步骤
# Cloning our fork
$ git clone git@github.com:ifad/rest-client.git
# Adding (as "endel") the repo from we want to cherry-pick
$ git remote add endel git://github.com/endel/rest-client.git
# Fetch their branches
$ git fetch endel
# List their commits
$ git log endel/master
# Cherry-pick the commit we need
$ git cherry-pick 97fedac
来源:https://coderwall.com/p/sgpksw
假设A是你想要从中挑选的回购,B是你想要挑选的,你可以通过添加</path/到/repo/A/>/来做到这一点。git/objects到</path/to/repo/B>/.git/objects/info/alternates。如果不存在,则创建此备用文件。
这将使repo B访问所有来自repo A的git对象,并将为您选择工作。
答案,正如给出的,是使用format-patch,但由于问题是如何从另一个文件夹中选择,这里有一段代码来做到这一点:
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
来自conma评论14年8月28日的解释
Git format-patch命令从some_other_repo的提交中创建一个补丁 由其SHA指定(单独提交时为-1)。这个补丁是 管道到git am,它在本地应用补丁(-3表示尝试 如果补丁应用不干净,三路合并)。
你可以这样做,但是需要两个步骤。方法如下:
git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD
将<remote-git-url>替换为您想从中选择的存储库的url或路径。
将<branch>替换为您想要从远程存储库中挑选的分支或标记名称。
你可以用分支中的git SHA替换FETCH_HEAD。
更新:根据@pkalinow的反馈进行了修改。