Learn Git (五):git 撤銷(xiāo)變更

git 撤銷(xiāo)操作的四種情況:撤銷(xiāo)文件的修改、 撤銷(xiāo)add 、撤銷(xiāo)commit 粟耻、撤銷(xiāo)push

一垢乙、撤銷(xiāo)對(duì)文件的修改

這種命令不常用锨咙,一般直接用鼠標(biāo)在idea里面右鍵操作更便捷。

場(chǎng)景:修改了Person.java中的代碼追逮,(尚未提交)結(jié)果發(fā)現(xiàn)改錯(cuò)了酪刀,需要回到最初的版本粹舵,其實(shí)就是Idea里面的右鍵-->Git-->Rollback 操作,如果用命令行的方式就是:

git checkout -- Person.java

記不住這個(gè)命令沒(méi)關(guān)系蓖宦,可以先用git status命令看下文件狀態(tài)齐婴,狀態(tài)說(shuō)明里面就有命令提示:

J:\Idea Projects\helloworld>git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/main/java/com/zxj/helloworld/Person.java

no changes added to commit (use "git add" and/or "git commit -a")

(use "git checkout -- <file>..." to discard changes in working directory) ---- discard:丟棄; 拋棄;

二、撤銷(xiāo)add

場(chǎng)景:比如 git add .添加文件添加多了稠茂,把不需要git管理的文件如.idea文件也add上去了柠偶。

J:\Idea Projects\helloworld>git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   src/main/java/com/zxj/helloworld/Person.java

git status命令查看狀態(tài),在 “Changes to be committed” 下面的文件是已暫存狀態(tài)睬关,也就是說(shuō)這些文件被add過(guò)诱担,但是還沒(méi)有commit。

狀態(tài)說(shuō)明中也有提示: use "git reset HEAD <file>..." to unstage电爹。(使用 git reset HEAD <file>... 來(lái)取消暫存)
所以蔫仙,對(duì)Person.java文件撤銷(xiāo)add的命令就是:

git reset HEAD Person.java

三、撤銷(xiāo)commit

場(chǎng)景1丐箩、執(zhí)行commit后摇邦,還沒(méi)執(zhí)行push時(shí),想要撤銷(xiāo)這次的commit屎勘。

執(zhí)行commit后的status如下:

J:\Idea Projects\helloworld>git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

(1)撤銷(xiāo)commit的命令方法一:

git reset --soft HEAD~1

這樣就成功撤銷(xiāo)了commit施籍,如果想要連著add也撤銷(xiāo)的話(huà),--soft改為--hard(刪除工作空間的改動(dòng)代碼)概漱。
--soft:不刪除工作空間的改動(dòng)代碼 丑慎,撤銷(xiāo)commit,不撤銷(xiāo)git add
--hard:刪除工作空間的改動(dòng)代碼瓤摧,撤銷(xiāo)commit且撤銷(xiāo)add

HEAD~1 表示上一個(gè)版本竿裂,即上一次的commit,也可以寫(xiě)成HEAD^照弥。
如果進(jìn)行兩次的commit腻异,都想要撤回,可以使用HEAD~2这揣,以此類(lèi)推捂掰。

(2)撤銷(xiāo)commit的命令方法二:也可以先使用git log 查看 commit日志,找到需要回退的那次commit_id曾沈,再使用git reset --hard commit_id命令進(jìn)行回退这嚣。

場(chǎng)景2、有時(shí)候我們提交完了才發(fā)現(xiàn)漏掉了幾個(gè)文件沒(méi)有添加塞俱,或者提交信息寫(xiě)錯(cuò)了姐帚。 此時(shí),可以運(yùn)行帶有 --amend 選項(xiàng)的提交命令來(lái)重新提交:
git commit --amend

這個(gè)命令會(huì)將 已a(bǔ)dd未commit 的暫存區(qū)中的文件提交障涯。執(zhí)行這個(gè)命令后會(huì)進(jìn)入vim文本編輯器模式罐旗,修改文本內(nèi)容后保存膳汪,就可以繼續(xù)push了。

四九秀、撤銷(xiāo)push

撤銷(xiāo)push有兩種場(chǎng)景:

  • 場(chǎng)景1遗嗽、想恢復(fù)到之前某個(gè)提交的版本,且那個(gè)版本之后提交的版本我們都不要了鼓蜒。--- 用 git reset 命令痹换。
  • 場(chǎng)景2、想撤銷(xiāo)之前的某一版本都弹,但是又想保留該目標(biāo)版本后面的版本娇豫。--- 用 git revert 命令。

場(chǎng)景1 git reset 具體操作步驟:
(1)用git log命令查看日志畅厢,獲取需要回退的版本號(hào)冯痢。(git log 的退出方法是輸入字母q即可退出)


git log

(2)執(zhí)行 git reset --hard <版本號(hào)> ,如 git reset --hard 1b0cb5e5f4374b6d480c16d3c674838f3674e464 框杜,重置至指定版本的提交

git reset --soft 與 git reset --hard 浦楣,區(qū)別是: 前者--soft表示只是改變了HEAD的指向,本地代碼不會(huì)變化咪辱,我們使用git status依然可以看到椒振,同時(shí)也可以git commit提交。后者--hard直接回改變本地源碼梧乘,不僅僅指向變化了,代碼也回到了那個(gè)版本時(shí)的代碼庐杨。
再用git log查看日志选调,此時(shí)本地的HEAD已經(jīng)指向之前的版本:

image.png

(3)執(zhí)行 git push origin 分支名 --force 或者 git push -f ,強(qiáng)制提交當(dāng)前版本號(hào)
此時(shí)如果用“git push”會(huì)報(bào)錯(cuò)灵份,因?yàn)槲覀儽镜貛?kù)HEAD指向的版本比遠(yuǎn)程庫(kù)的要舊仁堪,所以需要用 --force 強(qiáng)制推上去。至此填渠,撤銷(xiāo)push提交完成弦聂。

場(chǎng)景2 git revert 具體操作步驟:
原理: git revert是用于“反做”某一個(gè)版本,以達(dá)到撤銷(xiāo)該版本的修改的目的氛什。比如莺葫,我們commit了三個(gè)版本(版本一、版本二枪眉、 版本三)捺檬,突然發(fā)現(xiàn)版本二不行(如:有bug),想要撤銷(xiāo)版本二贸铜,但又不想影響撤銷(xiāo)版本三的提交堡纬,就可以用 git revert 命令來(lái)反做版本二聂受,生成新的版本四,這個(gè)版本四里會(huì)保留版本三的東西烤镐,但撤銷(xiāo)了版本二的東西蛋济。如下圖所示:

image.png

具體操作:
舉個(gè)例子,現(xiàn)在庫(kù)里面有三個(gè)文件:READ.md炮叶、text.txt碗旅、text2.txt。
image.png

  1. 查看版本號(hào):
    可以通過(guò)命令行查看(輸入git log):
    如圖悴灵,最近的兩個(gè)版本分別叫:“add text.txt”(即新增了文件text.txt)扛芽、“add text2.txt”(新增了文件text2.txt)。這個(gè)時(shí)候我們不需要text.txt這個(gè)文件了积瞒,那就是說(shuō)不想要“add text.txt”那個(gè)版本的操作川尖,那可以通過(guò)反做“add text.txt”這個(gè)版本來(lái)實(shí)現(xiàn)。


    image.png

    2.使用“git revert -n 版本號(hào)”反做茫孔,并使用“git commit -m 版本名”提交:
    (1)反做叮喳,使用“git revert -n 版本號(hào)”命令。如下命令缰贝,我們反做版本號(hào)為8b89621的版本:

git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861

注意: 這里可能會(huì)出現(xiàn)沖突馍悟,那么需要手動(dòng)修改沖突的文件。而且要git add 文件名剩晴。
(2)提交锣咒,使用“git commit -m 版本名”,如:

git commit -m "revert add text.txt" 

此時(shí)可以用“git log”查看本地的版本信息赞弥,可見(jiàn)多生成了一個(gè)新的版本毅整,該版本反做了“add text.txt”版本,但是保留了“add text2.txt”版本:


image.png

3.使用“git push”推上遠(yuǎn)程庫(kù):

git push

此時(shí)查看倉(cāng)庫(kù)的文件绽左,剩下兩個(gè):READ.md悼嫉、text2.txt,反做成功拼窥!


image.png

參考:https://blog.csdn.net/u010356768/article/details/86718534
參考:http://www.reibang.com/p/a9f327da3562
參考:https://blog.csdn.net/yxlshk/article/details/79944535
參考:https://www.cnblogs.com/chaoxiZ/p/9714085.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戏蔑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲁纠,更是在濱河造成了極大的恐慌总棵,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件改含,死亡現(xiàn)場(chǎng)離奇詭異彻舰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)刃唤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)隔心,“玉大人,你說(shuō)我怎么就攤上這事尚胞∮不簦” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵笼裳,是天一觀的道長(zhǎng)唯卖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)躬柬,這世上最難降的妖魔是什么拜轨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮允青,結(jié)果婚禮上橄碾,老公的妹妹穿的比我還像新娘。我一直安慰自己颠锉,他們只是感情好法牲,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著琼掠,像睡著了一般拒垃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓷蛙,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天悼瓮,我揣著相機(jī)與錄音,去河邊找鬼艰猬。 笑死横堡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姥宝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恐疲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腊满!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起培己,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碳蛋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后省咨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肃弟,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笤受。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穷缤。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖箩兽,靈堂內(nèi)的尸體忽然破棺而出津肛,到底是詐尸還是另有隱情,我是刑警寧澤汗贫,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布身坐,位于F島的核電站,受9級(jí)特大地震影響落包,放射性物質(zhì)發(fā)生泄漏部蛇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一咐蝇、第九天 我趴在偏房一處隱蔽的房頂上張望涯鲁。 院中可真熱鬧,春花似錦嘹害、人聲如沸撮竿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幢踏。三九已至,卻和暖如春许师,著一層夾襖步出監(jiān)牢的瞬間房蝉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工微渠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搭幻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓逞盆,卻偏偏與公主長(zhǎng)得像檀蹋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子云芦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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