2015-09-01 60 views
3

我瞭解如何刪除已合併到主設備中的分支(http://stevenharman.net/git-clean-delete-already-merged-branches)。如何刪除已被壓扁的分支,然後合併爲主?Git - 清理壓扁的分支?

例如:

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 

當我運行上面的清理,將刪除功能-A-完整,但不功能-A-INPROGRESS。如果您要比較Feature-A-CompleteFeature-A-InProgress的當前狀態,它們將是相同的(儘管它們的歷史會有所不同)。

據我所知,刪除Feature-A-InProgress不一定是安全的,因爲中間版本會丟失,但在這種情況下,我不在乎,因爲最終狀態是致力於主人。

謝謝!

編輯:例如在固定不一致的分支名稱

+6

'GIT中ac'不是一個真正的命令。你不應該假設每個人都在使用你的自定義別名。 – meagar

+0

另外,你爲什麼不只是'git checkout master; git merge --squash feature-a-inprogress'而不是創建一個無用的中間分支? – meagar

+0

@meagar啊,我認爲這很常見,但我的ac被定義爲'ac =!git add --all。 && git commit -am',一切都通過Github拉請求,所以沒有人直接修改主。 – Steve

回答

1

當合並源分支,branch_A,進入目標分支,branch_B,與--squash混帳將把工作樹在相同的狀態與正常合併,但它不會階段更改,不創建新的合併提交(與多個父母)。您必須執行並執行此更改。這意味着合併源(branch_A)不會從此新提交引用。源分支(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)