目前,我被迫對我所做的每一次更改都推送到一個新的分支。并且必須洗掉該分支,因為錯誤再次出現在每個新創建的分支上。
git push origin main 給出以下輸出
error: dst refspec refs/heads/main matches more than one
error: failed to push some refs to 'https://github.com/CarloCattano/fastesTube'
我的git tag輸出:
refs/heads/dev
refs/heads/dev2
refs/heads/dev3
refs/heads/main
v1.1
win64
無論我是否使用-d. 甚至嘗試將專案遷移到新的 repo ,幾次推送后問題仍然存在。
git remote -v
origin https://github.com/CarloCattano/fastesTube (fetch)
origin https://github.com/CarloCattano/fastesTube (push)
git ls-remote
ac4cac50b79ff682ddd01f6c0c3913d0bd765e64 HEAD
77273d612953f96e72ce305ab94f0a535a4c332d refs/heads/dev3
3c344e7af2feb33db2d05f08866cad5fe624b57c refs/heads/develop
ac4cac50b79ff682ddd01f6c0c3913d0bd765e64 refs/heads/main
fde3bb1ed7c770a5b8eb94a368bb34f25566f00e refs/pull/1/head
ffe33059c3fcc12899953bc588772072d9a18bf0 refs/pull/2/head
77273d612953f96e72ce305ab94f0a535a4c332d refs/pull/3/head
3c344e7af2feb33db2d05f08866cad5fe624b57c refs/pull/4/head
b9d1c3f8b83ea1ac868143ec647776d03f9bacc7 refs/tags/refs/heads/dev
ffe33059c3fcc12899953bc588772072d9a18bf0 refs/tags/refs/heads/dev2
77273d612953f96e72ce305ab94f0a535a4c332d refs/tags/refs/heads/dev3
4098ea71b5a0873db6be41e859e5b8242d81c708 refs/tags/refs/heads/main
a42341ba40635bd5063a0bf988eab6c00b0e62d1 refs/tags/v1.1
37220afec1d13dcac99c61ef766ac800fc6438f5 refs/tags/win64
強制推動似乎也不起作用。
可能是我錯誤地配置了 .yml 檔案并為每個版本創建了標簽。
uj5u.com熱心網友回復:
這里的問題是您創建了名為(填寫三個點)的標簽refs/heads/...。
甲REF或參考,在GIT中,是通常與啟動一個字串refs/并接著有一個命名空間限定符:
refs/heads/*是分支名稱:匹配的部分*是分支名稱;refs/tags/*是標簽名稱:匹配的部分*是標簽名稱;refs/remotes/*是遠程跟蹤名稱;
等等。通常你可以給 Git 一個縮寫名稱,例如mainor v1.1,它可以通過查看現有名稱來確定這個名稱是分支名稱還是標簽名稱:
- 通常有一個
refs/heads/mainorrefs/heads/master,但沒有refs/tags/mainorrefs/tags/master,所以mainormaster因此是一個分支名稱。 - 可能有
refs/tags/v1.1,但通常沒有refs/heads/v1.1if ,v1.1因此標簽名稱也是如此。
使用這種方案時,您提供一個模棱兩可的名稱,例如mainor v1.1,Git 會自行判斷它是分支名稱還是標簽名稱,或者您提供全名,例如refs/heads/main,Git 會立即知道它是一個分支名稱。前面沒有refs/heads/orrefs/tags/限定符的短名稱是非限定名稱。全名是限定名。
該git push命令比大多數其他 Git 命令更復雜(除了git fetch同樣復雜的命令),因為它必須處理兩個Git 存盤庫,而不僅僅是一個。因此,可以使用refspec代替ref,它是一對用冒號分隔的 ref 。如果您使用完整的參考規范:git push:
git push origin refs/heads/main:refs/tags/v1.2
那么左右的部分都是裁判,每一個要么不合格,要么合格。可以通過查看本地 Git 存盤庫的名稱(對于本地的)或遠程的名稱(對于遠程的)來決議不合格的名稱。
但是,如果您使用部分refspec:
git push origin main
那么 Git 不確定您的意思是“在本地找到的 main”還是“在遠程找到的 main”。因此,Git 會在這兩個地方進行查找以做出最好的猜測。
但是,在這種情況下,目標Git(其參考顯示在您的git ls-remote輸出中的那個)同時具有refs/heads/main 和 refs/tags/refs/heads/main. 所以,你的 Git 已經在main本地查找并找到了refs/heads/main;現在看來,最多的一套在其他Git倉庫裁判,而不能把它翻譯只是一個參考,因為這兩個 refs/heads/main-a完全合格的分支的名字-和 refs/tags/refs/heads/main-a完全合格的標簽名稱匹配的可能,不合格refs/heads/main. 結果是您收到此錯誤訊息。
git push origin refs/heads/main:refs/heads/main我不知道您是否會收到此錯誤。但是,最好的解決方法是更正目標上的名稱集,以便不再有refs/tags/refs/*名稱。也就是這四個名字:
b9d1c3f8b83ea1ac868143ec647776d03f9bacc7 refs/tags/refs/heads/dev
ffe33059c3fcc12899953bc588772072d9a18bf0 refs/tags/refs/heads/dev2
77273d612953f96e72ce305ab94f0a535a4c332d refs/tags/refs/heads/dev3
4098ea71b5a0873db6be41e859e5b8242d81c708 refs/tags/refs/heads/main
應該調整(或完全洗掉),以便在 GitHub 上的 Git 存盤庫中沒有標簽名稱以refs/. 理想情況下,這些標簽名稱也不應與任何分支名稱匹配:標簽名稱通常應符合v*格式或其他一些“顯然是標簽”模式,這樣沒人會意外地認為它們是分支名稱,反之亦然。
一旦你解決了這個問題,簡單的git push命令將再次起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/405536.html
標籤:
