最近,我们的两个 Git 远程服务器(一个是生产服务器,另一个是暂存服务器)在推送更改时都出现了问题。
通常 :
当地的
git add <list of untracked files>
git commit -m <message>
git push <remote> <remote active branch>
偏僻的
git status
On branch <active branch>
Untracked files:
(use "git add <file>..." to include in what will be committed)
.... all the files that have been committed ....
我们不确定最近几周发生了什么变化,因为之前一切都运行良好。
我们目前通过连接到删除服务器并执行来解决这个问题
git reset --hard HEAD
为什么会发生这种情况?我们该如何解决?
答案1
如果我正确理解了您的设置,您正在推送到非裸存储库。发生的情况是,当您执行此操作时,工作目录不会自动更新。您说得对,该命令git reset --hard
修复了这个问题。钩子无法运行的原因是,在拉取过程中,工作目录和/或工作树可能未正确设置。要解决此问题,您可以明确设置它。有一个环境变量,GIT_DIR
git 为钩子设置了它。它对应于您的.git
文件夹。使用它,我们可以正确设置您的 git 树。
下面是我之前针对这个场景使用过的脚本:
#!/bin/bash
git --work-tree "$GIT_DIR/.." reset --hard
如您所见,由于您的.git
始终是 repo 根目录的子目录,这只是确保工作树是重置它的正确位置。