Git 在不切换的情况下拉入非工作分支

Git pull on non-working branch without switching

我们有一个开发分支是我们的主分支,还有一个单独的维护分支。当我修复 bug 时,我经常不得不从 master 到维护中挑选提交,反之亦然。通常我通过执行以下过程来完成此操作...

  1. 在主分支上提交
  2. 将提交推送到远程
  3. Switch/Checkout 到维护分支
  4. 从第 1 步中挑选提交
  5. 构建并确保一切仍按预期工作
  6. 将维护提交推送到远程

我遇到的问题是因为分支变得明显不同我每次切换时都必须重建整个项目,这最多需要 10 分钟。这是预期的,但我不想这样做,因为我经常在分支之间切换。因此,为了避免这种情况,我创建了第二个工作目录,以便每个分支都有一个目录。这样做的问题是,在我从远程将该提交拉入维护目录的主分支之前,我无法将原始主提交挑选到维护目录中。当然,当我这样做时,我必须完全重建。

有没有办法在不切换的情况下将提交拉入我的维护目录的主分支?或者,是否有更好的方法来完全做到这一点?我们最近从 CVS 切换到 Git,所以我不太熟悉它。

您可以通过 运行 fetch(在其他存储库中)将新提交下载到其他存储库中:

git fetch origin

但是,fetch只会更新远程跟踪分支,不会更新本地分支,所以master不会移动,但origin/master会。所以你可以挑选最新的提交:

git cherry-pick origin/master

(据我所知,除了当前签出的分支之外,没有其他优雅的方法可以在另一个分支上创建新提交,所以我认为如果你不想这样做,你需要坚持使用这两个存储库切换分支。听起来你无论如何都需要它来测试你在另一个分支上所做的更改?)

我想你想要的是多个工作目录,每个工作目录都专用于给定的分支,有自己的构建目录。在这种情况下,您将获得一个 单个 存储库,其中附加了多个工作目录,因此如果您在一个目录中执行更改(提交或获取等),该更改会立即生效对所有其他工作目录可见。

如果您的 git 足够新鲜 (>= 2.5),您可以选择 git worktree, see this tutorial 了解更多信息。

否则 (git < 2.5) 您可以从 git 贡献中选择 git-new-workdir 脚本并使用它。