Git - 让当地的HEAD成为新的主人

时间:2014-11-12 16:34:38

标签: git

我决定退回一些提交,因为我遵循的路径是错误的。所以我检查了Added cordova to .gitignore提交,并进行了一些修改。如下图所示:

enter image description here

现在当我推送新修改时,会显示一条错误消息:
error: src refspec (detached from aad6423) does not match any.

我如何告诉git丢弃之前的提交(紫色)并继续使用我当地的HEAD作为主人?

5 个答案:

答案 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

这将强制将您的新主分支推送到远程。请注意,如果其他人正在使用您的远程仓库,这是不好的做法,因为它可能会破坏他们的提取/拉动。