合并后的git branch恢复

时间:2014-01-06 18:11:55

标签: git merge branch

如果我将git功能分支合并到master上,那么最好删除分支吗?

让我们说6个月后,我想复活那个已删除的分支(假设一个新克隆的回购)。有没有办法轻松地重新创建它或找到它的历史假设它被合并回主人?这样做的最佳方式是什么?

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

1 个答案:

答案 0 :(得分:2)

合并后删除分支是否最佳取决于分支对工作流程的意义。如果它是一个用于准备新版本的分支,一旦发布就绪就会合并到主版本中,那么你就会想要保留它。如果是开发一个单一功能暴殄天物分支,那么它通常最好删除它,所以你不要有几十完成分支搞乱你的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

第一个父项是合并前的master状态;第二个是合并的分支的状态,这是你想要的。在那里重新创建您的分支并使用以下方式查看:

git checkout -b branch-name d7725b0

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

git merge --no-ff branch-name

如果总是希望如此,您可以在配置中设置它:

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