Git - 清理压扁的分支?

标签 git

我了解如何删除已 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-CompleteFeature-A-InProgress 的当前状态,它们将是相同的(尽管它们的历史记录会不同)。

我知道删除 Feature-A-InProgress 不一定安全,因为中间版本会丢失,但在这种情况下我不在乎,因为最终状态已提交给 master。

谢谢!

编辑:修复示例中不一致的分支名称

最佳答案

当您将源分支 branch_A merge 到目标分支 branch_B 时,使用 --squash git 会将工作树放入与正常 merge 的状态相同,但是,它不会暂存更改,也不会创建新的 merge 提交(具有多个父项)。您必须暂存并提交此更改。这意味着此新提交未引用 merge 源 (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)

关于Git - 清理压扁的分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337695/

相关文章:

git - 当您的 pull 请求没问题但被要求 "rebase this on master?"之后所有者将 merge 它时,这意味着什么

git - 源分支落后于目标分支 n 次提交

security - 有什么方法可以保证 git 用户在提交和推送时不使用虚假帐户信息?

python - git 存储库包的 PIP 安装错误

git - 有没有从 CVS 到 Git 的迁移工具?

git - 为什么我在两个具有不同哈希值的分支中有相同的提交

java - 在eclipse中安装GIT插件

git - 如何使用 Git 查看文件在哪些提交中被重命名?

git - 提交更改通过 "go get"安装的包的 pull 请求

git - 我如何判断一个提交是否是另一个提交的后代?