【问题标题】:Why Git is not showing merge conflicts when a deleted file in branch is merged with master that has that file为什么当分支中的已删除文件与具有该文件的主文件合并时,Git 不显示合并冲突
【发布时间】:2014-07-06 19:18:46
【问题描述】:

在 Master Git 中有 Core-src.AFeature1-src.B。 然后创建一个新分支,并在该分支中删除 Core-src 文件夹并创建一个新文件 Feature1-src.New

。 现在,当我们将分支合并到 master 时,之前具有 Core-src 文件夹的 Master 将被删除。

我期望在 Windows Git GUI 中引发合并冲突。

//编辑子问题 有什么方法可以保护某个文件夹 Core-src 免受分支的任何修改。

【问题讨论】:

    标签: git github merge


    【解决方案1】:

    没有理由会发生冲突:当你合并master时,你带来了“删除src”的变化,所以它只是被应用了。

    如果您在合并之前在master 分支的src 目录中创建了一个文件,则可能会发生冲突。因为合并必须处理冲突的更改:

    • 删除src
    • src中添加一个文件

    【讨论】:

    • 防止分支删除src文件夹的另一种优雅方法是什么。在创建分支之前有什么办法可以通知它忽略src
    • 以这种方式工作很荒谬,分支可能并不总是需要所有文件作为其主文件,而只是 bcoz 主文件需要其重要文件,它应该不断修改这些文件以防止分支删除它。
    • 谁删除了src?谁合并了?你,还是其他贡献者?如果是你,那么你可以做很多事情来阻止自己删除东西。如果不是你,请移除其他用户的权限!
    【解决方案2】:

    如果在branchA 中删除了src,那么在将该分支合并到master 时,如果master 已更改src,则可能会发生冲突,例如以下任何一种方式:

    • 更改了src 中的文件
    • src 中添加了一个文件
    • 更改了src 中文件的权限
    • 重命名src

    也许还有其他人。如果master 上的src 没有发生与src 被删除冲突的更改,则合并将正常成功。

    默认情况下,Git 提交合并。如果您想避免这种情况(以便您可以先查看更改),可以使用以下命令:

    git merge --no-commit --no-ff branchA
    

    这将执行合并,但不会提交。此时,如果您注意到src 已被删除,您可以在提交之前将其恢复,使用以下命令:

    git checkout HEAD -- src
    

    最后,奇怪的是,有人会在target 中创建一个文件,该文件通常用于构建产品,不应受版本控制。当target 未在.gitignore 中列出时,这通常会发生错误。

    【讨论】:

    • 不要介意用于说明情况的命名。
    • 这提供了一些解决方案来恢复文件。有什么方法可以保护某些文件不被修改或删除,以免从分支合并。说一个core-src,我不希望通过从在'Feature1-src'上完成主要工作的分支合并来进行任何更改,无论他们可能在分支中的core-src 中所做的任何更改。
    • 为此,我知道这种方法:git-scm.com/book/en/…——虽然我从未使用或测试过它。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多