【问题标题】:Removing Functionality from a Git Branch, and later merging it back in?从 Git 分支中删除功能,然后将其合并回来?
【发布时间】:2019-08-29 18:36:02
【问题描述】:

假设我有两个分支:

  1. 发展
  2. 生产

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

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

稍后我决定将那些<li> 元素添加回生产分支(特别是从我更新的开发分支中的<li> 元素)。

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

【问题讨论】:

  • git revert <the_commit_where_you_took_them_out>?

标签: git github merge branch branching-and-merging


【解决方案1】:

没有办法有一种通用方法来删除一个分支中的数据,然后通过不同的分支合并该数据,同时将其他更改隔离在各自的分支中(稍后会详细介绍)。但您的工作流程可能有一种特定的方法。

显式解决方案

如果您的 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 分支中进行更改 - 在那里删除所有 &lt;li&gt; 并提交更新。

  2. 之后,您切换到开发分支并在那里合并您的master 分支。这样两个分支都在同一页面上。因此,开发分支中的所有后续更改都将是 Git 可见的“与主分支相比的差异”的更改 - 并且它们将应用于未来开发分支与主分支的合并。

  3. 然后git revert master 在开发分支中创建一个新提交,并反转最后在master 分支中所做的更改 - 即它有效地将&lt;li&gt; 添加回来,因为它们的删除是@ 中的最后一次提交987654329@.

稍后,当您将development 合并到master 时,它将在那里恢复您的&lt;li&gt;

再次强调一点:只有当master 分支除了li 删除之外没有任何其他更改时,它才能正常工作。这是因为当您执行 git merge master 时,它会将所有 master 更改带到开发分支,这可能是不希望的。

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

隐式解决方案

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

git checkout master
git merge development

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

可能还有其他解决方案,但它们更具组织性,或者需要其他工具,而不仅仅是简单的 Git。

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 2015-12-22
    • 1970-01-01
    • 2020-09-14
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多