来自refs / for / master的自动Gerrit rebase可能会导致master中有超过1个历史记录条目

时间:2014-04-28 05:54:07

标签: git history gerrit

在Gerrit上执行操作rebase时,我发现从refs / for / master移动时,可以在master上创建多个历史记录项。

  1. 提交将具有相同的更改ID

  2. 提交将有不同的SHA-1

  3. 第一次提交没问题,下一次提交是空的(没有附加文件)

  4. 此类额外提交正在破坏主历史记录。这种行为可能是什么原因?

3 个答案:

答案 0 :(得分:1)

听起来像是合并提交。在这种情况下,提交消息通常从上次提交中复制

答案 1 :(得分:1)

你必须更具体,但是,

  

当进行操作rebase时...第一次提交是正常的,下一个提交是空的...这样的额外提交会破坏主历史记录。这种行为可能是什么原因?

Git历史是非线性的,当你进行rebase时,git(gerrit)可能必须合并来自两个开发历史的更改,这两个开发历史本身可能包含合并提交 - 这些可能看起来是空的。但是,您也可能受此issue影响 - 请检查您的使用情况是否正确。

  

提交将有不同的SHA-1

这通常是预期的。请阅读3.6 Git Branching - Rebasing

答案 2 :(得分:0)

我找到了另一种更优雅的解决方案(在我看来),以消除空提交消息。

在Gerrit项目选项中,如果git能够自动与rebase合并(没有需要人工干预的冲突),您可以设置以下选项以避免空工作项:

  
      
  • 项目 - >一般 - >提交类型 - >必要时重新启动
  •   
  • 项目 - >一般 - >自动解决冲突 - > TRUE
  •   

事实上,有了这样的策略,gerrit会告知自动合并是不可能的,并且什么都不做。另一方面,如果rebase +自动合并成功,则只有一个用于/ master->主工作项。