git 重置 - 难以提交不起作用 - 提示是 HEAD 在后面



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

git reset --hard as288sa 

签出文件 HEAD现在位于as288sa

然后,我想addcommit提交到远程存储库的resetpush

git add -A
git commit -m "reseted hard"

在分支上 myBranch 没有什么可承诺的,工作树干净

git push origin myBranch

拒绝 错误:无法将某些引用推送到git@... 更新被拒绝,因为当前分支的提示落后 它的对应物。在推送更改之前集成远程更改(例如 git pull)

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

发生了什么事情?

您不会"添加并提交重置"; 添加和提交是应用工作树更改以创建新提交的方式,而重置只是移动引用以指向现有提交。 我希望addcommit命令会抱怨没有什么要添加/空提交的,除非您的工作树中有不相关的更改。

好吧,无论如何,然后你尝试推动,但正如你所看到的,git 不喜欢它,因为你试图将 ref 推送给祖先,而 git 认为这不是一个好主意。 它告诉您进行拉取,但是当您这样做时,通过将 myBranch 的本地引用直接移回原点之前放置它的位置来撤消重置。

所以事情就是这样发生的...但在我告诉你如何解决它之前,我应该提到你正在做的事情会导致其他任何拉 myBranch 的人遇到问题,如果有非常多的用户,这可能不是你想做的。

要按照您的要求进行操作,在重置后但不进行拉取(甚至不必担心添加或提交),您可以使用 -f 标志进行推送。 您可能有权也可能没有这样做的许可,但即使您这样做,说真的,这可能不是您想要做的。

相反,我怀疑您真正应该做的是恢复提交 - 即创建一个新的提交,该提交将以前的提交中的更改从以前的提交中返回到与早期提交相同的状态,但以保留已发布历史记录的方式。 查看文档以了解git revert

最新更新