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 到特定分支。

我们首先设置一个本地仓库并将其链接到远程仓库。然后,我们还在本地仓库上创建一个新分支。

Git 推送到另一个名称不同的分支

Git 推送到另一个名称不同的分支

我们的远程仓库在本地没有 feature_branch

我们现在将 feature_branch 推送到另一个具有新名称的分支。

git push origin feature_branch:teamX_featureY

Git 推送到另一个名称不同的分支

我们现在看到 feature_branch 已被推送到我们遥控器上具有不同名称的新分支中。

Git 推送到另一个名称不同的分支

请注意,每次推送时都必须传入这些参数;否则,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 分支中。所以你不需要每次都明确地命名它。

Git 推送到另一个名称不同的分支

我们还在远程仓库中看到了这个新的上游分支。

Git 推送到另一个名称不同的分支

你必须使用以下命令更改 config 文件中的 push.default 值。

git config push.default upstream

如果你现在推送 second_feature 而不提及 dst 参数,Git 会自动将其推送到 different_remote

git push origin second_feature

Git 推送到另一个名称不同的分支

我们何时希望将 Git 推送到另一个分支

我们想要 git push 一个新分支的一些用例是:

  1. 假设你开发了一个很酷的功能或模块,并且你希望将其推送到你从事的多个项目中。你甚至会喜欢一个简单的通用功能,例如你设计的万圣节主题菜单,并且希望在你的许多应用程序中使用它。

    你需要将其推送到具有不同名称的每个项目中。

  2. 有时,中央(远程)仓库中的命名方案与你的本地设置不匹配。当你处理涉及大型团队的多个项目时尤其如此。

    在这种情况下,带有 refspecs 选项的 git push 命令可以为你节省一天的时间。

最后,在我们签字之前,让我们深入研究一下 refspecs

Git Refspecs

Git 在内部存储对仓库中所有对象的引用。这使得快速访问各种 Git 对象变得容易,而无需总是使用神秘的 SHA 哈希。

在 Git 中,我们将(双关语)这些引用称为 refspecs

这些 refspecs 存储在仓库内的特殊目录中。

  1. refs/heads 目录存储对本地仓库中对象的引用。

    Git 推送到另一个名称不同的分支

  2. refs/remotes 引用了你的远程仓库 Git 对象。

    Git 推送到另一个名称不同的分支

资源

  1. https://www.freecodecamp.org/news/git-push-to-remote-branch-how-to-push-a-local-branch-to-origin/
  2. https://github.com/jiffyclub/blog-posts/commit/4bf63cdafc9a3eb9602646ced972913ef73386bd
  3. https://davidwalsh.name/git-push-different-name
  4. https://stackoverflow.com/questions/36139275/git-pushing-to-remote-branch
  5. https://git-scm.com/docs/git-push