我不这么认为(例如,时间戳已更改,如“ GIT:将本地更改添加到非当前分支”中所述)。
最简单的方法是将您的 IDE 配置为自动刷新。
例如,对于 Eclipse,这将是设置"Refresh on Access"。
另一种方法是保留另一个本地存储库(一个没有本地修改的存储库,因此无需存储)。
您的预提交挂钩保留在您当前的存储库中。
您的钩子将使用您当前的索引(您添加的),但另一个工作树存储库。
为此,您需要提交:
git commit --work-tree=/path/to/other/local/repo -m "my commit message"
如果钩子没有失败,您可以让提交后钩子(仍在您当前的仓库中)转到另一个仓库,并拉出当前分支,更新其(原始)工作树。
cd /path/to/other/local/repo
git --work-tree=/path/to/other/local/repo --git-dir=/path/to/other/local/repo/.git pull
(注意你的钩子,它存在于你的第一个 repo 中,需要指定work-tree
和git-dir
第二个 repo,才能正常工作)。
这是一个简化的提议,因为它没有考虑您正在处理的当前分支(它假设只有一个分支“主”)。
但是您可以检测到分支并从那里调整钩子(通过正确的结帐并切换到正确的分支)。
在其工作树的第二次 repo 更新后(通过第一个 repo 的 post-commit 挂钩),第二个 repo 已准备好用作原始工作树,您的 pre-commit hook(您的第一个和当前 repo)可以针对它安全运行。