首页 > 解决方案 > 如何恢复分支上的最后一次提交,与其他分支合并并重新添加提交?

问题描述

我有以下问题。一个 git repo 前一段时间被分叉了。从这个 fork 开始,进行了更改,但同时原始 repo 也被修改了很多,不知何故像这样:

A-B-C-D-E master
   \[fork]
    C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master

需要注意的是,fork 基本上解耦了 master 和 remote/master。现在的问题是,我可以从 remote/master 创建一个本地分支并将其直接与本地 master 分支合并。但是,这会带来很多我想避免的合并冲突,因为大多数这些冲突都与 B 之前的主软件包中的更改有关。所以我最终需要做的是进行最后几次提交自 fork 以来的 master 并将它们放在 remote/master 分支的顶部。那可能吗?

标签: git

解决方案


如果有人提出这个问题,我通过以下程序解决了这个问题:

  • 创建了一个仅包含所有提交 AE 的新分支,并从 master 的历史记录中删除了最新的提交 CE:

    git checkout master
    git branch new_branch
    git reset --hard HEAD~5
    
        C-D-E new_branch
       /
    A-B       master
       \[fork]
        C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master
    
  • 将 master 分支与 remote/master 合并,接受来自 remote/master 的所有更改:

    git checkout remote/master
    git merge -Xours master
    
        C-D-E new_branch
       /
    A-B---------------------------      
       \[fork]                    \
        C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master, master
    
  • 签出 master 并使用 remote/master 执行 rebase

    git checkout master
    git rebase remote/master
    
    A-B---------------------------      
       \[fork]                    \
        C'-D'-E'-F'-G'-H'-I'-J'----X' remote/master, master
                                    \
                                     C-D-E new_branch
    

推荐阅读