Git - 清理已压缩的分支?

4

我知道如何删除已经合并到主分支的分支 (http://stevenharman.net/git-clean-delete-already-merged-branches)。但是,如果这些分支被压缩后再合并到主分支中,该怎么删除呢?

例如:

C:\source [master]> git checkout -b feature-a-inprogress
C:\source [feature-a-inprogress]> git ac "WIP"
C:\source [feature-a-inprogress]> git ac "WIP"
C:\source [feature-a-inprogress]> git checkout master
C:\source [master]> git checkout -b feature-a-complete
C:\source [feature-a-complete]> git merge --squash feature-a-inprogress
C:\source [feature-a-complete]> git ac "Completed Feature A"
C:\source [feature-a-complete]> git push origin feature-a-complete

当我运行以上的清理操作时,它会删除Feature-A-Complete,但不会删除Feature-A-InProgress。如果您比较Feature-A-CompleteFeature-A-InProgress的当前状态,它们将是相同的(尽管它们的历史记录不同)。
我知道删除Feature-A-InProgress并不一定安全,因为中间版本会丢失,但在这种情况下,我不关心,因为最终状态已提交到主干。
谢谢!
编辑:修正了示例中不一致的分支名称。

6
“git ac”不是真正的命令。你不应该假设每个人都在使用你的自定义别名。 - user229044
另外,为什么不直接使用 git checkout master; git merge --squash feature-a-inprogress 而不是创建一个无用的中间分支呢? - user229044
@meagar 啊,我以为那很常见,但我的AC被定义为ac = !git add --all . && git commit -am,并且所有东西都通过Github拉取请求进行,所以没有人直接修改主分支。 - Steve
git branch -D feature-a-done?(或者 feature-a-complete?) - Ry-
2
@Steve 你使用 ac 别名的习惯很糟糕。理想情况下,你应该花时间仔细地编写提交记录,而不是随意暂存和提交东西。 - jub0bs
@Jubobs 在执行ac之后,我可以看到做了哪些更改,并且在发出PR之前始终审查所做的更改,以避免垃圾进入主分支。 - Steve
1个回答

1

当你使用--squash选项将源分支branch_A合并到目标分支branch_B时,Git会将工作树置于与正常合并相同的状态,但不会暂存更改,也不会创建新的合并提交(具有多个父项)。你需要暂存和提交此更改。这意味着合并源(branch_A)不会被引用到这个新的提交中。因此,可以使用git branch -D branch_A命令删除源分支(branch_A)。

git co branch_B
git merge --squash branch_A
git add .
git commit -m "Merge commit (C)"

这将导致:
o-o-o-B (branch_B)         o-o-o-B-C (branch_B)
   \                 ==>      \
    o-A (branch_A)             o-A (branch_A)

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