系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux系統(tǒng)撤銷操作

Linux系統(tǒng)如何在Git里撤銷操作

時(shí)間:2015-07-01 14:48:53 作者:zhijie 來源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20150701/51938.html 手機(jī)查看 評論

  可以說,所有的操作系統(tǒng)都有撤銷的操作,Linux系統(tǒng)當(dāng)然也不例外。而且在Linux的 Git中就可以撤銷掉絕大部分的錯(cuò)誤操作,一起來看一下吧。

  當(dāng)你進(jìn)行一次新的提交的時(shí)候,Git 會(huì)保存你代碼庫在那個(gè)特定時(shí)間點(diǎn)的快照;之后,你可以利用 Git 返回到你的項(xiàng)目的一個(gè)早期版本。

  在本篇博文里,我會(huì)講解某些你需要“撤銷”已做出的修改的常見場景,以及利用 Git 進(jìn)行這些操作的最佳方法。

Linux系統(tǒng)如何在Git里撤銷操作

  撤銷一個(gè)“已公開”的改變

  場景: 你已經(jīng)執(zhí)行了 git push, 把你的修改發(fā)送到了 GitHub,現(xiàn)在你意識到這些 commit 的其中一個(gè)是有問題的,你需要撤銷那一個(gè) commit.

  方法: git revert 《SHA》

  原理: git revert 會(huì)產(chǎn)生一個(gè)新的 commit,它和指定 SHA 對應(yīng)的 commit 是相反的(或者說是反轉(zhuǎn)的)。如果原先的 commit 是“物質(zhì)”,新的 commit 就是“反物質(zhì)” — 任何從原先的 commit 里刪除的內(nèi)容會(huì)在新的 commit 里被加回去,任何在原先的 commit 里加入的內(nèi)容會(huì)在新的 commit 里被刪除。

  這是 Git 最安全、最基本的撤銷場景,因?yàn)樗⒉粫?huì)改變歷史 — 所以你現(xiàn)在可以 git push 新的“反轉(zhuǎn)” commit 來抵消你錯(cuò)誤提交的 commit。

  修正最后一個(gè) commit 消息

  場景: 你在最后一條 commit 消息里有個(gè)筆誤,已經(jīng)執(zhí)行了 git commit -m “Fxies bug #42”,但在 git push 之前你意識到消息應(yīng)該是 “Fixes bug #42″。

  方法: git commit --amend 或 git commit --amend -m “Fixes bug #42”

  原理: git commit --amend 會(huì)用一個(gè)新的 commit 更新并替換最近的 commit ,這個(gè)新的 commit 會(huì)把任何修改內(nèi)容和上一個(gè) commit 的內(nèi)容結(jié)合起來。如果當(dāng)前沒有提出任何修改,這個(gè)操作就只會(huì)把上次的 commit 消息重寫一遍。

  撤銷“本地的”修改

  場景: 一只貓從鍵盤上走過,無意中保存了修改,然后破壞了編輯器。不過,你還沒有 commit 這些修改。你想要恢復(fù)被修改文件里的所有內(nèi)容 — 就像上次 commit 的時(shí)候一模一樣。

  方法: git checkout -- 《bad filename》

  原理: git checkout 會(huì)把工作目錄里的文件修改到 Git 之前記錄的某個(gè)狀態(tài)。你可以提供一個(gè)你想返回的分支名或特定 SHA ,或者在缺省情況下,Git 會(huì)認(rèn)為你希望 checkout 的是 HEAD,當(dāng)前 checkout 分支的最后一次 commit。

  記。耗阌眠@種方法“撤銷”的任何修改真的會(huì)完全消失。因?yàn)樗鼈儚膩頉]有被提交過,所以之后 Git 也無法幫助我們恢復(fù)它們。你要確保自己了解你在這個(gè)操作里扔掉的東西是什么。ㄒ苍S可以先利用 git diff 確認(rèn)一下)

  重置“本地的”修改

  場景: 你在本地提交了一些東西(還沒有 push),但是所有這些東西都很糟糕,你希望撤銷前面的三次提交 — 就像它們從來沒有發(fā)生過一樣。

  方法: git reset 《last good SHA》 或 git reset --hard 《last good SHA》

  原理: git reset 會(huì)把你的代碼庫歷史返回到指定的 SHA 狀態(tài)。 這樣就像是這些提交從來沒有發(fā)生過。缺省情況下, git reset 會(huì)保留工作目錄。這樣,提交是沒有了,但是修改內(nèi)容還在磁盤上。這是一種安全的選擇,但通常我們會(huì)希望一步就“撤銷”提交以及修改內(nèi)容 — 這就是 --hard 選項(xiàng)的功能。

  在撤銷“本地修改”之后再恢復(fù)

  場景: 你提交了幾個(gè) commit,然后用 git reset --hard 撤銷了這些修改(見上一段),接著你又意識到:你希望還原這些修改!

  方法: git reflog 和 git reset 或 git checkout

  原理: git reflog 對于恢復(fù)項(xiàng)目歷史是一個(gè)超棒的資源。你可以恢復(fù)幾乎 任何東西 — 任何你 commit 過的東西 — 只要通過 reflog。

  你可能已經(jīng)熟悉了 git log 命令,它會(huì)顯示 commit 的列表。 git reflog 也是類似的,不過它顯示的是一個(gè) HEAD 發(fā)生改變的時(shí)間列表。

標(biāo)簽 撤銷操作

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨(dú)特見解

立即評論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄