git reset-很难提交-提示是HEAD在后面

Sto*_*ace 2 git version-control github

我想将本地分支重置为commit as288sa。提交存储在远程存储库和本地存储库中。我想使用该--hard标志进行重置。

git reset --hard as288sa 
Run Code Online (Sandbox Code Playgroud)

检出文件HEAD现在位于as288sa

然后,我要addcommitreset,并push认为提交到远程仓库。

git add -A
git commit -m "reseted hard"
Run Code Online (Sandbox Code Playgroud)

在分支myBranch上没有要提交的内容,正在工作的树干净

git push origin myBranch
Run Code Online (Sandbox Code Playgroud)

拒绝错误:无法将一些引用推送到git @...。更新被拒绝,因为您当前分支的尖端在其对应的后面。在推送更改之前集成远程更改(例如git pull)

所以我做了一个git pull,然后git add -A又一个git commit以及一个,然后git push尝试了git reset --hard as288sa。我再次收到相同的错误消息。

怎么了?

Mar*_*ger 5

您不会“添加并提交重置”;add和commit是应用工作树更改来创建新提交的方式,而reset只是将引用移至指向现有提交的位置。除非您在工作树中进行了不相关的更改,否则我希望addand commit命令不会抱怨要添加/清空提交。

好吧,无论如何,然后您尝试推送,但是您看到git不喜欢它,因为您尝试将ref推送给祖先,而git认为这不是一个好主意。它会告诉您执行一次拉取,但是当您执行此操作时,可以通过将myBranch的本地引用右移回原点之前放置的位置来撤消重置。

这就是发生的事情...但是在我告诉您如何解决它之前,我应该提一下您正在做的事情将导致其他人拉myBranch出现问题,并且如果有很多用户,则可能不是你想做什么。

要执行您所要求的操作,在重置后无需执行拉(甚至不必担心添加或提交),就可以使用-f标志进行压入。您可能有也可能没有权限执行此操作,但是即使您这样做了,也很可能不是您想要执行的操作。

相反,我怀疑您真正应该做的是还原提交-即创建一个新的提交,该提交将先前提交的更改撤消,从而将树返回到与先前提交相同的状态,但以保留已发布历史记录的方式进行。查看有关的文档git revert