首页 文章

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

提问于
浏览
602

我正在使用一个git存储库,需要从另一个不知道第一个存储库的git存储库提交 .

通常我会在reflog中使用 HEAD@{x} 来挑选,但是因为这个 .git 对这个reflog条目(不同的物理目录)一无所知,我怎么能选择这个,或者我可以吗?

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

10 回答

  • 439

    您可以在一行中执行以下操作 . 希望你在git资源库中,需要樱桃挑选的更改,你已经检查出正确的分支 .

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

    git fetch [branch URL] [Branch to cherry-pick from] && git cherry-pick [commit ID]

  • 55

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

    像那样:

    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

  • 0

    给出的答案是使用格式补丁,但由于问题是如何从另一个文件夹中挑选,所以这里有一段代码:

    $ 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提交创建一个补丁(单独一次提交为-1) . 此补丁通过管道传输到git am,它在本地应用补丁(-3表示如果补丁无法干净地应用,则尝试三向合并) . 希望解释一下 .

  • 129

    这是一个remote-fetch-merge的例子 .

    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
    
  • 0

    你可以做到,但它需要两个步骤 . 这是如何做:

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

    <remote-git-url> 替换为您想从中挑选的存储库的URL或路径 .

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

    您可以使用分支中的git SHA替换 FETCH_HEAD .

    更新:根据@ pkalinow的反馈修改 .

  • 7

    以下是添加远程,获取分支和樱桃选择提交的步骤

    # 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

  • 783

    How to create and apply a patch with Git . (根据你的问题的措辞,我假设这个其他存储库用于完全不同的代码库 . 如果它是相同代码库的存储库,你应该将它添加为@CharlesB建议的远程存储库 . 即使它是另一个代码库,我想您仍然可以将其添加为远程,但您可能不希望将整个分支添加到您的存储库...)

  • 4

    是 . 获取存储库,然后从远程分支中挑选 .

  • 109

    我的情况是,我有一个团队推动的裸仓库,以及紧挨着它的克隆 . Makefile中的这组行对我来说正常工作:

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

    通过保持裸仓库的主人更新,我们能够挑选出一个发布到裸仓库的建议变更 . 我们还有一种(更复杂的)方式来挑选多个分支进行综合审查和测试 .

    如果“什么都不知道”意味着“不能用作遥控器”,那么这没有用,但是这个问题出现了,因为我正在谷歌上搜索这个工作流程,所以我想我会回馈 .

  • 16

    假设 A 是您想要挑选的回购,并且 B 是您要挑选的回购,您可以通过将 </path/to/repo/A/>/.git/objects 添加到 </path/to/repo/B>/.git/objects/info/alternates 来实现 . 如果它不存在,请创建此 alternates 文件 .

    这将使repo B访问来自repo A的所有git对象,并将为您提供樱桃选择 .

相关问题