我决定退回一些提交,因为我遵循的路径是错误的。所以我检查了Added cordova to .gitignore
提交,并进行了一些修改。如下图所示:
现在当我推送新修改时,会显示一条错误消息:
error: src refspec (detached from aad6423) does not match any.
我如何告诉git丢弃之前的提交(紫色)并继续使用我当地的HEAD作为主人?
答案 0 :(得分:17)
将HEAD设为新的本地master
:
$ git checkout -B master
强制推动您的更改:
$ git push -f
答案 1 :(得分:11)
即使你不再需要旧的分支,git也不喜欢重写历史记录或丢弃更改。只需还原和合并。
git branch new_master # name current detached HEAD
git checkout master # switch back to master
git revert --no-edit HEAD~4..HEAD # create commits reverting back to where the history split
git merge new_master # merge
git branch -d new_master # don't need it anymore
答案 2 :(得分:1)
因为您有分歧,所以您需要销毁远程主服务器并推送本地版本。根据现有的安全性,您可能无法这样做。这也有其他含义,这取决于其他人在做什么基于主人的工作。 应该非常谨慎。
git push origin :master // deletes remote master
git push origin master // pushes local master to remote
另一种(可能更好的)方法是将提交恢复为主控并提交恢复(它们本身是提交)。然后樱桃挑选你在当地完成的工作。首先,在本地创建一个新的主题分支以保存您的工作。
git checkout -b <topic_branch_name> // create new branch to save local work
git checkout master
git reset --hard HEAD // sync local master to remote HEAD
git revert <last commit to master>
git revert <second-to-last commit to master>
...
git revert <Added cordova to .gitignore commit>
git push
git cherry-pick <commit hash from topic branch commit(s)>
答案 3 :(得分:0)
由于您将更改推送到上游,更好的方法是使用另一个提交还原它们。将撤消更改的提交。 从上游删除提交或分支是错误练习。有关详细信息,请参阅此answer。
答案 4 :(得分:0)
所以,我会在几个步骤中做到这一点:
git co -b new_master
得到一个很好的参考,你想要新的主人。
git co master ; git co -b old_master
如果你想要回去或稍后的事情,请保留对旧主人的引用;您可以在以后确定删除该分支。
git co master ; git reset --hard new_master
这会将您(主)的分支的HEAD重置为指定的引用(new_master)。
git push -f origin
这将强制将您的新主分支推送到远程。请注意,如果其他人正在使用您的远程仓库,这是不好的做法,因为它可能会破坏他们的提取/拉动。