【问题标题】:Git pull on non-working branch without switchingGit拉到非工作分支而不切换
【发布时间】:2016-03-29 05:32:57
【问题描述】:

我们有一个开发分支,它是我们的主分支和一个单独的维护分支。当我修复错误时,我经常不得不从主人那里挑选提交给维护,反之亦然。通常我通过执行以下过程来完成此操作...

  1. 在主分支上提交
  2. 将提交推送到远程
  3. 切换/结帐到维护分支
  4. Cherry-pick 步骤 1 中的提交
  5. 构建并确保一切仍按预期工作
  6. 将维护提交推送到远程

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

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

【问题讨论】:

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


【解决方案1】:

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

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

否则(git git-new-workdir 脚本并使用它。

【讨论】:

  • 我今天将 git 更新到最新版本并尝试了工作树。它工作得很好。唯一的问题是 TortoiseGit 还不支持 git 工作树,但我只是要学习使用 BASH 终端。谢谢。
【解决方案2】:

您只需运行fetch(在另一个存储库中)即可将新提交下载到另一个存储库:

git fetch origin

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

git cherry-pick origin/master

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

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 2022-11-02
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多