【问题标题】:gitlab Request to merge branch-A into develop (3 commits behind) should I worry?gitlab 请求将分支 A 合并到开发中(后面有 3 个提交)我应该担心吗?
【发布时间】:2017-07-21 20:30:10
【问题描述】:

在 gitlab 中创建合并请求时,我经常收到一条消息: 请求将分支 A 合并到开发中([x] 提交后) gitlab 想告诉我什么? 我应该担心还是需要解决一些问题(什么)?

【问题讨论】:

    标签: merge gitlab


    【解决方案1】:

    一段时间后,合并请求在项目中打开,由于其他人合并他们自己的更改,您尝试合并到的分支版本过时是正常的。

    Gitlab 通过显示您更新的分支版本落后于远程分支的程度来帮助您。

    落后不会对合并的行为造成任何阻碍,但是rebase 你的提交在你合并到的分支之上是一种常见的做法。这将通过将您的提交按时间顺序放在该分支中已经存在的提交之后来更新您的合并请求。这种方法使负责合并的人的工作更容易,因为提交者自己已经解决了可能发生的任何冲突。

    按照您提出的方案执行rebase 将是这样的:

    # Add a remote named `upstream` pointing to the original repository
    git remote add upstream https://gitlab.example.com/example/your_project.git
    
    # Fetch the latest commmits from `upstream`
    git fetch upstream
    
    # Checkout our branch-A
    git checkout branch-A
    
    # Rebase our branch on top of the `upstream/develop` branch
    git rebase upstream/develop
    
    # If needed fix any conflicts that may have appeared and then `git rebase --continue`  
    
    # Push the changes to the branch of your merge request
    git push --force origin branch-A
    

    注意:--force 标志在你推送时是必需的,因为你正在重写 origin/branch-A 的提交历史。来自git's doc

    [--force] 会导致远程仓库丢失提交; 小心使用。

    【讨论】:

    • 感谢您的全面回答。但是我需要git remote add upstream 做什么?当所有远程分支都已获取时,是否也可以只执行git rebase develop
    • 你可以只合并而不是变基。否则你知道你在做什么,我不建议重新定位
    • 推荐使用 'git push -- force' 是不好的做法。 --force 只能由知道自己在做什么的管理员用户使用,因为其效果可能是毁灭性的且无法恢复。
    • @JasonCrocker 在我们自己的分支上使用--force 的示例中,所以这样做没有问题。 git push --force 是一个工具,应该在适当的时候使用。
    【解决方案2】:

    如果您看到“在 X 提交之后”消息,则 gitlab 表明您要合并的分支已经从您的分支点移动。

    当您在 gitlab 中查看差异时,它们可能看起来令人困惑,可能表明您将撤消在目标分支上的后续提交中实现的更改。

    如果您想确保准确看到合并将执行的更改,最安全的做法是通过首先在目标分支中合并来更新您要合并的分支...

    # fetch the latest code on all branches
    git fetch
    
    # checkout your working branch (if you're not already on it)
    git checkout branch-A
    
    # merge in the target branch
    git merge origin/develop
    

    修复任何可能出现的冲突,然后提交:

    # stage changes & commit
    git add .
    git commit
    
    # push changes to origin
    git push
    

    如果您现在刷新 gitlab 上的合并请求页面,“后面”消息将消失,差异将仅反映您所做的更改。

    这比重新设置分支要安全得多,因为它不需要 --force 推送。这也意味着 git 时间线的年表与实际发生的情况相匹配,因此如果您试图在未来追踪某个问题,您不会被重写历史所误导。

    缺点是提交历史看起来有点混乱。

    【讨论】:

      【解决方案3】:

      除了@alejdg 的回答, 防止这种情况发生

      [--force] 会导致远程仓库丢失提交;小心使用。

      您也可以使用--force-with-lease,它比--force 更安全, 如果在您的 rebase 和您的 push --force more information 之间插入其他提交

      【讨论】:

        【解决方案4】:

        除了上面的答案之外,我通常会执行以下操作来重新定位我的本地分支并推送。如果我是贡献者,通常我会将远程源添加到本地 git 存储库中。

        git pull
        git checkout <your-branch>
        git rebase origin/<remote-branch>
        git push --force origin <your-branch>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-13
          • 2020-02-12
          • 2020-02-17
          • 1970-01-01
          • 1970-01-01
          • 2017-03-25
          • 2021-05-24
          相关资源
          最近更新 更多