从 Git 分支中删除功能,然后再将其合并回去?
Removing Functionality from a Git Branch, and later merging it back in?
假设我有两个分支:
- 发展
- 生产
我现在在两个分支上都有一个文件,但我想从生产分支中删除一些 <li>
元素,但将其保留在我的开发分支中。
所以我进入并提交到我的生产分支删除该元素。
稍后我决定将那些 <li>
元素添加回生产分支(特别是从我更新的开发分支中的 <li>
元素)。
如果我简单地进行合并,将不会添加回元素。在这种情况下更新 Production 分支的最佳方法是什么?
无法使用通用方法来删除一个分支中的数据,然后通过不同的分支将该数据合并回来,同时保持其他更改隔离在他们各自的分支机构中(稍后会详细介绍)。但是可能有一种方法特定您的工作流程。
显式解决方案
如果您的 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 可见的更改,如 "difference comparing to master" - 并且它们将应用于将来开发分支合并到 master.
然后 git revert master
在开发分支中创建一个新的提交,其中反转了最后在 master
分支中所做的更改 - 即它有效地添加了 <li>
,因为他们的删除是 master
.
中的最后一次提交
稍后,当您将 development
合并到 master
时,它将在那里恢复您的 <li>
。
有一点需要再次强调:只有 master
分支除了 li
删除之外没有任何其他更改,它才能正常工作。那是因为当您执行 git merge master
时,它会将所有 master
更改带到开发分支,这可能是不希望的。
请注意,您无法避免将 master
合并到开发分支,因为它们需要有一个共同的祖先提交,其中 <li>
已被删除。此外,开发分支需要有一个明确的提交,其中 <li>
被添加回来。只有使用此设置 Git 才会在稍后将开发分支合并到 master
.
时应用该提交
隐式解决方案
在这种情况下,普遍建议的方法是记住您删除 li
的提交 ID。稍后您需要在将开发分支合并到主分支后手动恢复它:
git checkout master
git merge development
git revert <id of the commit where you deleted li>
可能还有其他解决方案,但它们更具组织性或需要其他工具,而不仅仅是简单的 Git。
假设我有两个分支:
- 发展
- 生产
我现在在两个分支上都有一个文件,但我想从生产分支中删除一些 <li>
元素,但将其保留在我的开发分支中。
所以我进入并提交到我的生产分支删除该元素。
稍后我决定将那些 <li>
元素添加回生产分支(特别是从我更新的开发分支中的 <li>
元素)。
如果我简单地进行合并,将不会添加回元素。在这种情况下更新 Production 分支的最佳方法是什么?
无法使用通用方法来删除一个分支中的数据,然后通过不同的分支将该数据合并回来,同时保持其他更改隔离在他们各自的分支机构中(稍后会详细介绍)。但是可能有一种方法特定您的工作流程。
显式解决方案
如果您的 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 可见的更改,如 "difference comparing to master" - 并且它们将应用于将来开发分支合并到 master.然后
git revert master
在开发分支中创建一个新的提交,其中反转了最后在master
分支中所做的更改 - 即它有效地添加了<li>
,因为他们的删除是master
. 中的最后一次提交
稍后,当您将 development
合并到 master
时,它将在那里恢复您的 <li>
。
有一点需要再次强调:只有 master
分支除了 li
删除之外没有任何其他更改,它才能正常工作。那是因为当您执行 git merge master
时,它会将所有 master
更改带到开发分支,这可能是不希望的。
请注意,您无法避免将 master
合并到开发分支,因为它们需要有一个共同的祖先提交,其中 <li>
已被删除。此外,开发分支需要有一个明确的提交,其中 <li>
被添加回来。只有使用此设置 Git 才会在稍后将开发分支合并到 master
.
隐式解决方案
在这种情况下,普遍建议的方法是记住您删除 li
的提交 ID。稍后您需要在将开发分支合并到主分支后手动恢复它:
git checkout master
git merge development
git revert <id of the commit where you deleted li>
可能还有其他解决方案,但它们更具组织性或需要其他工具,而不仅仅是简单的 Git。