合并后的 Git 分支恢复问题

3

如果我将git功能分支合并回主分支,最好删除该分支吗?

假设6个月后,我想要恢复已删除的分支(假定是一个全新克隆的仓库)。 有没有一种简单的方法来重新创建它或者找到它的历史记录,假设它已经被合并回主分支?如何做到最好?

从阅读其他问题中,我发现如果我可以找到该分支的头部,那么我可以很容易地重新创建它,但我该如何去找它呢? 一些其他的问答回复引用了“reflog”命令,但如果我刚克隆存储库,这并没有返回任何有用的信息。

1个回答

4
无论是否删除分支,取决于该分支对您的工作流程意味着什么。如果它是用于准备新版本的分支,并在准备就绪后合并到主分支,则需要保留该分支。如果它是用于开发单个功能的临时性分支,则通常最好将其删除,以免在 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移动到被合并的引用处,因此不会创建合并提交。 你可以通过使用以下命令强制git在每次合并时创建新的提交:

git merge --no-ff branch-name

如果你希望这种情况始终存在,你可以在配置文件中设置:

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

我认为只有在自从分支开始后,主分支没有进行任何更改时,才会发生快进式合并,是吗? - KyleL
1
正确。当它发生时,您将在“合并”输出中看到有关它的注释。这里有更多的解释:http://ariya.ofilabs.com/2013/09/fast-forward-git-merge.html - Ash Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接