我正在尝试将一个文件的提交复制到另一个远程分支。流程如下图所示:
重要的一点是,我想保留提交的历史记录(所以没有一个合并提交而没有引用谁在远程1中进行了更改)当"复制"文件从一个遥控器到另一个遥控器。 此外,我也不想复制其他文件,因此只需要我想要的文件。
我尝试过git checkout但是一旦我提交了合并,并将其推送到Remote 2,Remote 1的提交就消失了,只有合并提交就在那里。
git cherry-pick可以在这里找到答案吗?
答案 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的更改)