4

为什么 git 允许你承诺一个超然的头脑?有没有可以禁用它的预提交钩子?什么目的?许多新开发人员都这样做,我想找到一种方法来禁用它。

4

3 回答 3

7

这只能通过本地 gitpre-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

确保它是可执行的。学分去 svachalek

为什么 git 应该防止在分离的 HEAD 中提交?分离的 HEAD意味着没有指向您正在处理的存储库状态的指针。它假定您知道自己在做什么。

我宁愿调查一下为什么你们团队中的许多开发人员会进入这种状态?也许他们应用了一些奇怪的工作流?

于 2016-05-17T07:19:24.613 回答
1

git checkout $commit-sha1可能导致 HEAD 分离。也是如此git checkout FETCH_HEAD。一个分离的 HEAD 可以被认为是一个没有名字的分支。如果它不会让您感到困惑,您可以忽略它。正如@fracz 所说,您可以通过pre-commit. 您也可以将其设为名称为git checkout -b some_name. 钩子可以post-checkout帮助您检测分离的 HEAD 状态并使其成为分支。

于 2016-05-17T07:52:41.230 回答
1

Git 在内部将其用于许多操作。分离的 HEAD 模式只是让您进入(一个,单个,特殊的)匿名分支,并且稍后可以为匿名分支命名。

例如,这是如何git rebase设法将提交从其原始链复制到新链。首先,它使用这种分离的 HEAD 模式检查--onto目标提交(--onto默认为)。<upstream>然后,对于要复制的每个提交,它都会复制该提交(使用git cherry-pick或等效的东西:细节取决于交互式与非交互式变基,如果是交互式,则有更多细节)。最后,它移动现有的分支标签,使其指向最终复制的提交。

于 2016-05-17T09:51:27.533 回答