强制git cherry-picks更新嵌套存储库中未跟踪的文件

时间:2014-05-24 22:21:11

标签: git git-cherry-pick

我目前正在使用最近因为近距离采购而被拆散的存储库 - 模块已被移动到他们自己的存储库中,远离主要的'之一。

panel/
    file.a
    file.b
    module1/ [untracked by panel repository, instead tracked in own repository now]
        templates/
            base.html
            ...
        views.py

但是,当module1存储库仍然是panel的一部分时,仍然会在此分解之前提交工作。我的问题是处理此次细分之前和之后的提交 - 我目前正在尝试cherry-pick提交panelmodule1中的文件更改,两个存储库都是panel的一部分时创建的提交。 (没有目录结构已更改,只有git的存储库视图)

当我在主存储库的目录中挑选时:

nasonfish@nasonfish ~/P/P/p/panel2> git cherry-pick 8b7316d1ebff49e95a7971f88e669f50d9cbbf86
error: refusing to lose untracked file at 'panel/module1/views.py'
error: refusing to lose untracked file at 'panel/module1/templates/module1/view-hdr.html'
error: refusing to lose untracked file at 'panel/module1/templates/module1/view-base.html'
error: refusing to lose untracked file at 'panel/module1/templates/module1/base.html'
error: could not apply 8b7316d... mybranch: This is my commit
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

我可以看到我并不打算将存储库中的文件删除或添加到主存储库,因为这只是撤消了分离并组合了存储库 - 但我试图制作{{ 1}}将该提交应用于基本存储库和子存储库中的文件,而不合并两者。那么,有没有办法强制git像一个单独的嵌套存储库中的文件一样,以某种方式允许从存储库分离之前进行挑选提交?

1 个答案:

答案 0 :(得分:0)

在考虑了如何将某个提交应用于文件而不考虑其存储库之后,我的目光转向生成要应用的补丁。

我首先发现了how to create a patch from a commit hash

git format-patch -1 8b7316d1ebff49e95a7971f88e669f50d9cbbf86

然后我使用git apply应用我的补丁(因为我无法确定补丁是否会与我所拥有的完全合并,我应用了--reject开关以便合并我能做的事情。转出不适用于手动合并的内容):

git apply 0001-permissions-Add-a-new-user-permissions-system-that-c.patch --reject

然后我在我的存储库中搜索了包含我必须手动合并的补丁的.rej个文件,并使用这些文件将更改应用到它们要合并到的文件中。

之后,我知道我已经应用了跨越我的存储库的更改,我只需将目录更改为每个存储库并使用git commit来指示我已合并的内容。