主人就是提交#10。然而,我最终意识到我在测试中没有遇到过一些问题。
我最终将提交#5,然后慢慢重新执行每个提交的开发并不断调整以确保它不会重新导致错误。现在我基本上回到提交#10,但有一些改变可以防止错误发生。
我现在想要使用我的更改创建提交#11。但是当我试图推动掌握时,我得到了
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use
git push master HEAD:<name-of-remote-branch>
这是可以预料的。但是我如何才能真正实现这一目标呢?
我试过了git push origin HEAD:master
,但后来得到了这个:
! [rejected] HEAD -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/tomhammond/sample.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
当我执行git status
时,我看到HEAD detached from 4a74ac3
答案 0 :(得分:70)
但是当我试图推动掌握时,我得到了
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
这是预期的
在分离状态下工作 not 是不可能的,除非你故意想要这样做,我怀疑你是这样的。您应该将master
分支还原到该提交,或者在交互模式下执行git rebase
,而不是检查提交#5,您可以根据需要重新提交提交。
话虽如此,如果您确定处于分离状态的master
版本是您 想要保留的版本,那么您可以绕过non-fast-forward
错误,强行将分支推到遥控器:
git push origin HEAD:master --force
但是,如果强制推送,则存在导致所有其他已签出该分支的用户出现问题的风险。一个风险较小的解决方案是从分离的HEAD创建一个临时分支,然后将该分支合并到master
:
git branch temp-branch
git checkout master
git merge temp-branch
git push origin master
答案 1 :(得分:1)
git push
只会让您快进遥控器。这意味着您尝试推送的提交需要成为远程分支的后代。由于您在5之后编辑了之前的提交,因此您没有后代,而是更多的堂兄。如果要覆盖分支,可以给git push --force
,但如果其他人在当前主服务器上进行了自己的更改,则他们将无法再拔出分支。此外,如果其他人在你做之前推动掌握,他们的改变将会丢失。通常,如果您不是唯一使用分支的人,则不希望强制推送。
答案 2 :(得分:0)
您确定您确实在分支机构吗?使用git branch
并检查您是否在分支中。如果不是,则只需git checkout branch-name-you-want
然后git push
就可以了!
答案 3 :(得分:0)
你可以创建一个新的分支并且你可以在之前的分支中合并这些变化
git checkout -b newBranch
git checkout previousBranch
git merge newBranch
git push origin previousBranch
git branch -d previousBranch