更换挂钩
如果您能够更改hooks,你可以只添加一个切换 https://stackoverflow.com/a/51665074/10095231对于每个
一。或者只是使用脚本临时重命名给定的hook,
正如评论的 https://stackoverflow.com/questions/32562125/bypass-pre-commit-hook-during-git-revert-continue#comment52980136_32562125.
无论哪种方式都会有选择地跳过有问题的hook同时让
其他运行正常。这确保了其他检查的发生(如果存在),
例如提交消息验证commit-msg
hook.
承诺
如果这不适用,还有一个替代方案:
通常,当操作因冲突而停止时,修复它后您可以
赶紧跑
git commit
代替
git $operation --continue
这适用于revert
, merge
, cherry-pick
可能还有其他人(尽管
在rebase
它的行为可能有所不同,因为它是一系列操作)。
因此,如上所述,要绕过hooks,你只需添加--no-verify
:
git commit --no-verify
Note:上面的功能似乎没有记录,但它 WorksForMe(tm)。
从差异strace git commit
and strace git revert --continue
, 这
前者做了很多其他事情(分别是 515 行和 173 行),例如
检查变基是否正在进行并在中创建一些临时文件$GIT_DIR/objects
。例子:
stat(".git/MERGE_HEAD", 0x7ffefb5d0760) = -1 ENOENT (No such file or directory)
stat(".git/rebase-apply", 0x7ffefb5d0620) = -1 ENOENT (No such file or directory)
stat(".git/rebase-merge", 0x7ffefb5d0620) = -1 ENOENT (No such file or directory)
stat(".git/CHERRY_PICK_HEAD", 0x7ffefb5d0760) = -1 ENOENT (No such file or directory)
stat(".git/BISECT_LOG", 0x7ffefb5d0620) = -1 ENOENT (No such file or directory)
stat(".git/REVERT_HEAD", {st_mode=S_IFREG|0644, st_size=41, ...}) = 0
lstat(".git/REVERT_HEAD", {st_mode=S_IFREG|0644, st_size=41, ...}) = 0
openat(AT_FDCWD, ".git/REVERT_HEAD", O_RDONLY) = 4
但结果似乎是相同的:他们用以下命令打开编辑器
git 生成的消息(例如:“这将恢复提交 [...]”)并在之后提交
退出。我曾多次使用替代形式,但从未有过
至少有问题(顺便说一句,我可能在相同的情况下发现了它
设想)。