繁体   English   中英

Git-使本地HEAD成为新主人

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM