你如何仅推送一个 Git 分支(而不是其他分支)?

13 浏览
0 Comments

你如何仅推送一个 Git 分支(而不是其他分支)?

我正在处理一个本地的git仓库。有两个分支,masterfeature_x

我想要将feature_x推送到远程仓库,但是我不想推送master分支上的修改。

我从我的feature_x分支执行git push origin feature_xfeature_x分支已经存在于远程),这样会起作用吗?

我不想在我的本地测试这个,因为现在我不能推送到master分支。

0
0 Comments

如何仅推送一个 Git 分支(而不是其他分支)?

有人问道,是否需要切换到 feature_x 分支?是的,因为如果你在 master 分支上,它会尝试将本地 master 分支推送到远程 feature_x 分支。如果想避免切换,可以使用 "git push origin feature_x:feature_x" 命令。

我看到其他问题中(例如:here)他们使用了 "git push -u origin " 命令。但你没有提到它。这是必需的吗?-u 选项在 git-push 命令中将设置上游引用,以便跟踪刚刚推送的分支。这样,将来在该分支上执行 git-pull 命令时,就已经知道从哪个分支拉取,无需指定。虽然不是推送单个分支的必需选项,但广泛使用,因为很多人希望使本地分支跟踪他们正在推送的远程分支。

这意味着 git push origin master 只会推送 master 分支,而不是你正在处理的其他任何分支吗?是的,该命令将本地 master 分支推送到名为 origin 的仓库。

这似乎不正确,还会选择多个提交。这个问题是关于推送单个 git 分支,而不是单个提交。

我认为第一次应该使用 -u 选项来初始化跟踪。之后,只需使用 git push ... 命令。

替换 origin 为你的 git 远程仓库的名称。

解决方法如下:

git checkout feature_x

git push origin feature_x

或者使用现代的 git 版本,可以简单地使用 "git push origin HEAD" 或者 "git push HEAD" 来仅推送当前所在的分支。

0
0 Comments

问题的原因是由于Git的默认行为是将所有分支都推送到远程仓库,而有时我们只想推送单个分支。解决方法是通过配置Git的push.default参数来修改默认行为。

可以通过以下命令在全局范围内配置Git,从而影响所有的工作空间:

git config --global push.default upstream

但是在某些情况下,upstream可能不被识别为有效的设置,此时可以将其替换为'current'。

通过以上方法,我们可以解决只推送单个Git分支的问题。

0
0 Comments

在默认情况下,git push会更新所有远程分支。但是你可以配置git只更新当前分支到它的上游分支。

git config push.default upstream

这意味着当你执行git push时,git只会更新当前(检出的)分支。

其他有效的选项包括:

  • nothing:除非显式给出refspec,否则不推送任何内容(报错)。这主要是为了那些希望通过始终明确的方式避免错误的人而设计的。
  • matching:推送在两端具有相同名称的所有分支(在1.7.11版本之前的默认选项)。
  • upstream:将当前分支推送到其上游分支。只有在将分支推送到通常从中拉取的同一存储库时才有意义(即中央工作流)。本地和远程分支不需要相同的名称
  • tracking:已弃用,请使用upstream替代。
  • current:将当前分支推送到接收端的同名远程分支。在中央和非中央工作流中都适用。
  • simple:[自1.7.11版起可用]在集中式工作流中,类似于upstream,但增加了一个安全性,如果上游分支的名称与本地分支的名称不同,则拒绝推送。当推送到与通常从中拉取的远程存储库不同的远程存储库时,行为类似于current。这是最安全的选项,适合初学者。这个模式已经成为Git 2.0的默认设置。

谢谢,current是我正在寻找的,通过默认git push,在foo分支将会推送到origin/foo分支。

谢谢,我同意current作为默认值更合理。

0