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

Cam*_*ell 13 git git-rerere

我正在尝试使用共享的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.
Run Code Online (Sandbox Code Playgroud)

在这一点上,rerere已经上演了它所记住的决议,并且不存在实际的冲突.我可以运行git commit,然后继续,但我的集成测试构建脚本会看到错误.我已经尝试添加--rerere-autoupdate到git merge命令,但没有任何改变.我已将repo配置为启用并自动应用rerere匹配.

我怎么能要求git merge使用我以前的分辨率并且如果它们足够的话可以继续而不失败?

Jos*_*uss 11

即使有了--rerere-autoupdate旗帜,git merge似乎也不愿意在没有人工输入的情况下自动完成合并.在这种情况下,它会以错误状态执行,并且您的集成工具拒绝继续.

我不知道你的自动合并是如何发生的,即你是否可以改变执行的git命令.如果可以,则可以执行以下命令.

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

  • 避免“$(exit 1)”的常用方法是使用标准 UNIX“false”(或“true”)命令 (3认同)