【问题标题】:git branch restoration after merge合并后的git分支恢复
【发布时间】:2014-01-06 18:11:54
【问题描述】:

如果我将一个 git 功能分支合并回 master,是否最好删除该分支?

假设 6 个月后,我想恢复那个被删除的分支(假设一个新克隆的 repo)。有没有办法轻松地重新创建它或假设它被合并回主人找到它的历史?最好的方法是什么?

通过阅读其他问题,我发现如果我能找到那个分支的负责人,我可以轻松地重新创建它,但我该怎么做呢?其他一些问答响应引用了“reflog”命令,但如果我刚刚克隆了 repo,这不会返回任何有用的东西。

【问题讨论】:

    标签: git merge branch


    【解决方案1】:

    合并后是否最好删除分支取决于分支对您的工作流程的意义。如果它是一个用于准备新版本的分支,一旦版本准备好,它就会合并到 master 中,那么你会想要保留它。如果它是用于开发单个功能的一次性分支,那么通常最好将其删除,这样您就不会在 git branch 输出中混杂许多已完成的分支。

    如果您想稍后重新创建已删除的分支,您需要做的就是找到与其上次提交对应的 SHA。如果您手边没有 reflog,则必须尝试使用​​ git log 找到它。最简单的方法是使用以下内容搜索合并提交:

    # This should match the message of the merge commit, if you kept the default.
    git log --grep=branch-name
    

    找到合并提交后,您会看到列出了两个父级:

    commit 38bf1d168e73f9fa708c334e50f256578d5c2d8f
    Merge: a08b280 d7725b0
    

    第一个parent是合并前master的状态;第二个是合并的分支的状态,这就是你想要的。在那里重新创建你的分支并检查它:

    git checkout -b branch-name d7725b0
    

    作为旁注,这仅在合并不是快进合并时才有效。快进合并只是将HEAD 压缩到正在合并的引用,因此它不会创建合并提交。您可以使用以下命令强制 git 在合并时始终进行新提交:

    git merge --no-ff branch-name
    

    如果你总是想要这种情况,你可以在你的配置中设置它:

    git config branch.master.mergeoptions  "--no-ff"
    

    【讨论】:

    • 我认为只有在被合并的分支开始后没有对 master 进行任何更改时才会发生快进合并?
    • 正确。当它发生时,你会在“合并”的输出中看到关于它的注释。这里有更多解释:ariya.ofilabs.com/2013/09/fast-forward-git-merge.html
    猜你喜欢
    • 2013-12-27
    • 2012-07-06
    • 2022-08-18
    • 1970-01-01
    • 2018-05-28
    • 2021-10-24
    • 1970-01-01
    • 2021-11-03
    • 2015-11-15
    相关资源
    最近更新 更多