最近在修改部落格時腦子有點蒙,幾個
commit
提交得都有點問題,提交到線上才發現又寫了好幾個bug
,導致網站經常500
,沒辦法,趕緊修復唄,這也沒什麼,反正都是本地git
,但是之後部落格準備開源的,這麼糟糕的commit
真的要放到github
上嗎?
合併 commit
,唯一的優點,就是看起來相當乾淨,commit
看起來也是相當完美,算了,編不下去了,快點開始吧。
首先git log
檢視下
commit 1a76bac5e0edbc5d3d70e017eced9ee334f78a60
Author: jourdon <admin@qiehe.net>
Date: Mon Apr 2 09:55:40 2018 +0000
test 3
commit b59c48ce22a5de512fcecbaa66d23cf03fc27b5f
Author: jourdon <admin@qiehe.net>
Date: Mon Apr 2 08:16:44 2018 +0000
fix bug
commit 89b42221a2517a307979658e8e3159110fde2700
Author: jourdon <admin@qiehe.net>
Date: Thu Mar 15 05:32:01 2018 +0000
test 2
commit a665822532841654e87e2a7ea5ba7a896b57c045
Author: jourdon <admin@qiehe.net>
Date: Wed Mar 14 03:20:37 2018 +0000
test 1
fix bug
這條 commit
不好看,幹掉他。
git rebase -i 89b42221a // 這裡跟的 commit 是 test2 的 commit-id,test2 是不會被幹掉的。
正常情況下,敲了命令會出來 VIM
的編輯器,但是這裡你可能會遇到問題,出現的可能是另外的編輯器,比如 nano
,這個實在不好用,我們還是要換回 vim
update-alternatives --config editor
你會看到下面的介面
There are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path Priority Status
------------------------------------------------------------
*0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 10 manual mode
Press <enter> to keep the current choice[*], or type selection number:
vim.basic
是一個完整版的 vim
,但沒有影像介面,選單欄vim.tiny
是一個 vim
的縮減版
這裡選 3
就可以了。
我們繼續
pick b59c48c fix bug
pick 1a76bac test 3
# Rebase a665822..1a76bac onto a665822 (3 command(s))
#
# 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
# d, drop = remove commit
上面的介面,先列出當前分支最新的2個 commit
(越下面越新)。每個commit
前面有一個操作命令,預設是 pick
,表示該行 commit
被選中,要進行 rebase
操作。2個 commit
的下面是一大堆註釋,列出可以使用的命令。
- pick:正常選中
- reword:選中,並且修改提交資訊;
- edit:選中,rebase時會暫停,允許你修改這個commit(參考這裡)
- squash:選中,會將當前commit與上一個commit合併
- fixup:與squash相同,但不會儲存當前commit的提交資訊
- exec:執行其他shell命令
squash
和fixup
都可以用來合併 commit
,唯一的區別是 squash
會把 commit message
也合併,而 fixup
只會留下最新的一條 commit message
, 現在我們先把需要合併的 commit
前面的動詞,改成 fixup
(或者f
),然後就是 :wq
儲存吧。
需要注意的是合併
commit
是不可以把全部commit
合併成一條的,因為預設是需要有一條前置的commit
,也就是第一條commit
是沒辦法合併的
儲存完成後,你有兩個選擇
git rebase --continue //確認 rebase
git rebase --abort //取消 rebase
確認後,就可以上傳到遠端了。
git push -f //強制覆蓋遠端
去伺服器上看一下
commit 1a76bac5e0edbc5d3d70e017eced9ee334f78a60
Author: jourdon <admin@qiehe.net>
Date: Mon Apr 2 09:55:40 2018 +0000
test 3
commit b59c48ce22a5de512fcecbaa66d23cf03fc27b5f
Author: jourdon <admin@qiehe.net>
Date: Mon Apr 2 08:16:44 2018 +0000
fix bug
commit 89b42221a2517a307979658e8e3159110fde2700
Author: jourdon <admin@qiehe.net>
Date: Thu Mar 15 05:32:01 2018 +0000
test 2
commit a665822532841654e87e2a7ea5ba7a896b57c045
Author: jourdon <admin@qiehe.net>
Date: Wed Mar 14 03:20:37 2018 +0000
test 1
發現並沒有推上來,這裡是因為我們本地推送到倉庫是強制覆蓋的,站點目錄需要 git pull
下來。但是倉庫與站點目錄現在有衝突,所以我們需要再強制覆蓋本地。
git fetch --all
git reset --hard origin/master
git pull
伺服器返回 Already up-to-date
,
再次 git log
commit 1a76bac5e0edbc5d3d70e017eced9ee334f78a60
Author: jourdon <admin@qiehe.net>
Date: Mon Apr 2 09:55:40 2018 +0000
test 3
commit 89b42221a2517a307979658e8e3159110fde2700
Author: jourdon <admin@qiehe.net>
Date: Thu Mar 15 05:32:01 2018 +0000
test 2
commit a665822532841654e87e2a7ea5ba7a896b57c045
Author: jourdon <admin@qiehe.net>
Date: Wed Mar 14 03:20:37 2018 +0000
test 1
搞定!
這裡是重點
本文說的是合併,但是強烈不建議合併,我這裡只是自己的一個小專案為了好看而已,但是如果你真的在專案中這麼做了,只會被隊友嫌棄,不,是唾棄,你已經無法與隊友合作完成專案了,因為你合併後的專案不管多麼漂亮,都是一個亂七八糟的專案,Git
的意義已經不復存在了。