在不切换的情况下拉取另一个 Git 分支

Mor*_*dur 163 git

我们最近从 SVN 切换到 Git,同时将我们的实时系统置于版本控制中(而不是本地检出和文件复制到实时)。

在分配给我的项目中,我们都访问同一个存储库,并将更改生效git pull。这会导致问题,因为我们的 Web 设计人员将更改推送到 VCS 中,而这些更改不应处于活动状态,但应处于 Web 测试环境中。

当其中一位开发人员投入使用时,他将获得所有(可能未完成的)更改。

我想过实时切换到一个额外的分支,然后合并更改的内容,但由于我缺乏 git 知识,我不知道该怎么做。

我的想法是:

  • 在 live ( git branch live) 中创建一个新分支。
  • 每次都必须上线
    • 在主拉变化(如:git checkout master; git pull; git checkout live
    • git merge master

问题是切换到 master 或将所有内容直接拉入实时系统会导致问题,所以我宁愿避免这种情况。

有没有办法做到这一点,或者有没有更好的方法来管理 Live 系统(除了训练 webbies 不要推送未完成的东西)。

Jef*_*f B 251

通过使用以下命令,我能够在另一个分支中工作时从origin/masterinto 中提取更改master

git fetch origin master:master
Run Code Online (Sandbox Code Playgroud)

要更深入地了解正在发生的事情,请查看此 Stack Overflow问题的出色答案。对我来说主要的收获是这个命令只适用于快进合并

  • 惊人的!正是我正在寻找的 - 这需要更加突出地记录...... (11认同)
  • `fetch` != `pull` (9认同)
  • 这确实将指定的分支更新到上游分支。 (7认同)
  • 添加 `-f` 以防它不是快进,并且你想强制更新它:`git fetch -f origin master:master` (6认同)
  • 您可以在此处找到相关文档:https://git-scm.com/docs/git-fetch#_examples (4认同)

Tob*_*ler 22

您可以git stash在检出 master 和 pull 之前使用,并在检出 live 后再次使用git stash pop(或者如果您的 git 较旧,git stash apply并且git stash clear假设您没有藏任何东西)

  • `git pull --all` 将获取所有遥控器,但它仍会尝试将一个分支(或默认分支)合并到当前分支中。 (8认同)
  • @TobiasKienzler 它只指示 git 从所有配置的遥控器中获取。最常见的情况是只有一个远程命名源。如果您碰巧有多个遥控器与当前的分支具有相同的分支,并且它们彼此之间没有快进关系,那么使用 `--all` 选项将为您提供不同版本的章鱼合并分支成电流!所以我的建议是远离`--all`,除非这是你所追求的,因为在大多数其他情况下它不会给你任何东西。 (3认同)

Jos*_*h K 11

先解决问题。他们不应该推动到他们没有业务推动的分支机构。

你似乎在问什么就像

git checkout live
git pull origin master
Run Code Online (Sandbox Code Playgroud)

这将尝试合并远程主节点和您的实时分支。

  • @dbeme:您可以使用压缩包和补丁。;) 除非他们愿意学习 git(而且分支和合并一点也不难),否则你会遇到问题。 (2认同)