[英]Git - Make local HEAD the new master
我决定退回几次提交,因为我遵循的路径是错误的。 因此,我签出了将Added cordova to .gitignore
提交,并进行了一些修改。 如下图所示:
现在,当我推送新的修改时,将显示一条错误消息:
error: src refspec (detached from aad6423) does not match any.
我怎样才能告诉git放弃以前的提交(以紫色显示),并继续以我的本地HEAD作为主人?
将HEAD设为新的本地master
:
$ git checkout -B master
强制推送您的更改:
$ git push -f
即使您不再需要该旧分支,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
因此,我将分两步进行操作:
git checkout -b new_master
以获得对您想要新主人的好参考。
git checkout master ; git checkout -b old_master
如果你想回去或以后再去找老师傅咨询; 确定后,您随时可以删除该分支。
git checkout master ; git reset --hard new_master
这会将您所在分支(主节点)的HEAD重置为指定的引用(new_master)。
git push -f origin
这会将新的master分支强制推送到远程。 请注意,如果其他人正在使用您的远程存储库,则这是一种不好的做法,因为这可能会破坏其获取/拉取。
由于存在分歧,因此需要销毁远程主服务器并推高本地版本。 根据现有的安全性,您可能无法这样做。 这还具有其他含义,具体取决于其他人是基于master进行工作的。 应该格外小心 。
git push origin :master // deletes remote master
git push origin master // pushes local master to remote
另一种(可能更好)的方法是将提交还原为master,然后提交还原(本身就是提交)。 然后,挑选您在本地所做的工作。 首先,在本地创建一个新的主题分支以保存您的工作。
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)>
由于您将更改推到了上游,因此更好的方法是使用另一个提交还原它们。 提交将撤消更改。 从上游删除提交或分支是不好的做法。 有关更多详细信息,请参见此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.