如何进行空合并提交(忽略更改)?

时间:2018-08-09 20:17:11

标签: git

自动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 提交?

2 个答案:

答案 0 :(得分:1)

您可以将-s ours传递给git merge以使用“我们的”合并策略,该策略完全可以满足您的需要:通过完全忽略传入的分支来执行“合并”。

也就是说,这至少对您的历史来说是一件令人惊奇的事情。我假设您有一个令人信服的理由不想在master中进行修补,但是如果这种情况经常发生,则可能需要考虑采用其他方法,例如:

  1. release分为stable(对于fix-2)和production(对于fix-1),然后经常将stable合并到 masterproduction
  2. Cherry-pick版本修复程序,而不是合并它们。

答案 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。如果您计划定期执行此操作,则此工作流程将无法维护,您应询问有关工作流程本身的问题。