2012-08-29 44 views
2

我們在我們的辦公室中使用監視器來顯示有關我們的git存儲庫上所有功能分支的信息。其中一個原因是,我們知道特性分支何時「過時」(即,它們的所有提交已合併到主模塊)。我們使用:在提交已被壓扁時識別過時的分支

git log --pretty=format:'%cd %s' --no-merges --abbrev-commit -n 1 --date=short master..origin/<branch> 

最近我們一直在試圖通過合併功能時回擠壓提交,以保持清潔的歷史。缺點是我們目前識別「過時」分支的方法不再有效。

是否有我們可以用來確定分支是否可以安全刪除的git命令?

+0

如果在壓縮合並中保存自動生成的提交消息,您可以從中提取哈希提交 – galadog

+0

爲什麼要使用'git merge --squash'?一個簡單的'git merge'將在'master'上產生相同的大提交。並且不會危害你的'git log'命令。 – VonC

+0

@VonC我們只是爲了保持提交歷史更簡單。那麼每個功能只有一個提交,因此一眼就可以很容易地看到實現它的過程,如果我們需要刪除特定功能,我們可以恢復單個被壓縮的提交。如果在分支上工作時,人們更有可能做小增量提交,如果他們知道合併時歷史將被整理。 –

回答

0

以下僅適用於未被壓扁的分支,因此不適用於您的情況。在某些情況下它可能仍然有用。

嗯,你總是可以使用git branch -d本身:

git checkout master 
git branch -d <branch> 

-d標誌拒絕刪除沒有被合併到HEAD分支機構,在這種情況下,master。其實,我用它來做cleanup-branches alias簡單地刪除我的倉庫的任何特性分支這已經在我們的生產代碼庫:

git config --global alias.cleanup-branches \ 
    '!git branch | grep -v "\*" | awk "{ print $1 }" | xargs git branch -d' 

我想你的目的,你可以只在一個規範的倉庫cron利用此命令。任何遺留的分支都是活躍的和正在開發的。

+0

但是'git branch -d '將不起作用,因爲它認爲_ _未合併到_HEAD_中。 –

+0

@PirateRob啊是的。我錯過了那一點。我將刪除這個答案,因爲它不適用。 – Christopher

+0

或者只是讓它一個人留下警告,因爲刪除這些東西是一種痛苦。 – Christopher