[英]Merge GIT branch without commit log
目前,當我使用 GIT 時,我為每個作業創建一個分支,並在完成之前進行各種提交。 然后我與我的主分支合並並向上游推送。 我很可能在任何時候都有幾個分支,並且隨着事情的出現,在工作中途在它們之間輕彈。
但是這些提交中的大多數只是保存點,即在宏偉的計划中並不那么重要。 所以當我合並分支時,我希望分支日志沒有與主日志合並。
有沒有辦法只合並下面提交 g 的日志消息(而不是提交 c 或 e)?
a [master]
|
b (create branch 'job')
|\
| \
| c
| |
d e
| |
f g (next step is to merge 'job' branch with 'master')
當我使用“每個功能分支”的方法時,我認為merge --squash
非常有用。 我在臨時分支中的提交歷史完全是垃圾,完全沒有意義。 我真的希望再也看不到那段歷史,而不僅僅是能夠跳過它。
當提交進入代碼審查時,重要的是不要創建額外的提交。
有,但這是無稽之談。 你為什么要這樣做? 您將丟失所有分支歷史記錄和信息。
您可以使用g
的提交消息進行合並提交,然后使用--first-parent
選項瀏覽歷史記錄。
如果您真的想從分支中丟失歷史記錄,請使用git merge --squash
,但我不建議這樣做
編輯
如果您不滿意,因為您認為您的歷史記錄不是很干凈,您可以使用 Git 的rebase 功能:
您可以追溯編輯舊提交並從現有分支創建新提交(實際上是重寫它)。 它允許您改寫提交消息、拆分提交、將提交壓縮為單個提交、重新排序提交等。
當你還沒有發布你的分支(即它只是一個私有分支)時,你應該只使用 rebase,因為如果有人繼續在舊的(rebase 之前)分支上工作,它會讓其他開發人員頭疼並可能在以后導致合並問題.
如“ 修剪 GIT 簽入/壓縮 GIT 歷史記錄”中所述,如果您的提交c
和e
是使用帶有fixup!
前綴的注釋完成的fixup!
,然后rebase --interactive --autosquash
(git1.7+,2010 年 2 月)可以完全滿足您的要求。
與
fixup!
指令,您可以在提交消息中保持壓縮“不可見”,同時仍然受益於使用 --autosquash 選項的自動提交重新排序。
提交一個fixup!
前綴,可以定義別名
[alias]
fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' $@)\"' -
然后fixup
別名將應用於那些“提交(哪些)只是保存點,即在事物的宏偉計划中並不那么重要”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.