2010-08-31 185 views
11

我通常使用git的工作流程是創建一個新的特性分支,用頻繁提交做一些工作,然後在特性工作和/或穩定時合併回開發分支。合併衝突毀壞我的提交信息,同時壓扁提交

通常,當我做git merge --squash feature-branch時,我得到一個很好的「壓扁的以下提交」消息,它自動填充來自功能分支的所有提交消息。但是,如果存在任何合併衝突(比如我在完成這個合併時完成併合並了另一個特性),我似乎失去了來自分支的所有提交消息。自動填充的提交消息填充衝突,但不填充提交消息。我的提交信息去了哪裏?我可以讓他們回來嗎?

+0

爲什麼南瓜呢?如果你認爲你的提交過於頻繁和混亂,那麼你可以使用'rebase --interactive'來清理,然後進行正常合併 - 這樣你就不會失去歷史。 – Cascabel 2010-08-31 03:15:17

回答

4

這並不直接回答你的問題,但你應該能夠避免衝突。

事項在執行合併之前做

git rebase master topic 

。本頁的DESCTIPTION部分應該是有幫助的。這也可以避免對壁球的需求,因爲交互式底圖可以讓您壓縮所選的提交。

編輯: 參見:In git, what is the difference between merge --squash and rebase?

+0

你肯定不會需要在這一點上的壁球合併 - 這將是一個快速前進。 – Cascabel 2010-08-31 03:12:40

1

沒有什麼是真的與混帳丟失。可以使用獲得的特性分支提交的名單:

git cherry feature-branch 

然後簡單地管這git cat-file

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch 

你需要清理的輸出,雖然。我不知道一種更好地自動化的方法。

7

是的,你可以得到南瓜提交信息回來。它存儲在.git/SQUASH_MSG中。

您可以使用它與下面的命令的模板:

git commit -t .git/SQUASH_MSG 
+2

由於某種原因,這並不直接爲我工作,但感謝指向'.git/SQUASH_MSG' :) – 2013-06-14 15:01:27

+0

我運行了命令'git commit --file .git/SQUASH_MSG',它創建了提交消息列表在壓扁的提交中提交所有提交。 – Abdull 2016-06-03 16:01:24