我正在使用一个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的反馈进行了修改。

其他回答

你可以在一行中完成,如下所示。希望你在git存储库中,需要精心挑选的更改,并且你已经签出了正确的分支。

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

git获取[分支URL][分支的cherry-pick from] && git cherry-pick[提交ID]

假设A是你想要从中挑选的回购,B是你想要挑选的,你可以通过添加</path/到/repo/A/>/来做到这一点。git/objects到</path/to/repo/B>/.git/objects/info/alternates。如果不存在,则创建此备用文件。

这将使repo B访问所有来自repo A的git对象,并将为您选择工作。

这里有一个很容易从记忆中打出来的,灵感来自@radicand的评论。 这取决于伪造的能力,但Github, Gitlab和Gitea肯定支持它。

你将.patch附加到提交URL并通过git am应用它:

curl --location URL.patch | git am

——location使它跟随重定向,这可以发生在例如从pull请求复制补丁时

你可以这样做,但是需要两个步骤。方法如下:

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

将<remote-git-url>替换为您想从中选择的存储库的url或路径。

将<branch>替换为您想要从远程存储库中挑选的分支或标记名称。

你可以用分支中的git SHA替换FETCH_HEAD。

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

对于这种情况,必须为一些本地化验证“精心挑选”提交。 对于相同的存储库签出,也可以是本地提交(即尚未推送到服务器)。

E.g.

Repo1类似于repo2 repo1的分支b1 - HEAD在本地进行了2次提交(包括commit_x)。 Repo2有分支bb1 -需要挑选commit_x。

为此,

$ CD repo2

Repo2 $ git获取<path_to_repo1>

Repo2 $ git cherry-pick <commit_x>

在上面的例子中,commit_x现在是可识别的并被提取(通过fetch的帮助)。