2016-12-27 94 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拉取數據時,假定分支的本地引用與同一分支的遠程引用相同,或者可以從遠程引用(即其祖先)訪問。如果您向後移動分支的遠程參考,然後可能開始將其沿分支路徑向下移動,那麼該回購的其他用戶將會發現該假設被破壞。他們可以恢復,但是如果他們在分支上做了其他更改,他們必須重新設置這些更改。如果回購是共享的,那麼通常會以糟糕的形式刪除已發佈的提交或將已發佈的頭部「向後移動」 –