gpt4 book ai didi

git - 如何防止 fork 的 git repo 发散

转载 作者:行者123 更新时间:2023-12-04 02:02:20 27 4
gpt4 key购买 nike

以下一系列 git 命令导致 repos 出现分歧。我究竟做错了什么?

  • 来自 GitLab 的 Fork 项目

    call the parent project 'upstream'

  • 从 fork 项目克隆 repo
  • 在分支 master 中进行本地编辑
  • 提交本地编辑,推送到 fork 仓库
  • 上游 repo 有来自其他开发人员的提交
  • 从上游仓库获取最新提交

    git pull --rebase upstream master

  • 将来自上游的、现在本地的最新提交 merge 到
    fork repo

    git push origin master

  • git 表示我的分支分别因 x 次提交和 y 次提交而出现分歧。让我做一个 git pull这最终使历史变得困惑。

  • 这样做的正确方法是什么?

    最佳答案

    让我们解决这个问题。

    有 3 个存储库:您的本地克隆、上游、您的分支(源自您的本地克隆)

    在第 2 步之后,它们看起来像这样:

    上游的

    o---o---o
    a b c

    fork
    o---o---o
    a b c

    本地的
    o---o---o
    a b c

    在第 5 步之后,repos 看起来像这样:

    上游的
    o---o---o---o---o
    a b c d e

    fork
    o---o---o---o---o---o
    a b c f g h

    本地的
    o---o---o---o---o---o
    a b c f g h

    也就是说,上游有新的提交 de ,并且您进行了新的提交 f , gh
    现在,你做 git pull --rebase upstream master
    存储库现在看起来像这样:

    上游的
    o---o---o---o---o
    a b c d e

    fork
    o---o---o---o---o---o
    a b c f g h

    本地的
    o---o---o---o---o---o---o---o
    a b c d e f' g' h'

    哪里 ff'不是同一次提交 - f'应该相当于 f ,但它有一个不同的父级。

    你可以在这里看到,本地现在有不同的历史可以 fork ; push 它不仅仅是添加新提交的情况。两者都认为在 c 之后会出现不同的提交,且两个分支不收敛;如果你添加了所有的提交,你最终会得到这个图:
            ,-----------o---o---o
    | f g h
    o---o---o---o---o---o---o---o
    a b c d e f' g' h'

    现在的 HEAD 是什么? hh' ?既不保存对方的历史。

    您可以 merge 这些,但那是错误的,因为您在 f 中有等效的更改和 f' , gg'等等。

    你可以做
    git push -f

    这会扔掉 f , gh从 fork 并使它看起来像本地(您仍然有 f'g'h' ),如果没有其他人从 fork 克隆,这可能没问题

    在第 6 步,您本可以做的,而不是做 rebase
    git pull upstream master

    这将导致 merge ,因此 repos 将如下所示:

    上游的
    o---o---o---o---o
    a b c d e

    fork
    o---o---o---o---o---o
    a b c f g h

    本地的
            ,---o---o---o---,
    | f g h |
    o---o---o---o---o-------o
    a b c d e m

    哪里 m是一个 merge 提交。这可以通过简单地推送到 fork,因为它只是添加额外的提交。

    但是,如果您打算向上游发出 pull 请求,最好不要 merge 他们的更改,让他们 pull 并处理 merge 。

    关于git - 如何防止 fork 的 git repo 发散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46341291/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com