Git 如果不在分支上,则禁用提交

Git 如果不在分支上,则禁用提交,git,Git,如果您不在分支上,我想禁用提交 我在开发服务器上丢失了一些代码,因为代码已提交,但从未推送 如果您不在分支上,是否可以阻止git提交 更新:我不在分支上,因为我以前做过“git checkout mytag”。原则上,如果你在项目中使用git存储库,你总是在分支上,所以你问题的第一部分令人困惑。然后,对于第二条语句,使用git应该不可能丢失代码,您可以回溯您的提交以找到代码。但这一部分令人困惑的部分是,您在本地进行提交,并将它们推送到远程分支。最后,为了回答您的问题,根据您的环境/IDE,可以通

如果您不在分支上,我想禁用提交

我在开发服务器上丢失了一些代码,因为代码已提交,但从未推送

如果您不在分支上,是否可以阻止git提交


更新:我不在分支上,因为我以前做过“git checkout mytag”。

原则上,如果你在项目中使用git存储库,你总是在分支上,所以你问题的第一部分令人困惑。然后,对于第二条语句,使用git应该不可能丢失代码,您可以回溯您的提交以找到代码。但这一部分令人困惑的部分是,您在本地进行提交,并将它们推送到远程分支。最后,为了回答您的问题,根据您的环境/IDE,可以通过简单地不提交来停止提交。因为这主要是一项手动任务

我想对这一点进行评论(没有足够的观点),因为明智的做法是更好地解释您的情况,并提及您正在使用的IDE、分支和可能的提交/命令

关于丢失代码,您可以将分支恢复到以前的提交。如果您隐藏了当前的更改,那么您甚至不一定会在提交后丢失任何代码。检查以下螺纹:

您可以使用来实现这一点

我在上找到了一个预提交挂钩,它完全满足您的要求:

#!/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

将其放入.git/hooks目录中名为
pre-commit
的文件中,并使该文件可执行

如果您在某个目录上执行了
git init
,则始终处于该目录下的分支上。使用包含分支名称的shell提示符可能会有所帮助,这样更容易发现此类错误。实际上,您的提交没有丢失,只是任何分支都无法访问它们。您仍然可以键入'git reflog'并查看这些提交及其哈希。然后,您可以使用git cherry pick(或您喜欢的任何其他方式)将这些提交添加到当前分支。当您不在任何分支上时,存在一种称为“分离头”的状态。例如,它发生在“git签出”之后;这一点在链接的顶部答案中也得到了进一步证明,因此答案中的“原则上”也得到了进一步证明。