gpt4 book ai didi

Git rebase 每次提交后暂停

转载 作者:行者123 更新时间:2023-12-04 10:31:55 24 4
gpt4 key购买 nike

假设我们有两个版本的库 X:v1 和 v2

我是另一个使用库 X 的库 Y 的维护者。我使用的是库的 v1,它在主库中。

然后库 X 提出了一个新版本 v2,这要求我改变我使用库的方式(仅更改包,库 X 更改了它的名称)。 v1 版本现已弃用。

但是,因为我的库目前正在被企业用户使用,他们不愿意更新到使用 v2 的更新版本的库。此外,我应该通过契约(Contract)为旧版本提供修复。

我现在有两个分支:

  • 大师(使用 v1)
  • new_master(使用 v2)

  • 我进行此更改的方式是在 master 上进行开发,并将 new_master 重新定位到 master 上。然后我可以有一个提交,其中包含将所有 v1 包更改为 v2 包的更改(导入行是唯一的更改)。
    master       x----x----x----x----x----n
    new_master x----x----x----x----x----f

    ( rebase 后)
    master       x----x----x----x----x----n
    new_master x----x----x----x----x----n----f

    现在,我在我的库中添加了一个新功能,它需要库 X 的 v2。所以它只会存在于 new_master 中。添加新功能后,树变成了这样。
    master       x----x----x----x----x----x----n
    new_master x----x----x----x----x----x----f----n

    我可以在这里做同样的 rebase ,但是提交 n在主树中也需要修复。我不想在 n 之后再添加一个修复程序new_master 的。

    如果我做一个定期的 re-base 会得到什么:
    master       x----x----x----x----x----x----n
    new_master x----x----x----x----x----x----n----f----n----f

    第二 f是新的修复提交,因为在第二个 n 之后提交,分支 new_master无法编译。

    我需要得到:
    master       x----x----x----x----x----x----n
    new_master x----x----x----x----x----x----n----F----n

    在哪里提交 F是新的修复提交。

    我目前正在做什么来实现这一目标?
  • 我正在通过创建一个名为 new_master2 的新分支来解决这个问题。从 new_master,然后删除那里的新功能。
  • 然后我正在 rebase new_master2到主人身上。
  • 新功能的提交丢失了,所以我从 new_master 中挑选它。
  • 最后我删除了new_master分支,我重命名 new_master2作为新主人。
  • 我通过对 Remote 进行强制推送来完成此操作。

  • 我想做什么?

    找到另一种方法来做同样的事情,而不创建临时分支 new_master2 .

    最佳答案

    据我了解,它是这样的。您有两个分支:master(使用 v1)和 new_master(使用 v2)。
    现在您已经在分支 new_master 中添加了一个新提交。

    master        x----x----x----x----x----x1----n

    new_master x----x----x----x----x----x1----f----n

    现在为您实现以下结果:
    master       x----x----x----x----x----x1----n

    new_master x----x----x----x----x----x1----n----f----n

    您可以像这样进行 rebase :
    git checkout new_master
    git rebase master
    --if there are conflicts solve the conflicts
    --git add files_conflicts_you_solved
    --git rebase --continue

    上面的命令会做的是:
    *移动头部指向new_master分支
    *找到作为两个分支分歧点的提交。在这种情况下是提交 x1。并复制顶部 x1 上的所有提交(在这种情况下,它只有 n 次提交)并粘贴到 new_master 分支的顶部 x1 提交上。

    另一个不使用 rebase 的解决方案是这样的:
    *从主名称dev创建一个分支
    *Cherry 从你的 dev 分支中的 new_master 中挑选所有提交

    以下是命令:
    git checkout  master
    git branch dev
    git checkout dev
    git cherry-pick f^..n

    关于Git rebase 每次提交后暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60381936/

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