簡體   English   中英

在沒有提交日志的情況下合並 GIT 分支

[英]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 歷史記錄”中所述,如果您的提交ce是使用帶有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM