2016-12-27 98 views
1

我想重置我的本地分支到提交as288sa。 提交存储在远程存储库和我的本地存储库中。 我想使用--hard标志重置。git reset --hard to commit does not work - Tip is HEAD is behind

git reset --hard as288sa 

Checking out files HEAD is now at as288sa

然后我想addcommitresetpush是提交到远程仓库。

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

On branch myBranch nothing to commit, working tree clean

git push origin myBranch 

rejected error: failed to push some refs to [email protected] Updates were rejected because the tip of you current branch is behind its counterpart. Integrate the remote changes (e.g. git pull) before pushing changes

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

发生了什么事?

回答

4

你不“添加和提交重置”;添加和提交是如何应用工作树更改来创建新的提交,而重置只是将ref指向现有的提交。我期望addcommit命令抱怨没有任何要添加/空提交,除非您在工作树中有无关的更改。

好吧,无论如何,你尝试推动,但正如你看到git不喜欢它,因为你试图推动裁判祖先和git不认为这是一个好主意。它会告诉你做一次拉动,但是当你这样做的时候,通过将你的本地参考线移动到myBranch,回到原点放在之前的位置,可以撤消你的重置。

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

要做你要求的,在复位后,如果没有拉动(甚至不用担心增加或提交),你可以用-f标志进行推动。你可能会也可能没有这样做的权限,但即使你这样做,严重的是,这可能不是你想要做的。

相反,我怀疑你真正应该做的被恢复的承诺 - 即创建一个新的承诺是逆转的变化,从以前提交的树作为较早的承诺,但在保留的方式返回到相同的状态发表历史。看看文档git revert

+0

为什么我不想用'--hard'标志''重置'commit'?我知道这会删除提交前提交的所有'commit',我将它重置为。但是,如果我不在乎丢失他们?那对其他人会有什么问题? – Stophface

+0

在任何给定的时间,当从远程git拉取数据时,假定分支的本地引用与同一分支的远程引用相同,或者可以从远程引用(即其祖先)访问。如果您向后移动分支的远程参考,然后可能开始将其沿分支路径向下移动,那么该回购的其他用户将会发现该假设被破坏。他们可以恢复,但是如果他们在分支上做了其他更改,他们必须重新设置这些更改。如果回购是共享的,那么通常会以糟糕的形式删除已发布的提交或将已发布的头部“向后移动” –