【问题标题】:How to update(pull) a branch before a pull/merge request?如何在拉/合并请求之前更新(拉)分支?
【发布时间】:2021-04-06 13:46:19
【问题描述】:

例如,假设我有一个名为 develop 的分支,我的所有功能都将是从 develop 创建的一个分支,稍后我将需要执行合并请求(在 GitLab 中,GitHub 中的内容将是拉取请求)。

如果我需要在将新分支推送到 origin 之前更新它并执行合并/拉取请求,“git pull origin develop”是否也会更新我的新分支?
如果没有,我该怎么做?

【问题讨论】:

    标签: git github gitlab


    【解决方案1】:

    有几种方法,这取决于您使用的分支策略。在逐个项目的基础上,我会选择一种策略并坚持下去,但最有效的策略取决于您的需求。

    合并: (从分支执行):

    • git pull(或 git fetch)
    • git 合并起源/开发
    • git 推送

    这保留了历史并且是非破坏性的。它在分支上创建一个新的提交,代表从开发到分支的更改。

    变基: (从分支执行):

    • git pull --rebase(或 git fetch)
    • git rebase origin/develop
    • git push --force(或 git push -f)

    这会改写历史并且具有破坏性。分支上的原始提交被丢弃并重新创建(它们看起来相似(相同的评论、文件和作者身份),但会有不同的提交 ID 和提交时间。它使历史更加“线性”。

    用壁球变基: (从分支执行):

    • git pull(或 git fetch)
    • git rebase origin/develop
    • git rebase -i HEAD~2(假设分支在开发之前提交了 2 次)
    • git push --force(或 git push -f)

    类似于 rebase(上图) - 重写和破坏性 - 但将分支折叠为单个提交。历史不仅是线性的,而且是简洁的——整个分支都被折叠成一个提交。


    我通常的建议是避免对没有经验的团队使用 rebase。使用 rebase 很容易陷入困境,并且有各种各样的事情需要提防。然而,rebase 创造了美好的历史(如果这很重要) - 但取证变得更加困难(如果这很重要)。 "--force" 是 git 告诉你正在关闭安全装置并小心你正在做的事情的方式。

    查看 git-pull 的手册页。有一些命令可以折叠 pull/merge 或 pull/rebase 以将步骤减少一个。还有 git-config 命令可以指定“拉取”始终是“拉取并合并”或“拉取并变基”。

    【讨论】:

      【解决方案2】:

      正确的命令是:

      git fetch
      git switch myNewBranch
      git rebase origin/develop
      git push --force 
      

      这样,您将在最新的origin/develop 之上重放(重新设置)您的新分支

      现有的拉取请求/合并请求将自动更新,其解决方案将是一个简单的合并(因为myNewBranch 提交都是目标分支develop 之上的所有 提交)

      【讨论】:

        猜你喜欢
        • 2017-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        相关资源
        最近更新 更多