@[TOC]
1、撤消操作:git commit --amend
在任何一個階段,你都有可能想要撤消某些操作。 這里,我們將會學(xué)習(xí)幾個撤消你所做修改的基本工具批狱。 注意,有些撤消操作是不可逆的展东。 這是在使用 Git 的過程中赔硫,會因為操作失誤而導(dǎo)致之前的工作丟失的少有的幾個地方之一。
有時候我們提交完了才發(fā)現(xiàn)漏掉了幾個文件沒有添加琅锻,或者提交信息寫錯了卦停。 此時,可以運(yùn)行帶有 --amend
選項的提交命令來重新提交:
git commit --amend
這個命令會將暫存區(qū)中的文件提交恼蓬。 如果自上次提交以來你還未做任何修改(例如,在上次提交后馬上執(zhí)行了此命令)僵芹, 那么快照會保持不變处硬,而你所修改的只是提交信息。
文本編輯器啟動后拇派,可以看到之前的提交信息荷辕。 編輯后保存會覆蓋原來的提交信息凿跳。
例如,你提交后發(fā)現(xiàn)忘記了暫存某些需要的修改疮方,可以像下面這樣操作:
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
最終你只會有一個提交——第二次提交將代替第一次提交的結(jié)果控嗜。
當(dāng)你在修補(bǔ)最后的提交時,并不是通過用改進(jìn)后從v的提交 原位替換 掉舊有提交的方式來修復(fù)的骡显,理解這一點非常重要疆栏。從效果上來說,就像是舊有的提交從未存在過一樣惫谤,它并不會出現(xiàn)在倉庫的歷史中壁顶。
修補(bǔ)提交最明顯的價值是可以稍微改進(jìn)你最后的提交,而不會讓“啊溜歪,忘了添加一個文件”或者 “小修補(bǔ)若专,修正筆誤”這種提交信息弄亂你的倉庫歷史。
實例詳解:
先clone
一個倉庫:
如圖:
修改
two.txt
和test.txt
:
查看狀態(tài):
把two.txt
添加到暫存區(qū)(test.txt
忘記添加了):
提交:
查看最近一條提交記錄:
提交完畢后習(xí)慣性查看狀態(tài)蝴猪,會發(fā)現(xiàn)
test.txt
忘記提交了:把
test.txt
添加到暫存區(qū):--amend
修改提交:Git(4)-- 如何退出 git log 和 git commit 狀態(tài)
查看狀態(tài)调衰,全部提交完畢!
查看最近兩條提交記錄自阱,發(fā)現(xiàn)上次的提交記錄不見了嚎莉,
git commit --amend
的提交代替了第一次提交的結(jié)果:2、取消暫存的文件:git reset
接下來的兩個小節(jié)演示如何操作暫存區(qū)和工作目錄中已修改的文件动壤。 這些命令在修改文件狀態(tài)的同時萝喘,也會提示如何撤消操作。 例如琼懊,你已經(jīng)修改了兩個文件并且想要將它們作為兩次獨立的修改提交阁簸, 但是卻意外地輸入 git add *
暫存了它們兩個。如何只取消暫存兩個中的一個呢哼丈? git status
命令提示了你:
新建one.txt
启妹,修改two.tx
t:
取消暫存新建的文件one.txt
:
one.txt
文件已經(jīng)是修改未暫存的狀態(tài)了。
如果取消暫存的是修改的文件two.txt
呢醉旦?如下:
git reset
確實是個危險的命令饶米,如果加上了 --hard
選項則更是如此。 然而在上述場景中车胡,工作目錄中的文件尚未修改檬输,因此相對安全一些。
3匈棘、撤消對文件的修改:git checkout
何方便地撤消修改——將它還原成上次提交時的樣子(或者剛克隆完的樣子丧慈,或者剛把它放入工作目錄時的樣子)?
接2、逃默,現(xiàn)在撤銷對two.txt
的修改:
可以看到新添加的“啊哈哈”已經(jīng)被撤銷了鹃愤!
請務(wù)必記得 git checkout -- <file> 是一個危險的命令。 你對那個文件在本地的任何修改都會消失——Git 會用最近提交的版本覆蓋掉它完域。 除非你確實清楚不想要對那個文件的本地修改了软吐,否則請不要使用這個命令。
如果你仍然想保留對那個文件做出的修改吟税,但是現(xiàn)在仍然需要撤消凹耙,我們將會在 Git 分支 介紹保存進(jìn)度與分支,這通常是更好的做法乌妙。
記住使兔,在 Git 中任何 已提交 的東西幾乎總是可以恢復(fù)的。 甚至那些被刪除的分支中的提交或使用 --amend 選項覆蓋的提交也可以恢復(fù)藤韵。 然而虐沥,任何你未提交的東西丟失后很可能再也找不到了。