是否有可能从另一个git仓库挑选提交?

我正在与一个git仓库工作,需要从另一个git仓库的提交,不知道第一个。

通常我会select在reflog中使用HEAD@{x} ,但是因为这个.git对这个reflog条目(不同的物理目录)一无所知,我该如何挑选这个呢?

我正在使用git-svn 。 我的第一个分支是使用Subversion repo的trunkgit-svn ,而下一个分支是在Subversion分支上使用git-svn

您需要将其他存储库添加为远程,然后获取其更改。 从那里你看到承诺,你可以樱桃挑选它。

像那样:

 git remote add other https://example.link/repository.git git fetch other 

现在你拥有了所有的信息来做简单git cherry-pick

有关使用遥控器的更多信息,请访问: https : //git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

给出的答案是使用format-patch,但是因为问题是如何从另一个文件夹中select,下面是一段代码:

 $ git --git-dir=../<some_other_repo>/.git \ format-patch -k -1 --stdout <commit SHA> | \ git am -3 -k 

(来自@cong ma的解释)

git format-patch命令从它的SHA指定的some_other_repo的提交中创build一个补丁(单独一个提交时为-1 )。 这个补丁是通过pipe道连接的,它在本地应用补丁( -3意味着尝试三路合并,如果补丁不能完全应用)。 希望解释。

这是一个远程获取合并的例子。

 cd /home/you/projectA git remote add projectB /home/you/projectB git fetch projectB 

那么你有一个select:

 git merge projectB/master 

要么:

 git cherry-pick <first_commit>..<last_commit> 

你可以做到,但是需要两个步骤。 就是这样:

 git fetch <remote-git-url> <branch> && git cherry-pick FETCH_HEAD 

<remote-git-url>replace为您想要从中select的存储库的URL或path。

<branch>replace为要从远程存储库中挑选的分支或标记名称。

您可以用FETCH_HEAD中的git SHAreplaceFETCH_HEAD

更新:根据@ pkalinow的反馈进行修改。

这里是添加一个远程,获取分支,樱桃select一个提交的步骤

 # 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

请参阅如何使用Git创build和应用修补程序 。 (从你的问题的措辞,我认为这个其他库是一个完全不同的代码库,如果它是一个相同的代码库存储库,你应该添加它作为@CharlesBbuild议的远程,即使是另一个代码库,我想你仍然可以将它添加为一个远程,但你可能不想让整个分支到你的仓库…)

你可以在一行中做如下。 希望你在git仓库需要樱桃采摘的变化,你已经检查出正确的分支。

 git fetch ssh://git@stash.mycompany.com:7999/repo_to_get_it_from.git branchToPickFrom && git cherry-pick 02a197e9533 

git fetch [分支URL] [分支到樱桃挑选] && git樱桃挑选[提交ID]

是。 获取存储库,然后从远程分支樱桃select。

我的情况是,我有一个光秃秃的回购,团队推动,并坐在旁边的克隆。 Makefile中的这一行代码对我来说是正确的:

 git reset --hard git remote update --prune git pull --rebase --all git cherry-pick -n remotes/origin/$(BRANCH) 

通过保持裸回购的主人是最新的,我们能够挑选一个发布到光秃回购的build议更改。 我们还有一个(更复杂的)方法来挑选多个分支来进行综合评估和testing。

如果“什么都不知道”意味着“不能用作遥控器”,那么这并不起作用,但是这个问题出现了,因为我正在search这个工作stream程,所以我想我会回来。

假设A是你想从樱桃select的回购,而B是你想挑选的</path/to/repo/A/>/.git/objects ,你可以通过添加</path/to/repo/A/>/.git/objects</path/to/repo/B>/.git/objects/info/alternates 。 创build这个alternates文件,如果它不存在。

这将使回购B从回购A访问所有的git对象,并将为您挑选樱桃树。