git rerere不自动提交自动更新的合并解决方案

fquxozlt  于 2023-01-28  发布在  Git
关注(0)|答案(1)|浏览(167)

我正在尝试使用共享的rerere缓存来自动化一次性的集成/测试分支。
其思想是当分支被推送时,rerere缓存应该是最新的,这样这些合并总是通过。然而,它们并不:

>>> git merge --no-ff invoicing
Staged 'analysisrequest.py' using previous resolution.
Staged '__init__.py' using previous resolution.
Auto-merging __init__.py
CONFLICT (content): Merge conflict in __init__.py
Auto-merging analysisrequest.py
CONFLICT (content): Merge conflict in analysisrequest.py
Automatic merge failed; fix conflicts and then commit the result.

现在rerere已经完成了它记忆中的解决方案,不存在实际的冲突。我可以运行git commit,然后继续,但是我的integration-test-build脚本看到了一个错误。我尝试将--rerere-autoupdate添加到git merge命令中,但是没有任何变化。我已经配置了repo来启用和自动应用rerere匹配。
我怎样才能让git merge使用我之前的解决方案,并且在它们足够的情况下继续运行呢?

qv7cva1a

qv7cva1a1#

即使有了--rerere-autoupdate标志,git merge似乎也不愿意在没有人工输入的情况下自动完成合并,而是以错误状态执行,集成工具拒绝继续。
我不知道你的自动合并是如何发生的,也就是说,你是否可以改变执行的Git命令,如果可以,那么你可以执行下面的命令。

git merge --no-ff branch-to-merge --rerere-autoupdate
if [[ $(git rerere diff) ]]
then
    $(exit 1)
else
    git commit --no-edit
fi
  • git rerere diff列出了rerere之后需要解析的文件。
  • --no-edit是防止打开提交消息编辑器所必需的。
  • 如果rerere无法干净地合并所有更改,此语句仍将返回错误状态,并且合并将不会提交。
  • 提交消息仍将包含冲突的文件。
  • exit 1需要在$()内部,除非你想退出你的shell。(猜猜我是怎么知道的。:-)

相关问题