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

Ankit Raj Goyal 2023年1月30日
  1. git push 命令及其丰富的选项集
  2. git push 中的简洁快捷方式,用于设置 refspecs 参数一次并多次使用
  3. 我们何时希望将 Git 推送到另一个分支
  4. Git Refspecs
  5. 资源
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

git 推送到特定分支

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

git push 新分支到远程

请注意,每次推送时都必须传入这些参数;否则,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 config 编辑远程推送默认

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

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

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

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

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

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

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

Git Refspecs

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

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

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

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

    本地 refs heads

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

    remote refs remotes

资源

  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

相关文章 - Git Push