通常Git死不推到一個正常的,非--bare
庫的(單)當前簽出的分支:爲什麼Git允許推送到附加工作樹中的簽出分支?我應該如何恢復?
$ git push upstream master Counting objects: 1, done. Writing objects: 100% (1/1), 188 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) remote: error: refusing to update checked out branch: refs/heads/master remote: error: By default, updating the current branch in a non-bare repository remote: error: is denied, because ...
這是正確的行爲。見Git push error '[remote rejected] master -> master (branch is currently checked out)'。
但是,在那個完全相同的上游,我有一個額外的worktree檢出了一個不同的分支。就在上面的錯誤示範之前,我跑:
$ git push upstream pytest
和它成功,當清楚它不應該有,出於同樣的原因master
這裏失敗。特別是,receive.denyCurrentBranch
確實設置爲拒絕當前分支。
在上游系統,git worktree list
說:
$ git worktree list
<path1> 9febb4c [master]
<path2> 406bef8 [pytest]
這表明至少部分的Git知道它的取出。但它然後允許無論如何推,這導致了兩個問題:
這是一個錯誤?
既然我處在這個爛攤子裏,我該如何恢復?
(附註:我只是不小心絆倒在此同時使用二次加工樹,所以我記錄它爲後人因此,我將張貼我自己的答案。)
如果你不能回答這個問題,你真的認爲別人能夠嗎?那麼,有一個人[可能](http://stackoverflow.com/users/6309/vonc)。 –
@TimBiegeleisen:的確如此。我只是爲了防止其他人在這個問題上磕磕絆絆。 – torek