从 GitHub 上的远程分支创建新的 git 分支

Jos*_*osh 6 git github

我一直在与我的团队讨论并在互联网上搜索,但我无法弄清楚如何基于 GitHub 上托管的远程分支在本地创建新的 git 分支。似乎应该有办法做到这一点。

我已经尝试了以下操作,但是当我推送时,它会推送到错误的 (origin/release/1.0) 分支,而不是推送到 GitHub 上的新分支 (feature/123)。

git checkout -b feature/123 origin/release/1.0
Run Code Online (Sandbox Code Playgroud)

目前,有效的工作流程是:

git checkout release/1.0
git pull
git checkout -b feature/123
Run Code Online (Sandbox Code Playgroud)

不过,我必须做很多这样的事情,感觉我应该能够跳过在本地拉入 release/1.0 分支的过程,而是用一个命令创建我的分支。

有没有办法做到这一点,或者我们是否必须继续拉取最新版本,然后从本地分支?

解决方案

更新全局 git 配置

git config --global branch.autoSetupMerge false
Run Code Online (Sandbox Code Playgroud)

从最新版本创建新分支

$ git fetch --all
$ git checkout -b feature/123 origin/release/1.0
$ git push --set-upstream origin feature/123
Run Code Online (Sandbox Code Playgroud)

Sch*_*ern 4

当您从远程分支分支时,Git 会自动将远程设置为“跟踪分支”。这是推送和拉取时将使用的远程分支。

$ git checkout -b feature/123 origin/release/1.0
Branch 'feature/123' set up to track remote branch 'release/1.0' from 'origin'.
Switched to a new branch 'feature/123'
Run Code Online (Sandbox Code Playgroud)

您不希望它跟踪遥控器。您可以使用 将其关闭--no-track

$ git checkout --no-track -b feature/123 origin/release/1.0
Run Code Online (Sandbox Code Playgroud)

您可以使用 全局更改行为branch.autoSetupMerge

$ git config --global branch.autoSetupMerge false
Run Code Online (Sandbox Code Playgroud)

现在feature/123没有跟踪分支。当你运行时git push,它必须猜测将你的分支推送到哪里。这可以通过配置push.default。您可能想要simple默认值。

simple - 将当前分支推送到远程具有相同名称的分支。


不过,我必须做很多这样的事情,感觉我应该能够跳过在本地拉入 release/1.0 分支的过程,而是用一个命令创建我的分支。

请注意,您仍然需要git fetch远程确保您拥有最新版本。

git fetch origin
git checkout -b feature/123 origin/release/1.0
Run Code Online (Sandbox Code Playgroud)

这是 Git 的分散特性,它不假设您已连接到遥控器。尽管定期进行是安全的git fetch

为了确保您的功能分支与最新更改保持同步,您必须定期从 release/1.0 更新您的分支。

git fetch origin
git rebase origin/release/1.0
Run Code Online (Sandbox Code Playgroud)

这就是与他人合作的本质。