假設我處于分離的 HEAD 狀態并運行以下命令:
git push origin HEAD:foo
git 將輸出以下錯誤:
error: The destination you provided is not a full refname (i.e.,
starting with "refs/"). We tried to guess what you meant by:
- Looking for a ref that matches 'foo' on the remote side.
- Checking if the <src> being pushed ('HEAD')
is a ref in "refs/{heads,tags}/". If so we add a corresponding
refs/{heads,tags}/ prefix on the remote side.
Neither worked, so we gave up. You must fully qualify the ref.
hint: The <src> part of the refspec is a commit object.
hint: Did you mean to create a new branch by pushing to
hint: 'HEAD:refs/heads/foo'?
error: failed to push some refs to 'https://server/DefaultCollection/Project/_git/Repo'
所以我的問題是:這里使用的正確關鍵字是什么,而不是“HEAD”來參考我正在進行的當前提交?我可以復制粘貼提交 ID,但這顯然很愚蠢。我要求輸入一個可以輸入的常量名稱,例如 head,以表示我正在進行的當前提交。
uj5u.com熱心網友回復:
正如jthill 所指出的,何時HEAD分離,Git 不知道是否:
git push origin HEAD:foo
旨在創建refs/heads/foo(一個名為 的分支foo) on origin,或refs/tags/foo(一個名為 的標簽foo) on origin,或者可能是其他型別的 ref(例如,Gerrit 的魔法refs/for/foo1)。
因為您在當前作業樹中處于 detached-HEAD 模式,所以您必須在此處協助 Git。你可以:
git push origin @:refs/heads/foo
告訴 Git:使用2HEAD(全部大寫)在我的存盤庫中查找提交。將該提交和任何必要的父項推送到,然后要求創建一個名為.originoriginfoo
不過,繼續創建一個名為的本地分支可能更容易foo:
git switch -c foo
之后git push -u origin @就足夠了。您甚至可能希望從中創建一個別名(shell 別名或 Git 別名)或 shell 函式:
push-new-as foo
例如,其中push-new-as擴展git switch -c $1 && git push -u origin @為。(如果您愿意,可以添加額外的保護措施,例如確保沒有origin/foo第一個:這實際上可能是個好主意。git fetch origin首先運行 alias-or-shell-function。)
1 Gerrit 是用 JGit 撰寫的,并不像 C Git 那樣實作 Git。推送到refs/for/命名空間名稱會創建一個 Gerrit 變更集,Gerrit 偷偷地將其重命名為另一個名稱。您自己的(可能基于 C-Git)Git認為Gerrit 創建refs/for/foo成功,因為他們的 JGit 實作此時回傳成功指示,但實際上并沒有。這個小謊言促進了有用的作業并且沒有引起實際問題,但它絕對是相當神奇的。
2請參閱HEAD vs head vs detached HEAD,了解區分大寫和小寫的重要性。
uj5u.com熱心網友回復:
HEAD是您當前的結帳。如果你沒有明確地說出目標型別(通過提供refs/<type>/前綴,例如refs/heads/分支提示),Git 會嘗試通過從源中復制型別來弄清楚你的意思。但是,當您沒有簽出分支并且您提供HEAD時,就沒有要復制的型別。這只是您正在處理的一些隨機提交。這就是...是的,您發布的圖片...正在談論的錯誤訊息是:您沒有說您要創建什么樣的參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493158.html
上一篇:分支重命名后如何在另一臺計算機上更新Remote/Origin
下一篇:獲取分支后所有已編輯檔案的串列
