我正在使用一个git存储库,需要从另一个git存储库提交,该存储库对第一个一无所知。

通常我会在reflog中使用HEAD@{x}进行筛选,但因为这个.git不知道这个reflog条目(不同的物理目录),我如何才能筛选它,或者我可以吗?

我使用git-svn。我的第一个分支使用Subversion repo中继的git-svn,下一个分支在Subversion分支上使用git-svn。


当前回答

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

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

其他回答

您需要将另一个存储库添加为远程存储库,然后获取其更改。从那里您可以看到提交,您可以选择它。

像这样:

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

现在您已经有了所有信息,可以简单地进行git优选。

完成后,如果你不再需要它,你可能想要再次移除它

git remote remove other

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

下面是添加远程、获取分支和选择提交的步骤

# 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

如果您希望为给定文件挑选多个提交,直到完成给定提交,那么可以使用以下方法。

# Directory from which to cherry-pick
GIT_DIR=...
# Pick changes only for this file
FILE_PATH=...
# Apply changes from this commit
FIST_COMMIT=master
# Apply changes until you reach this commit
LAST_COMMIT=...

for sha in $(git --git-dir=$GIT_DIR log --reverse --topo-order --format=%H $LAST_COMMIT_SHA..master -- $FILE_PATH ) ; do 
  git --git-dir=$GIT_DIR  format-patch -k -1 --stdout $sha -- $FILE_PATH | 
    git am -3 -k
done

我的情况是,我有一个裸回购,团队推动,和一个克隆的旁边。Makefile中的这组行对我来说是正确的:

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

通过保持裸回购的主人是最新的,我们能够挑选对裸回购发布的建议更改。我们还有一种(更复杂的)方法来挑选多个分支来进行合并审查和测试。

如果“一无所知”意味着“不能用作遥控器”,那么这并没有什么帮助,但是当我在谷歌上搜索这个工作流时,这个SO问题出现了,所以我想我应该做出贡献。

是的。获取存储库,然后从远程分支中进行选择。