【问题标题】:What happens in the child branch if I delete a parent branch in git如果我在 git 中删除父分支,子分支会发生什么
【发布时间】:2013-10-23 05:38:12
【问题描述】:

我打算在我的 git 存储库中重命名一个分支。我发现最简单的方法是从该分支创建一个新分支并为其指定所需的名称。

之后我想删除旧分支(父分支)。但如果我这样做,我担心我会丢失新分支中的数据。

如果我删除该分支,最初对父分支所做的提交会发生什么情况?

【问题讨论】:

    标签: git version-control git-branch


    【解决方案1】:

    会发生什么?什么都没有。

    如果您在另一个分支上创建一个分支,您可以“删除”另一个分支而不会丢失任何内容。分支 (HEAD) 只是指向提交的指针。
    只要这些提交被分支 HEAD 引用(或者是分支 HEAD 祖先的一部分),它们就不会丢失。
    即使它们不再被任何分支或标签引用,它们仍然在本地reflog 中(默认情况下)90 天。

    但是,看看man page for git branch,这似乎更容易:

     git branch (-m | -M) [<oldbranch>] <newbranch>
    

    与:

    -m
    --move
    

    移动/重命名一个分支和相应的引用日志。

    -M
    

    即使新分支名称已经存在,也要移动/重命名分支。

    【讨论】:

      【解决方案2】:

      只需使用git format-patch origin -o {output_folder}

      打完所有补丁后,去master创建一个新分支。

      然后像这样应用这些补丁:git am {output_folder}/{patch_name}.patch

      然后在确认您没有丢失任何信息后,您可以使用git Branch -D {name_old_branch}删除旧分支

      【讨论】:

      • 在不必要的分支之间,只需创建另一个分支标签就可以了。但我刚刚成功地使用此方法将补丁应用于移动的存储库。变更集是基于旧的 repo(位置)创建的,但需要推送到另一个,git format-patch 是保存时间戳和提交之间更改分布的好方法。