git merge:删除我想保留的文件!

2023-12-14

如何在 git 中合并两个分支,同时保留必要的来自分支的文件?

合并两个分支时,如果一个文件在一个分支中被删除,而在另一个分支中没有被删除,则该文件最终将被删除。

例如:

  • 当您创建新分支时,master 中存在一个文件
  • 您从 master 中删除该文件,因为我们还不需要它
  • 您在分支中进行更改以添加功能,这依赖于现有的文件
  • 你在 master 中修复了错误(不能丢弃)
  • 有一天你合并了,文件就消失了!

如何重现:

  1. 使用一个文件创建一个 git 存储库。

    git init
    echo "test" > test.txt
    git add .
    git commit -m "initial commit"
    
  2. 创建分支

    git branch branchA
    
  3. 删除master中的文件

    git rm test.txt
    git commit -m "removed file from master"
    
  4. 在branchA中进行任何不触及已删除文件的更改(必须保持不变以避免冲突)

    git checkout branchA
    touch something.txt
    git add .
    git commit -m "some branch changes"
    

从这里开始,我发现合并这两个分支的任何方法都会删除 test.txt 文件。假设我们是依赖于文件 for branchA, 这是个大问题。


失败的例子:

Merge 1

git checkout branchA
git merge master
ls test.txt

Merge 2

git checkout master
git merge branchA
ls test.txt

Rebase 1

git checkout branchA
git rebase master
ls test.txt

这是一个有趣的问题。因为你之后删除了该文件BranchA被创建,然后正在合并master into BranchA,我不确定 Git 如何能够意识到存在冲突。

错误合并后,您可以撤消,然后重新合并,但添加回文件:

git checkout HEAD@{1} .
git merge --no-commit master
git checkout master test.txt
git add test.txt
git commit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git merge:删除我想保留的文件! 的相关文章

随机推荐

  • 如何在 PHP 文件中获取 jQuery 变量值 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么它们不起作用以及预期结果 也可以看看 Stack Overflow 问题清单 有关您编写的代码的问题必
  • 在带有 html 和正文显示的窗口中截断的页面:隐藏

    注 基于以下答案 aavrug and kukkuz 我重新组织了我的问题 以便它充分传达我想问的内容 我有一个页面布局 其中有一个顶部导航栏和一个侧面导航栏 它还具有显示数据的主要部分 因为我只想滚动主要部分 所以我设置了html bod
  • 更新对象数组中的对象属性的最有效方法

    我想知道更新存储在包含 10k 项的数组中的对象属性的最有效方法是什么 例如 如果我有一个包含这样的对象的数组 name Price 如果数组已包含该元素 我想替换或更类似于更新价格值 检查数组是否包含名称 x 的对象 如果是 则将价格替换
  • 如何检测 Godot 中的碰撞?

    我有3个场景 一个名为 KinematicBody2D tscn 的 KinematicBody2D 节点 该场景是一个玩家在屏幕上从左向右移动 我还有一个名为 mob tscn 的场景 它是一个igidbody2d节点 这个场景只有精灵和
  • 使用 Javascript 从父窗口访问子窗口元素

    我需要从父窗口访问子窗口元素 我在下面编写了示例片段 父级 HTML
  • 如何获取任何应用程序上下文根的文件系统路径

    我正在开发 Web 应用程序 我在我的 jsp 上调用request getContextPath 但奇怪的是我得到了地址 streetshop 然后我附加一些路径作为request getContextPath abc 并创建文件夹 然后
  • Spring 加密属性文件中的值

    我目前正在使用UserDetailsService从用户文件中获取值
  • Kinetic js 中的可编辑文本选项

    我想添加Textbox或可编辑元素 为用户提供编辑文本的选项 这是我当前的代码 var text new Kinetic Text text Sample Text gt i want to edit this text x 50 y 10
  • OPENMP F90/95 嵌套 DO 循环 - 串行实现的问题得到改进

    我已经进行了一些搜索 但找不到任何与我的问题相关的内容 很抱歉 如果我的问题是多余的 无论如何 正如标题所述 我在代码的串行实现方面无法获得任何改进 我需要并行化的代码片段如下 这是带有 OpenMP 的 Fortran90 do n 1
  • 为什么当我添加节点时我的 cassandra 吞吐量没有提高?

    这是一个新手问题 我尝试做功课 但我一直在尝试了解 cassandra 如何像广告中那样线性扩展 当我针对单个 cassandra 节点运行时 我获得了合理的插入率 以下是一些相关信息 CentOS 6 5 java 1 7 0 71 ca
  • 检查范围内的数据类型

    我正在尝试使用 VBA 函数验证用户选择的范围内所有单元格的数据类型是否相同 我有以下代码 简化 它在大多数情况下都有效 Dim vTempRange As Variant Dim vCell As Variant vTempRange D
  • 解析标记范围和未标记范围中的组件

    我尝试为 AutoFac 中的一些标记生命周期提供不同的服务 但似乎无法掌握它 我尝试过使用自定义生命周期每个匹配生命周期范围的实例 默认情况下 但这没有用 我编写了一个测试来说明我正在尝试做的事情 TestMethod public vo
  • 调整画布大小 - 保持最大宽度或高度,无需拉伸/填充

    我有一个关于在 javascript 中使用 canvas 的 html5 游戏的问题 我希望向玩家显示的画布包含 1920 的 canvas width 或 1080 的 canvas height 以便看不到填充 这意味着如果玩家使用其
  • 两个单选按钮同时选择

    我正在添加一个单选按钮divjsp页面的 但是新添加的单选按钮始终处于选择状态 当我单击第二个单选按钮时 它也会选择 有没有脚本可以写这个 div style padding left 15px div Entry Mode Code wa
  • 获取私人 bitbucket 存储库,给出 403 禁止

    执行时go get bitbucket org 我收到这个错误 yash jain projectname go get bitbucket org go bitbucket org https api bitbucket org 2 0
  • UICollectionView 收到索引路径不存在的单元格的布局属性

    我使用 UICollection 视图来显示网格布局中的项目 对于数据源 我使用 5 5 维数组 我还为节中的 numberOfItems 返回 5 为 numberOfSections 返回 5 然后我的应用程序也因以下错误而崩溃 UIC
  • 使用 C# 是否可以测试文件是否持有锁

    背景 我使用文件偏移量和文件流锁定 解锁方法来控制读 写访问 我正在使用以下代码来测试文件当前是否持有锁 try fs Lock RESERVED BYTE 1 fs Unlock RESERVED BYTE 1 rc 1 catch rc
  • 在 VBA 中使用 InStr 进行多字符串搜索

    我正在检查名称文本框是否以 Mr Mrs Ms 等开头 我创建了一个函数 但无法比较多个字符串 这是我的代码 Checking whether name is starts with Mr Mrs Ms Dr or not If Not F
  • 用外行人的话来说,什么是 Unobtrusive Javascript? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 用外行人的话来说 什么是 Unobtrusive Javascript 举一个例子可以很好地帮助我理解 查看维基百科文章 不引人注目的 JavaScript Unobtrusiv
  • git merge:删除我想保留的文件!

    如何在 git 中合并两个分支 同时保留必要的来自分支的文件 合并两个分支时 如果一个文件在一个分支中被删除 而在另一个分支中没有被删除 则该文件最终将被删除 例如 当您创建新分支时 master 中存在一个文件 您从 master 中删除