Git 推送到另一個名稱不同的分支
git push
具有豐富的選項,可讓你使用 Git 的全部功能。其中之一是它的 source:destination
refspecs
引數。
我們使用這些 git push
到具有我們選擇的名稱的特定分支。最後,我們將看到一些用例,如果我們 git push
一個新分支而不是進入與我們本地名稱相同的分支,我們會在工作流程中獲得巨大收益。
git push
命令及其豐富的選項集
Git 並不限制我們使用簡單的 git push
命令簡單地推送到遠端。相反,它為我們提供了幾個強大的選項來讓我們實現我們想要的結果。
其中兩個是 [remote_repe]
和 [src:dst]
refspecs
引數。
讓我們看看這些引數如何幫助我們 git push
到另一個分支。
git push [remote_repo] [refspecs]
[remote_repo]
指的是我們本地系統中的遠端倉庫。大多數時候,這個名字是 origin
。
[refspecs]
是 git push
到特定分支的有趣引數鍵。我們將在本文結尾處詳細檢視 refspecs
。
它的格式為:src:dst
,其中 src
指的是我們要推送的本地分支。dst
是對我們要推入的遠端分支的引用(或名稱)。
它預設與 src
引數同名,但我們可以通過顯式提供 dst
值來選擇 git push
到特定分支。
我們首先設定一個本地倉庫並將其連結到遠端倉庫。然後,我們還在本地倉庫上建立一個新分支。
我們的遠端倉庫在本地沒有 feature_branch
。
我們現在將 feature_branch
推送到另一個具有新名稱的分支。
git push origin feature_branch:teamX_featureY
我們現在看到 feature_branch
已被推送到我們遙控器上具有不同名稱的新分支中。
請注意,每次推送時都必須傳入這些引數;否則,dst
引數將預設為本地倉庫中分支的名稱。然而,Git 為我們提供了一個簡潔的快捷方式,以節省我們重複輸入這些內容的工作量。
git push
中的簡潔快捷方式,用於設定 refspecs
引數一次並多次使用
在 Git 中,分支的上游名稱是你始終將其推送到的分支。你可以使用以下命令設定此值。
git branch --set-upstream-to <remote_branch>
但是,你也可以通過簡單地傳遞 -u
標誌來使用 git push
執行此命令。
git push -u origin local:different_remote
如果你這樣做,你的本地分支會在你下次推送時被推送到 different_remote
分支中。所以你不需要每次都明確地命名它。
我們還在遠端倉庫中看到了這個新的上游分支。
你必須使用以下命令更改 config
檔案中的 push.default
值。
git config push.default upstream
如果你現在推送 second_feature
而不提及 dst
引數,Git 會自動將其推送到 different_remote
。
git push origin second_feature
我們何時希望將 Git 推送到另一個分支
我們想要 git push
一個新分支的一些用例是:
-
假設你開發了一個很酷的功能或模組,並且你希望將其推送到你從事的多個專案中。你甚至會喜歡一個簡單的通用功能,例如你設計的萬聖節主題選單,並且希望在你的許多應用程式中使用它。
你需要將其推送到具有不同名稱的每個專案中。
-
有時,中央(遠端)倉庫中的命名方案與你的本地設定不匹配。當你處理涉及大型團隊的多個專案時尤其如此。
在這種情況下,帶有
refspecs
選項的git push
命令可以為你節省一天的時間。
最後,在我們簽字之前,讓我們深入研究一下 refspecs
。
Git Refspecs
Git 在內部儲存對倉庫中所有物件的引用。這使得快速訪問各種 Git 物件變得容易,而無需總是使用神祕的 SHA
雜湊。
在 Git 中,我們將(雙關語)這些引用稱為 refspecs
。
這些 refspecs
儲存在倉庫內的特殊目錄中。
-
refs/heads
目錄儲存對本地倉庫中物件的引用。 -
refs/remotes
引用了你的遠端倉庫 Git 物件。
資源
- https://www.freecodecamp.org/news/git-push-to-remote-branch-how-to-push-a-local-branch-to-origin/
- https://github.com/jiffyclub/blog-posts/commit/4bf63cdafc9a3eb9602646ced972913ef73386bd
- https://davidwalsh.name/git-push-different-name
- https://stackoverflow.com/questions/36139275/git-pushing-to-remote-branch
- https://git-scm.com/docs/git-push