从Git分支中删除功能,然后将其合并回来?

问题描述 投票:1回答:1

说我有两个分支:

  1. 发展
  2. 生产

我现在在两个分支上都有一个文件,但是我想从生产分支中删除一些<li>元素,但是将它保存在我的开发分支中。

所以我进入并提交我的生产分支删除该元素。

后来我决定将这些<li>元素添加回生产分支(特别是我更新的Development分支中的<li>元素)。

如果我只是简单地进行合并,则不会添加元素。在这种情况下,更新Production分支的最佳方法是什么?

git github merge branch branching-and-merging
1个回答
1
投票

没有办法通过一种通用的方法来删除一个分支中的数据,然后通过不同的分支将这些数据合并回来,同时将其他变化保持在各自的分支中(稍后将详细介绍)。但是可能有一种特定于您的工作流程的方法。

Explicit Solution

如果你的master分支没有其他变化,那么你正在寻找:

git checkout master
vim <file where you delete lis>
git add <file>
git commit

git checkout development
git merge master
git revert master

让我解释一下那里发生的事情:

  1. 您在master分支中进行更改 - 在那里删除所有<li>并提交更新。
  2. 之后,您切换到开发分支并在那里合并您的master分支。这样两个分支都在同一页面上。因此,开发分支中的所有后续更改都将是Git可见的更改为“与master相比的差异” - 并且它们将在未来的开发分支到master的合并中应用。
  3. 然后git revert master在开发分支中创建了一个新的提交,其中最后在master分支中进行了更改的反转 - 即它有效地添加了<li>,因为它们的删除是master中的最后一次提交。

之后,当你将development合并到master时,它将恢复你的<li>

另一个特别要强调的是:只有当master分支除了li移除之外没有任何其他变化时,它才能正常工作。那是因为当你执行git merge master时,它会将所有master更改带到开发分支,这可能是不受欢迎的。

请注意,您无法避免将master合并到开发分支,因为它们需要有一个共同的祖先提交,其中<li>被删除。此外,开发分支需要有一个显式提交,其中<li>被添加回来。只有使用此设置,当您将开发分支合并到master时,Git将在稍后应用该提交。

Implicit Solution

在这种情况下,通用的建议方法是记住提交ID,删除lis。稍后,您需要在将开发分支合并到master之后手动还原它:

git checkout master
git merge development

git revert <id of the commit where you deleted li>

可能还有其他解决方案,但它们更多是组织解决方案,或者除了简单的Git之外还需要其他工具。

© www.soinside.com 2019 - 2024. All rights reserved.