问题:$ git push fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD) state now, use git push origin HEAD:<name-of-remote-branch>
分析:处于 detached HEAD 状态,意思是你并不在某个本地分支上,而是直接在某个 commit 上工作。这会导致你无法直接执行 git push
,因为没有本地分支与远程分支绑定。
解决方法:
1. 绑定当前 HEAD 到一个本地分支,并推送到远程分支
步骤 1:创建并切换到本地分支(如果还没有分支)
假设你想绑定到 main
分支(可以换成其他分支名):
git checkout -b main
如果你已经有一个分支,只是被 detach 了,你可以用这个命令回到它:
git switch main
步骤 2:将本地分支绑定到远程分支
设置绑定(跟踪远程分支):
git branch --set-upstream-to=origin/main
如果远程还没有 main
分支,你可以这样创建并推送:
git push -u origin main
2. 如果你不想创建本地分支,只想临时推送:
Git 提示你可以:
git push origin HEAD:[remote-branch-name]
例如:git push origin HEAD:main
但这种方式不推荐长期使用,因为你依然处于 detached HEAD,不便于管理代码。
最后,检查你当前分支状态(确认是否 detached):git status
例子:
本次我考虑,先提交,然后将分支绑定到远程分支,使得每次push,直接push即可,所以,我的代码为:
分析:
已经成功把本地 master
分支绑定到了远程 origin/master
分支,最后这条命令的提示说明一切都设置好了:
branch 'master' set up to track 'origin/master'.
现在的状态解释:
你在 git switch master
之后,Git 提示:
Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded. (use "git pull" to update your local branch)
这说明:
本地
master
落后于远程origin/master
4 个提交。你可以用
git pull
来同步远程的 4 个提交。
推荐操作:
如果你不想丢失任何本地改动:
同步远程改动:
git pull
然后再推送你自己的提交:
git push
如果你当前没有任何本地改动,直接同步远程:git pull # 然后继续开发,完成后 git push
关键点总结:
你现在的
master
分支已经绑定了远程的origin/master
。以后你直接使用
git push
和git pull
即可,不需要额外指定远程分支。
若要分析一下是否现在可以推送,或者看看当前提交日志,可运行:
git log --oneline --graph --decorate --all
(这能让你看清楚本地与远程的差异)