git合并多个提交
git合并多個提交
[時間:2016-11] [狀態:Open]
[關鍵詞:git,git rebase,合并提交,commit]
0. 引言
本文是關于Git提交記錄修改的方法,主要是將多個提交記錄合并為一個,然后提交。這里使用到git rebase(一般譯為衍和),多數情況下推薦在未提交到遠程倉庫之前修改本地git提交記錄格式時使用。
我遇到這個問題主要是因為實際提交中需要在多個分支之間切換,不希望在另一個分支上看到當前分支的多次提交,只希望將多次提交壓合成一個提交,然后在另一個分支上直接git cherry-pick即可。
1. 合并多個提交
為了美化commit history不擇手段
首先,為了模擬實際git rebase效果,我們先在git上提交兩個修改。git log如下:
假設合并這兩個提交,可以按照下面過程
git rebase -i HEAD~2
可以先用man查看下git rebase的命令參數,這樣會有如下提示:
pick c6e4557 create second.txt pick e1a7dfa add text in second.txt# Rebase a71eba2..e1a7dfa onto a71eba2 # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out第一列是rebase具體執行的操作,其中操作可以選擇,其中含義如下:
- 選擇pick操作,git會應用這個補丁,以同樣的提交信息(commit message)保存提交
- 選擇reword操作,git會應用這個補丁,但需要重新編輯提交信息
- 選擇edit操作,git會應用這個補丁,但會因為amending而終止
- 選擇squash操作,git會應用這個補丁,但會與之前的提交合并
- 選擇fixup操作,git會應用這個補丁,但會丟掉提交日志
- 選擇exec操作,git會在shell中運行這個命令
對比之前的兩個提交提交,我覺得第一個提交可以保留,第二個合并到第一個就可以了。
將第二個pick改成squash或者s,然后保存退出。如下:
pick c6e4557 create second.txt s e1a7dfa add text in second.txt此時git會自動將第二個提交合并到第一個提交,并彈出合并提示信息,如下:
# This is a combination of 2 commits. # The first commit's message is:create second.txt# This is the 2nd commit message:add text in second.txt# 請為您的變更輸入提交說明。以 '#' 開始的行將被忽略,而一個空的提交 # 說明將會終止提交。 # # 日期: Mon Nov 28 13:59:43 2016 +0800 # # 變基操作正在進行中;至 a71eba2 # 您在執行將分支 'master' 變基到 'a71eba2' 的操作時編輯提交。 # # 要提交的變更: # 新文件: second.txt #如果需要修改下提交信息,如果不需要直接保存退出即可。
此時我們已經完成了將兩個提交合并為一個的處理,可以通過git log查看
commit 251d222ac45f3596943480bd5a7cc695b5d7d6e9 Author: Tocy Date: Mon Nov 28 13:59:43 2016 +0800create second.txtadd text in second.txt總結
注意本文僅僅介紹了我遇到的多個提交合并的問題,關于git rebase用法,建議參考Git Community Book 中文版-rebase和參考資料中的介紹。
多數情況下git rebase僅限在本地使用,也就是在提交到遠程分支之前。
參考資料
轉載于:https://www.cnblogs.com/tocy/p/git-rebase-merge-commit.html
總結
- 上一篇: 龙芯派2亚克力外壳
- 下一篇: dpdk18.11 收发包流程分析