自动CI工具将修订从release
合并到master
。但是应该忽略发布分支中的某些提交。
让我们考虑以下示例:
发布分支包含两个修复程序:fix-1
应该被忽略,fix-2
应该被合并到master
。
base ----------- merge-fix-2 - master
\ /
fix-1 --- fix-2 --- release
通过此配置,fix-2
的合并还包括fix-1
的更改。
为避免这种情况,我需要 empty merge-commit(ignore-fix-1
),仅用于通知Git fix-1
已被合并,在以后的合并中应忽略这些更改。 :
base -- ignore-fix-1 -- merge-fix-2 -- master
\ / /
fix-1 ----- fix-2 ---- release
问题是::如何ignore-fix-1
空提交?
答案 0 :(得分:1)
您可以将-s ours
传递给git merge
以使用“我们的”合并策略,该策略完全可以满足您的需要:通过完全忽略传入的分支来执行“合并”。
也就是说,这至少对您的历史来说是一件令人惊奇的事情。我假设您有一个令人信服的理由不想在master
中进行修补,但是如果这种情况经常发生,则可能需要考虑采用其他方法,例如:
release
分为stable
(对于fix-2
)和production
(对于fix-1
),然后经常将stable
合并到 master
和production
。答案 1 :(得分:0)
有几种方法可以做到这一点。可能最简单的方法是先正常进行合并,然后进行git revert <commit ID of fix-1>
。
base ----------- merge-release - revert-fix-1 [master]
\ /
fix-1 - fix-2 [release]
这样做的好处是,当fix-1
再次合并到release
中时,无需重新添加master
。
更大的问题是,为什么您的release
分支中有提交而又不带回到master
中。通常,紧急修补程序直接提交到release
分支。如果您仅需要偶尔执行此操作(例如进行特别草率的修补程序),则可以使用git revert
。如果您计划定期执行此操作,则此工作流程将无法维护,您应询问有关工作流程本身的问题。