2012-08-17 105 views
1

我有一個非常大的回購需要一些清理。該回購來自SVN,並且一開始就很混亂。只比較當前工作目錄中的更改

有很多分支,其中一些被合併到主幹中,而另一些則沒有。不幸的是,SVN沒有跟蹤這個,所以SVN的合併/未合併分支看起來是一樣的。 (作爲分支只是掛在那裏風)

我想剪掉這些無關的分支和清理了一下。

如何獲取提交的SHA1,並僅比較該提交中發生的更改與主控中的更改? (因此,如果某個分支的提交中的所有更改都在master中,我可以刪除該分支,否則我可以適當地維護該分支)。樹的

例子:

  o--o--o--o--o Unmerged from SVN 
     /
o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o--o Master 
    \        \  /
    o--o--o Merged from SVN  o--o--o 

(注意如何將兩個領域並沒有回到主人就合併爲Git的人都知道,但他們中的一個,所有的變化是主,因爲它被合併雖然這是一個SVN回購,這一個我想刪除)

+1

從SVN導入回購不確定,但我用git log .. 查看分支是否包含在內,因此可以刪除。我應該說 - 如果它合併,它將不會產生任何結果。 – 2012-08-17 00:44:48

+0

對,也可以使用git remote prune刪除已經合併的任何分支(顯然是在遠程服務器上)。然而這些都是懸掛分支。 – Toymakerii 2012-08-17 12:43:25

回答

1

這些分支有不同的哈希?如果沒有,只需運行git checkout master && git branch -d <branch>並完成它。使用小寫的-d標誌,git將拒絕刪除未合併到檢出分支中的分支(在本例中爲master,但它可能是您選擇的任何分支)。

實際上,您可以輕鬆地將其自動化。 This answer顯示了一個git別名,它將刪除未與當前分支合併的任何分支。看它工作有點恐怖,但它工作得很好。

+0

不幸的是,他們確實有不同的哈希值我會更新這個問題以更好地顯示這個 – Toymakerii 2012-08-17 13:34:35

2

仍然嘗試合併一個分支:

git merge --no-commit YourDanglingBranch 

這將嘗試合併YourDanglingBranch,但實際上並沒有提交。

如果YourDanglingBranch已經合併,git足夠聰明,在我的測試中什麼也不做。因此只需使用git merge --abort即可完成此分支,將其安全刪除並繼續。

如果YourDanglingBranch尚未合併,則合併完成而不提交。您可以檢查更改,解決可能的衝突,然後提交合並版本。

+0

星期一會給這個刺戳:) – Toymakerii 2012-08-18 15:59:44