我了解如何删除已 merge 到 master ( http://stevenharman.net/git-clean-delete-already-merged-branches ) 中的分支。如何删除已压缩的分支,然后 merge 到主分支中?
例如:
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-Complete 和 Feature-A-InProgress 的当前状态,它们将是相同的(尽管它们的历史记录会不同)。
我知道删除 Feature-A-InProgress 不一定安全,因为中间版本会丢失,但在这种情况下我不在乎,因为最终状态已提交给 master。
谢谢!
编辑:修复示例中不一致的分支名称
最佳答案
当您将源分支 branch_A merge 到目标分支 branch_B 时,使用 --squash
git 会将工作树放入与正常 merge 的状态相同,但是,它不会暂存更改,也不会创建新的 merge 提交(具有多个父项)。您必须暂存并提交此更改。这意味着此新提交未引用 merge 源 (branch_A)。因此可以使用 git branch -D 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)
关于Git - 清理压扁的分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337695/