如何防止在分离的 HEAD 中提交
How to prevent commit in detached HEAD
为什么 git 允许你保持独立的头脑?有没有可以禁用它的预提交挂钩?目的是什么?许多新开发人员都这样做,我想找到一种方法来禁用它。
这只能通过本地 git pre-commit
挂钩来阻止,因此开发人员需要创建它。添加具有以下内容的 your-local-project/.git/hooks/pre-commit
文件:
#!/bin/sh
if ! git symbolic-ref HEAD &> /dev/null; then
echo "You are in a detached head state! Commit has been blocked. (Use --no-verify to bypass this check.)"
exit 1
fi
确保它是可执行的。 Credits go to svachalek
为什么 git 应该防止在分离的 HEAD 中提交?分离的 HEAD 意味着 仅 没有指向您正在处理的存储库状态的指针。它假定您知道自己在做什么。
我宁愿调查为什么你们团队中很多开发人员进入这种状态?也许他们应用了一些奇怪的工作流程?
git checkout $commit-sha1
会导致分离的 HEAD。 git checkout FETCH_HEAD
也是如此。一个分离的 HEAD 可以被认为是一个没有名字的分支。如果它不会让你感到困惑,你可以忽略它。正如@fracz 所说,您可以通过 pre-commit
来阻止它。您还可以将其设为名称带有 git checkout -b some_name
的分支。 post-checkout
钩子可以帮助您检测分离的 HEAD 状态并使其成为一个分支。
Git 在内部将其用于许多操作。 detached HEAD 模式只是让你进入(一个,单一,特殊)匿名分支,匿名分支可以稍后命名。
例如,这就是 git rebase
如何设法将提交从其原始链复制到新链。首先,它使用这种分离的 HEAD 模式检查 --onto
目标提交(--onto
默认为 <upstream>
)。然后,对于要复制的每个提交,它都会复制该提交(使用 git cherry-pick
或等效的东西:细节因交互式与非交互式变基而异,如果是交互式,则更多细节)。最后,它移动现有的分支标签,使其指向最终复制的提交。
为什么 git 允许你保持独立的头脑?有没有可以禁用它的预提交挂钩?目的是什么?许多新开发人员都这样做,我想找到一种方法来禁用它。
这只能通过本地 git pre-commit
挂钩来阻止,因此开发人员需要创建它。添加具有以下内容的 your-local-project/.git/hooks/pre-commit
文件:
#!/bin/sh
if ! git symbolic-ref HEAD &> /dev/null; then
echo "You are in a detached head state! Commit has been blocked. (Use --no-verify to bypass this check.)"
exit 1
fi
确保它是可执行的。 Credits go to svachalek
为什么 git 应该防止在分离的 HEAD 中提交?分离的 HEAD 意味着 仅 没有指向您正在处理的存储库状态的指针。它假定您知道自己在做什么。
我宁愿调查为什么你们团队中很多开发人员进入这种状态?也许他们应用了一些奇怪的工作流程?
git checkout $commit-sha1
会导致分离的 HEAD。 git checkout FETCH_HEAD
也是如此。一个分离的 HEAD 可以被认为是一个没有名字的分支。如果它不会让你感到困惑,你可以忽略它。正如@fracz 所说,您可以通过 pre-commit
来阻止它。您还可以将其设为名称带有 git checkout -b some_name
的分支。 post-checkout
钩子可以帮助您检测分离的 HEAD 状态并使其成为一个分支。
Git 在内部将其用于许多操作。 detached HEAD 模式只是让你进入(一个,单一,特殊)匿名分支,匿名分支可以稍后命名。
例如,这就是 git rebase
如何设法将提交从其原始链复制到新链。首先,它使用这种分离的 HEAD 模式检查 --onto
目标提交(--onto
默认为 <upstream>
)。然后,对于要复制的每个提交,它都会复制该提交(使用 git cherry-pick
或等效的东西:细节因交互式与非交互式变基而异,如果是交互式,则更多细节)。最后,它移动现有的分支标签,使其指向最终复制的提交。