在非主分支(仅)中添加文件,但不在主分支中添加文件

时间:2019-12-19 14:10:09

标签: git gitlab

我正在使用 gitlab 进行项目托管,并使用ci进行项目。 我有一个用例,其中开发人员必须在他/她的分支中添加文件。但是,在将该分支合并到master分支时,不应将一个特定文件添加到master分支。

我尝试了以下解决方案:

  • 我将文件名(testfile)添加到master的gitignore并推送了更改。
  • 然后,我签出一个分支“ dev”,并使用以下命令添加了文件“ testfile”:

    git add -f测试文件

  • 文件已添加,我已提交并推送了更改。
  • 但是,当我将“ dev”分支合并到master时,测试文件也在master分支中合并(添加)。

    P.S。从技术上讲,应该不是这样,因为我只在dev分支上强制添加了文件,而在合并时我什至没有收到警告消息。

2 个答案:

答案 0 :(得分:3)

我建议阅读.gitignore的内容。它对合并没有影响,也不打算这样做。您的评论

  

P.S。从技术上讲,事实并非如此,因为我只在dev分支上强制添加了文件,而在合并时我什至没有收到警告消息。

对于加力(通常是分段)如何工作提出了一些困惑。一旦已暂存(强制或以其他方式)并提交了文件,就不必再次暂存以进行合并。 (在技术层面上,阶段条目 是在合并过程中创建的,但是此过程并不以排除规则为条件,因为内容已经提交。如果有帮助,我想您可以想到在此过程中看到的每个文件强制将合并添加到合并的暂存区域。)

更普遍的是,期望分支具有相同内容的不同版本(反映不同的变化线)[1]。某个文件永久位于某个分支而不是另一个分支的想法与git的工作方式不符。

正如EncryptedWatermelon所建议的那样,您可以创建一些手动过程以产生所需的结果,但是我希望经常会忘记那些手动步骤。如果您确实希望开发人员讨厌您,则可以创建服务器端挂钩,以拒绝对包含该文件的主文件的任何提交;然后,当他们忘记遵循手动过程时,某个时候以后,当他们尝试推送主服务器时,服务器将拒绝该推送,而他们必须返回并对其进行修复。

或者,您可以重新思考您的用例,并提出一种合理的行为,该行为符合git的工作方式,并且符合git的实际需求。由于您尚未解释用例,因此我无法提供有关外观的更多详细信息。


[1]在单个回购中可能有不相关的分支(甚至分支组),而内容不需要匹配;但这是完全不同的用例,相当于只有一个存储库包含通常多个存储库。但是,如果要合并两个分支,则期望它们是相同内容的版本

答案 1 :(得分:0)

在合并中使用--no-commit标志,然后还原文件

git merge --no-commit dev
git checkout HEAD <FILE>
git add -A
git commit