論優(yōu)雅地使用 Git ——修改歷史

以下內(nèi)容都是針對沒有push之前的操作受扳,push之后要修改就比較麻煩了琐簇。

再提一點(diǎn)題外話,帥氣的敲完一行命令头朱,回車之前請冷靜一秒鐘运悲。

修改上一次的提交說明

這是一個很常見的需求,打錯字了什么的项钮,強(qiáng)迫癥是絕對不能忍的班眯。

git commit --amend

會打開一個編輯器希停,可以在里面修改最后一次的提交說明,保存并退出即可鳖敷。

修改上一次提交脖苏,增加一個文件

git add你剛才沒提交的文件(當(dāng)然這里還可以git rm刪掉你剛才錯誤提交的文件等等)

然后git commit --amend, 在編輯器里面看到

add newfile.txt for testing

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Sat Nov 11 14:25:39 2017 +0800
#
# On branch master
# Changes to be committed:
#   new file:   last.txt
#   new file:   newfile.txt
#

第一行是之前的提交說明,最后幾行是修改后的commit定踱,先檢查一下commit,確認(rèn)無誤之后恃鞋,如有必要修改提交說明崖媚,這里我增加一行“add lost.txt”,保存退出恤浪,最后一次提交即被修改

$ git log -1
commit e8f84c4594c3492d98845f65c7483ddcf5bd37d4 (HEAD -> master)
Author: ***
Date:   Sat Nov 11 14:25:39 2017 +0800

    add newfile.txt for testing
    add lost.txt

合并歷史提交

忘提交文件的問題畅哑,除了修改上一次的提交,還可以直接commit這個文件水由,然后把這個提交和上一個合并荠呐。

另外,在開發(fā)過程中砂客,會有無數(shù)無意義的commit泥张,比如重構(gòu)的時候,我喜歡改一點(diǎn)就提交鞠值,每次提交變化都不大媚创,review code的效果比較好,有助于保證開發(fā)質(zhì)量彤恶;比如 git commit -m "回家再寫",但是測試通過合并到master的時候钞钙,以項(xiàng)目視角來看,這些commtis是多余的声离,這時候我們就可以在合并到master之前把這些commit合并為一個git commit-m "refactor: ..."

這里有兩個commit:

$ git log -2

commit 46104f1e69b2858e3b915b0c30e90b39dd0a96b4 (HEAD -> master)
Author: ***
Date:   Sat Nov 11 15:24:44 2017 +0800

    finished

commit 3f82622b2b0f4628f8608499b4fa9038c09fad85
Author: ***
Date:   Sat Nov 11 15:23:52 2017 +0800

    回家再寫

我們使用git rebase -i以交互的方式來修改芒炼。

要修改的是最近兩次的提交,合并為一個术徊。

$ git rebase -i HEAD~2

顯示:

pick 3f82622 回家再寫
pick 46104f1 finished

# Rebase e8f84c4..46104f1 onto e8f84c4 (2 commands)
#
# 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
#
# 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

需要注意的是這里提交歷史的順序和git log是相反的本刽。

我們要把兩個提交合并為一個,因此是將第二個 pick改為squash弧关,其意思是“壓縮”盅安。當(dāng)然,如果是三個提交合并世囊,就把后兩個pick改為squash别瞭。

Commands提示了這里還可以進(jìn)行的操作,你有需要可以自己研究一下株憾。

修改之后蝙寨,保存退出晒衩,進(jìn)入下一步,修改提交說明

# This is a combination of 2 commits.
# This is the 1st commit message:

回家再寫

# This is the commit message #2:

finished

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Sat Nov 11 15:23:52 2017 +0800
#
# interactive rebase in progress; onto e8f84c4
# Last commands done (2 commands done):
#    pick 3f82622 回家再寫
#    squash 46104f1 finished
# No commands remaining.
# You are currently rebasing branch 'master' on 'e8f84c4'.
#
# Changes to be committed:
#   new file:   file.txt
#

如有需要墙歪,修改提交說明听系,這里我修改為

finished

# Please enter the commit message for your changes. Lines starting
...

保存退出,提示操作完成虹菲。

$ git rebase -i HEAD~2
[detached HEAD 45d77b7] finished
 Date: Sat Nov 11 15:23:52 2017 +0800
 1 file changed, 3 insertions(+)
 create mode 100644 file.txt
Successfully rebased and updated refs/heads/master.

查看一下歷史

$ git log -2
commit 45d77b75eb7a5fd44cc3313df893195d9a4db905 (HEAD -> master)
Author: ***
Date:   Sat Nov 11 15:23:52 2017 +0800

    finished

commit e8f84c4594c3492d98845f65c7483ddcf5bd37d4
Author: ***
Date:   Sat Nov 11 14:25:39 2017 +0800

    add newfile.txt for testing
    add lost.txt

沒問題靠胜。

這里只說了幾個單純場景下的對歷史提交的操作,更全面的使用請自行Google.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毕源,一起剝皮案震驚了整個濱河市浪漠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霎褐,老刑警劉巖址愿,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冻璃,居然都是意外死亡响谓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門省艳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娘纷,“玉大人,你說我怎么就攤上這事拍埠∈唬” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵枣购,是天一觀的道長嬉探。 經(jīng)常有香客問我,道長棉圈,這世上最難降的妖魔是什么涩堤? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮分瘾,結(jié)果婚禮上胎围,老公的妹妹穿的比我還像新娘。我一直安慰自己德召,他們只是感情好白魂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著上岗,像睡著了一般福荸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肴掷,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天敬锐,我揣著相機(jī)與錄音背传,去河邊找鬼。 笑死台夺,一個胖子當(dāng)著我的面吹牛径玖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颤介,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梳星,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滚朵?” 一聲冷哼從身側(cè)響起丰泊,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始绍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體话侄,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亏推,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了年堆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吞杭。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖变丧,靈堂內(nèi)的尸體忽然破棺而出芽狗,到底是詐尸還是另有隱情,我是刑警寧澤痒蓬,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布童擎,位于F島的核電站,受9級特大地震影響攻晒,放射性物質(zhì)發(fā)生泄漏顾复。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一鲁捏、第九天 我趴在偏房一處隱蔽的房頂上張望芯砸。 院中可真熱鬧,春花似錦给梅、人聲如沸假丧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽包帚。三九已至,卻和暖如春曹质,著一層夾襖步出監(jiān)牢的瞬間婴噩,已是汗流浹背擎场。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留几莽,地道東北人迅办。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像章蚣,于是被迫代替她去往敵國和親站欺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Git是目前最流行的版本管理系統(tǒng)纤垂,也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,707評論 1 17
  • git作為時下最流行的代碼管理工具矾策,Git權(quán)威指南總結(jié)了十條喜歡Git的理由: 異地協(xié)同工作; 現(xiàn)場版本控制峭沦; 重...
    古斟布衣閱讀 1,824評論 0 12
  • 忽然想起了這幾天為什么不開心了贾虽,因?yàn)榘。液镁脹]有看窗外的太陽了吼鱼,想想每天早上8點(diǎn)起蓬豁,行路匆匆,一晃眼菇肃,就到了下午...
    蘇水恒閱讀 312評論 0 1
  • “明德”語出《大學(xué)》:“大學(xué)之道地粪,在明明德,在親民琐谤,在止于至善蟆技。”自建校伊始斗忌,農(nóng)大人就辛勤耕耘于中原沃野质礼,與...
    憶聽雨軒閱讀 2,693評論 0 0
  • 熙熙攘攘的街道 一個人閑逛 莫名與你擦肩 驚喜來得突然 轉(zhuǎn)瞬消失不見 名曰暫且放過 還是紛紛擾擾的街 一個人散步 ...
    阿琴姑娘閱讀 1,381評論 120 106