代码之家  ›  专栏  ›  技术社区  ›  Sri Harsha Chilakapati Vishal Raj

Git在每次提交后都会重新设置基础并暂停

git
  •  0
  • Sri Harsha Chilakapati Vishal Raj  · 技术社区  · 4 年前

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

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

    但是,由于my library当前正被企业用户使用,因此他们不愿意更新到使用v2的my library的更新版本。另外,我应该提供修复旧版本的合同。

    我现在有两个分支:

    • 主(使用v1)
    • 新主机(使用v2)

    我做这个改变的方法是在master上开发,并将新的主控形状重新调整到master上。然后我可以有一个commit,其中包含将所有v1包更改为v2包的更改(导入行是唯一的更改)。

    master       x----x----x----x----x----n
    new_master   x----x----x----x----x----f
    

    (重新基准后)

    master       x----x----x----x----x----n
    new_master   x----x----x----x----x----n----f
    

    master       x----x----x----x----x----x----n
    new_master   x----x----x----x----x----x----f----n
    

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

    如果我做一个定期的基础测试:

    master       x----x----x----x----x----x----n
    new_master   x----x----x----x----x----x----n----f----n----f
    

    第二 f 是新的修复提交,因为 提交,分支 new_master

    我需要得到:

    master       x----x----x----x----x----x----n
    new_master   x----x----x----x----x----x----n----F----n
    

    在哪里提交 F

    我目前正在做什么来实现这个目标?

    • 我正在解决这个问题,通过创建一个新的分支 new_master2 从新的主控形状,然后删除那里的新功能。
    • 然后我要重新调整 新\u master2 上主。
    • 新特性的提交已丢失,因此我将从新的主控形状中挑选它。
    • 新建\u主控形状 作为新的大师。
    • 我通过用力推遥控器来完成这个。

    我想做什么?

    新\u master2 .

    0 回复  |  直到 4 年前
        1
  •  1
  •   Rando Shtishi    4 年前

    当我解开它是这样的。您有两个分支:master(使用v1)和new\u master(使用v2)。 现在您已经在新的主控中添加了一个新的提交分支。

    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
    

    你可以这样做:

    git checkout new_master
    git rebase master
    --if there are conflicts solve the conflicts
    --git add files_conflicts_you_solved
    --git rebase --continue
    

    上面的命令将执行以下操作: *找到两个分支的分歧点commit。在本例中是commit x1。并在top x1上复制所有commit(在本例中仅为n commit),并将其粘贴到新的主分支中的top x1 commit上。

    另一个不使用rebase的解决方案是这样的: *从开发分支的新主应用程序中挑选所有提交

    git checkout  master
    git  branch dev
    git checkout dev
    git cherry-pick f^..n 
    
        2
  •  1
  •   Sri Harsha Chilakapati Vishal Raj    4 年前

    this answer 作者@ZelluX。步骤如下:

    $ git checkout new_master
    $ git rebase -i master
    # Editor opens, find my previous fix commit, and change the command to 'edit'
    # If there are conflicts, fix them and continue rebasing
    # Git will stop after making my old fix commit. Ensure everything compiles there.
    # If you made any changes, then add them and ammend the commit
    $ git add .
    $ git commit --amend
    # Once done, continue rebasing
    $ git rebase --continue
    

    这应该可以解决对旧的fixup提交进行更改的问题。