git - 从 Git 分支中删除功能,然后将其合并回来?
问题描述
假设我有两个分支:
- 发展
- 生产
我现在在两个分支上都有一个文件,但我想<li>
从生产分支中删除一些元素,但将其保留在我的开发分支中。
所以我进入并提交到我的生产分支删除该元素。
后来我决定将这些<li>
元素添加回生产分支(特别是从<li>
我更新的开发分支中的元素)。
如果我只是进行合并,则不会重新添加元素。在这种情况下,更新生产分支的最佳方法是什么?
解决方案
没有办法有一种通用的方法来删除一个分支中的数据,然后通过不同的分支合并该数据,同时将其他更改隔离在各自的分支中(稍后会详细介绍)。但是可能有一种特定于您的工作流程的方法。
显式解决方案
如果您的分支中没有其他更改master
,那么您正在寻找这个:
git checkout master
vim <file where you delete lis>
git add <file>
git commit
git checkout development
git merge master
git revert master
让我解释一下那里发生了什么:
您在
master
分支中进行更改 - 在那里您删除所有这些<li>
并提交更新。之后,您切换到开发分支并在
master
那里合并您的分支。这样两个分支都在同一页面上。因此,开发分支中的所有后续更改都将是 Git 可见的更改,即“与 master 相比的差异”——并且它们将应用于开发分支到 master 的未来合并中。然后
git revert master
在开发分支中创建一个新的提交,并反转分支中最后所做的更改master
- 即它有效地添加<li>
回来,因为它们的删除是master
.
稍后,当您合并development
到master
它时,它将恢复您的<li>
存在。
再次强调一件特别的事情:只有当分支除了删除master
之外没有任何其他更改时,它才能正常工作。li
那是因为当您执行git merge master
它时,它会将所有master
更改都带到开发分支,这可能是不希望的。
请注意,您无法避免合并master
到开发分支,因为它们需要在<li>
被删除的地方有一个共同的祖先提交。开发分支也需要有一个明确的提交,在哪里<li>
被添加回来。只有使用此设置,Git 才会稍后应用该提交,当您将开发分支合并到master
.
隐式解决方案
在这种情况下,普遍建议的方法是记住您删除li
s 的提交 id。稍后您将需要在将开发分支合并到 master 后手动还原它:
git checkout master
git merge development
git revert <id of the commit where you deleted li>
可能还有其他解决方案,但它们更具组织性,或者需要其他工具,而不仅仅是简单的 Git。
推荐阅读
- c# - 从 mongo 数据库中映射不同的案例
- apache-flink - Flink 中如何管理数据源连接池
- sharepoint - 选择后删除 SharePoint 中的选项。(条件公式)
- angular - firestore firebase storage 以较低的分辨率检索图像
- nfc - 如何正确使用 ISO 15693 命令“获取多块保护状态”?(使用 MSP430 编程)
- docker - 为什么 docker 在挂载 NFS 卷时无法 CHMOD?
- visual-studio - 有没有办法在 Visual Studio 2019 中创建快捷方式来自动选择整个函数?
- php - 如何使用 Codeigniter 从 2 个不同的表中选择数据?
- typescript - 打字稿是否可以从当前类中推断出类型?
- nuget - 使用面向多个框架的 NuGet 打包工具