合并git分支,其中一个分支上的文件被删除,而I don';我不想让他们这样

合并git分支,其中一个分支上的文件被删除,而I don';我不想让他们这样,git,Git,我继承了一份糟糕的回购协议,我想知道我是否能挽救它 因此,origin/master如下所示: 计划/ 子项目-0/ a b 子项目-1/ c d 原点上还有两个“特征分支”,看起来像这样 原点/特征/工作于-0: 计划/ 子项目-0 a b +e 子项目-1 c -d 从本质上讲,他们不仅对sub-project-0进行了更改,还从sub-project-1中删除了文件。这也是系统性的,为子项目1添加特性的分支机构也有这个问题 我想将所有内容合并到master中

我继承了一份糟糕的回购协议,我想知道我是否能挽救它

因此,origin/master如下所示:

  • 计划/
    • 子项目-0/
      • a
      • b
    • 子项目-1/
      • c
      • d
原点上还有两个“特征分支”,看起来像这样

原点/特征/工作于-0:

  • 计划/
    • 子项目-0
      • a
      • b
      • +e
    • 子项目-1
      • c
      • -d
从本质上讲,他们不仅对sub-project-0进行了更改,还从sub-project-1中删除了文件。这也是系统性的,为子项目1添加特性的分支机构也有这个问题


我想将所有内容合并到master中,有没有办法在合并时告诉git从master获取
d
的版本,即使它没有被修改,技术上也没有与任何内容冲突?

您可以为此创建.gitatibutes文件。在它里面,您必须通过指定正确的合并策略来定义在合并过程中要保持不变的文件

请在此处阅读更多信息:

您可以为此创建.gitaributes文件。在它里面,您必须通过指定正确的合并策略来定义在合并过程中要保持不变的文件

请在此处阅读更多信息:

幸运的是,在这种情况下,Serge似乎是对的,事实上,在提交合并之前,只签出文件的正确版本更容易

在这种情况下,它只是

git merge --no-ff --no-commit feature/work-on-0
git checkout HEAD -- sub-project-1/
它保留了d,并允许它与功能/工作1不冲突

我查看了.gittributes解决方案,但似乎没有达到预期效果


一个问题是,当feature/work-on-0合并到中时,没有进行合并,这只是一个快进过程,master没有任何更改,但一旦feature/work-on-1合并到其中,然后,我想根据文件夹保留他们的一些文件和我们的一些文件。

幸运的是,在这种情况下,Serge似乎是正确的,事实上,在提交合并之前只签出文件的正确版本更容易

在这种情况下,它只是

git merge --no-ff --no-commit feature/work-on-0
git checkout HEAD -- sub-project-1/
它保留了d,并允许它与功能/工作1不冲突

我查看了.gittributes解决方案,但似乎没有达到预期效果


一个问题是,当feature/work-on-0合并到中时,没有进行合并,这只是一个快进,master没有任何更改,但一旦feature/work-on-1合并到该文件夹中,则我希望保留他们的一些和我们的一些,具体取决于文件夹。

这在允许快进的情况下不起作用。因此,也禁用快进合并。这在允许快进的情况下不起作用。所以,也禁用快进合并。让它合并,然后从“主”分支的正确提交中检查“d”的版本可能会更容易。是的,除了d是许多不同的文件,我不想为它们找出模式。我想你在任何情况下都需要找出所有不同的模式,使用任何策略。如果这很简单,不允许遗留丢失的文件,您可以使用类似“git ls files”的东西来处理文件列表,或者创建自己的合并脚本,该脚本将首先根据BugHunter的awser中的.git属性检查丢失的文件。你可以将它应用于所有文件。让它合并,然后从“主”分支的正确提交中检查“d”的版本可能会更容易。是的,除了d是许多不同的文件,我不想为它们找出模式。我想你在任何情况下都需要找出所有不同的模式,使用任何策略。如果这很简单,不允许遗留丢失的文件,您可以使用类似“git ls files”的东西来处理文件列表,或者创建自己的合并脚本,该脚本将首先根据BugHunter的awser中的.git属性检查丢失的文件。您可以将其应用于所有文件。