挂钩运行时pre-commit
,存储库可能不干净。因此,如果您天真地运行您的测试,它们将不会与您正在提交的内容相冲突,而是与您的工作树中发生的任何事情相冲突。
显而易见的事情是git stash --keep-index --include-untracked
在开头pre-commit
和git pop
结尾处。这样您就可以针对(纯)索引进行测试,这正是我们想要的。
git add --patch
不幸的是,如果您使用(特别是如果您编辑大块),这会生成合并冲突标记,因为stash@{0}
提交后的内容可能与工作树不匹配。
另一种常见的解决方案是克隆存储库并在新的临时存储库中运行测试。这样做有两个问题:
- 我们还没有提交,所以我们不能轻易地获得我们将要提交的状态的存储库的副本;和
- 我的测试可能对当前工作目录的位置很敏感,例如由于本地环境配置。
git stash --keep-index --include-untracked
如何在不引入合并冲突标记且不修改 post-commit 的情况下将我的工作树恢复到它之前的任何状态HEAD
?