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