Git - 分支引入新文件而不删除旧文件

时间:2017-06-14 16:39:31

标签: git github merge

我有一个不寻常的git问题,希望其他人以前做过这件事,并且可以提供见解......

我正在开发工作流程,以便将文件添加到现有的git项目中。通过一系列自动化步骤,我希望创建一个完全空的分支,引入新文件,将这些文件提交到远程分支,然后让用户手动合并新文件,以便新的更改不会自动覆盖/损坏现有项目中的任何内容。

我已经尝试了git checkout --orphan,它没有做我想要的事情b / c它只是创造了一个新的"合并后的历史记录,替换现有分支的内容。您不能像通常合并更改那样合并它们。

我还尝试过正常git checkout -b emptybranch,然后手动删除所有文件并引入新文件。这种情况的问题是我不希望在合并时删除现有文件 - 我只希望新文件包含在新项目中,或者让项目所有者可以看到冲突以便自己合并。 / p>

我想要的是添加/合并新文件而不删除现有分支中存在的任何内容(新分支仅包含新文件,现有分支中没有其他内容)。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

TL; DR执行摘要

我认为你想要addEvent,但是你希望它后跟git checkout --orphan(也许还有git rm -r .这些留下的未跟踪文件。

描述

  

我已经尝试了rm -rf,它没有做我想要的事情b / c它只创建一个“新”历史记录,当合并时,它会替换现有分支的内容。

那不太对劲。 git checkout --orphan做了什么设置,以便现在当前分支的下一次提交本身就是 root commit 。使用--orphan与使用--orphan相同,即 index 仍然充满了它当前所拥有的一切。工作树同样不受干扰。

如果您清空索引(顶层的-b),并且可选择清除工作树(如果有任何剩余的未跟踪文件),然后从这一点开始,来自工作树的git rm -r .新文件将在下一次提交中。 (您可能希望首先提交一个README-ish文件,这通常在新的,完全空的存储库的初始根提交中完成,原因与人们在新存储库中进行此类提交的原因相同。)

稍后,如果你去git add这个分支,Git现在(截至2.9)拒绝该尝试,除非你添加git merge。这是因为在孤立分支和存储库中的其他分支之间没有合并基础。添加--allow-unrelated-histories告诉Git使用合成空提交(实际上,empty tree)作为合并基础。因此,在合并期间,两个分支提示中的所有文件都被视为新添加的,如果识别出任何两个文件(即,在两个提交提交中具有相同的路径名),您将在它们上面获得添加/添加冲突,被迫手动解决这个问题。鉴于你的问题描述,听起来这就是你的问题。