将文件及其提交复制到另一个远程

时间:2015-10-05 09:55:22

标签: git merge git-remote git-checkout git-cherry-pick

我正在尝试将一个文件的提交复制到另一个远程分支。流程如下图所示:

flow

重要的一点是,我想保留提交的历史记录(所以没有一个合并提交而没有引用谁在远程1中进行了更改)当"复制"文件从一个遥控器到另一个遥控器。 此外,我也不想复制其他文件,因此只需要我想要的文件。

我尝试过git checkout但是一旦我提交了合并,并将其推送到Remote 2,Remote 1的提交就消失了,只有合并提交就在那里。

git cherry-pick可以在这里找到答案吗?

1 个答案:

答案 0 :(得分:0)

听起来像git cherry-pick确实是你需要的(前提是确实没有提交会影响文件1和文件2)

在您的情况下,它看起来像:

git checkout <some-branch from remote 2 on which you wish to push the changes>
git cherry-pick <sha F2C1> <sha F2C2> <sha F2C3>
git push

其中FiCj表示File i Commit j

修改

如果没有提交影响F1和F2的情况。这就是你能做的:

git checkout <some-branch from remote 1 from which you get the changes>
git rebase <some-branch from remote 2 on which you wish to push the changes> -- interactive

然后你会得到一个文本编辑器,让你选择提交。 将仅影响F2的所有提交标记为pick,仅将F1视为skip,将其他提交为edit

您将能够编辑每个单独的提交。每次都执行以下

git checkout HEAD~1 F1
git commit --amend
git rebase --continue

你正在做的是:对于每个脏提交(编辑两个文件)checkout F1,就像提交之前一样,并以这种方式提交(即撤消对F1的更改)