严格来说,HEAD 与master分歧。并且似乎HEAD 已分离,因此创建一个分支以进行备份并轻松引用其提交。
# "backup" can be any valid branch name you like
git branch backup HEAD
由于origin/master 和master 指向同一个提交,我们可以得出结论,master 上的提交已经发布。现在你有两个选择。
一个是改写master的历史。它需要强制推送来更新远程存储库中的master。如果有许多其他贡献者,这不是一个好主意,因为如果处理不当,可能会带来混乱的历史。
git checkout master
git reset backup --hard
git push origin -f master
另一种是在master上创建一个新的提交,并使代码与HEAD完全相同。缺点是backup 上的提交和master 上的新提交如果您没有推送或不打算推送它们可能会消失。
git checkout master
git merge $(git commit-tree -p HEAD -m "whatever" master^{tree})
# edit the commit message
git commit --amend
# later you can push as usual, without "-f"
git push origin master
如果您希望master 包含backup 和master 的所有提交,同时代码与backup 完全相同,您可以尝试
git checkout master
# with "-s ours", commits are merged but the changes are not
git merge backup -s ours
# repeat the 2nd option
git merge $(git commit-tree -p HEAD -m "whatever" master^{tree})
# edit the commit message
git commit --amend
# later you can push as usual, without "-f"
git push origin master
origin/master会自动更新。不用管它也没关系。