Git拉上非工作分支而不切换

时间:2015-12-22 21:15:11

标签: git branch cherry-pick git-cherry-pick

我们有一个开发分支,它是我们的主人和一个单独的维护分支。当我修复bug时,我经常需要从主服务器到维护服务器进行提交,反之亦然。通常我会通过执行以下程序来实现这一目标......

  1. 在主分支上提交
  2. 将提交推送到远程
  3. 切换/结帐到维护分支
  4. Cherry - 从第1步中选择提交
  5. 构建并确保一切仍按预期工作
  6. 将维护提交推送到远程
  7. 我遇到的问题是因为分支已经变得非常不同我每次切换时都需要重建整个项目,这需要花费10分钟。这是预期的,但我不想这样做,因为我经常在分支机构之间切换。所以为了避免这种情况,我创建了第二个工作目录,以便为每个分支创建一个目录。这个问题是我无法将原始的主提交选择到维护目录中,直到我将该提交从远程提取到维护目录的主分支。当我这样做时,我必须完全重建。

    有没有办法将提交拉入维护目录的主分支而不切换?或者,有更好的方法完全这样做吗?我们最近从CVS切换到Git,所以我对它并不熟悉。

2 个答案:

答案 0 :(得分:1)

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

git fetch origin

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

git cherry-pick origin/master

(据我所知,没有优雅的方法在另一个分支上创建一个新的提交,而不是当前检出的分支,所以我认为你需要坚持这两个存储库,如果你不想为了测试你在另一个分支上做出的改变,听起来你还是需要这样做吗?)

答案 1 :(得分:0)

我猜多个工作目录都是专门用于给定分支的,它有自己的构建目录就是你想要的。在这种情况下,您将获得一个附加了多个工作站的单个存储库,因此如果您在一个目录中执行更改(提交或获取,无论如何),则所有更改都会立即显示其他工作。

如果您的git足够新鲜(> = 2.5),则可以使用git worktree,有关详细信息,请参阅this tutorial

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