前面我們介紹過主流版本控制系統git和svn的區別,參考:手把手教你入門git,下面我們再介紹下git中關於各種撤銷的操作流程。
當你在git倉庫中進行一次新的提交的時,git儲存這個特定時間的倉庫的快照,並生產乙個唯一串與本次提交相對應。之後,就可以利用 git返回到專案的乙個早期版本。下面我們說一些常見的撤銷常見場景,以及 git的命令操作步驟。
撤銷乙個「已公開」的改變
場景: 你在本地倉庫已經執行了 git push命令, 把修改記錄傳送到了遠端伺服器(github或者gitee),現在發現了其中乙個commit有問題,需要撤銷。
命令:git revert
原理:git revert 會產生乙個新的 commit,它和指定需要撤銷的 commit的sha 是相反的。任何從原先的 commit 裡刪除的內容會在新的 commit 裡被加回去,任何在原先的 commit 裡加入的內容會在新的 commit 裡被刪除。這個操作不會修改專案歷史中的操作,所以目前這是git 最安全、最基本的撤銷場景。
執行截圖:
github執行完成狀態:
修改沒有push的commit資訊
場景: 當你在本地倉庫中執行 git commit的時候,發現 commit的資訊寫錯了。例如:你在本地執行了 git commit -m "comment5",但是乙個單詞拼寫錯誤了,其實應該是 「commit5″。
命令:git commit --amend
原理:git commit --amend會使用你新寫的 commit資訊去替換最近的一次 commit資訊 。
執行截圖:
檔案修改撤銷
場景: 有的時候,可能修改完乙個檔案結果不是我們想要的,我們想要刪除針對該檔案所有的修改,還原到最開始的樣子。這個操作的前提是還沒有 commit這個檔案。
命令:git checkout -- filename
原理:git checkout 會把工作目錄裡的檔案修改到 git 之前記錄的某個狀態。你可以提供乙個你想返回的分支名或特定 sha ,或者在預設情況下,git 會認為你希望 checkout 的是 head,當前 checkout 分支的最後一次 commit。
記住:你用這種方法「撤銷」的任何修改真的會完全消失。因為它們從來沒有被提交過,所以之後 git 也無法幫助我們恢復它們。你要確保自己了解你在這個操作裡扔掉的東西是什麼!(也許可以先利用 git diff 確認一下)
執行截圖:
重置本地**庫
場景: 當我們在本地倉庫大改一通的時候,如果我們現在想要恢復到當時拉取**的狀態,使用這個命令是乙個非常便捷的方法。這個時候刪除我們想要恢復的目錄,然後將整個目錄的所有檔案找回來即可。
命令:git reset --hard
原理:reset會重置本地倉庫中的跟蹤檔案,雖然這個命令好用,但是 非常危險 ,是 git 中少有的幾個會丟失資訊的操作。它會把回退點之前的所有資訊都刪掉,乙個不留,乾乾淨淨。
執行截圖:
git 還原版本
reset命令有3種方式 git reset mixed 此為預設方式,不帶任何引數的git reset,即時這種方式,它回退到某個版本,只保留原始碼,回退commit和index資訊 git reset soft 回退到某個版本,只回退了commit的資訊,不會恢復到index file一級。如果...
git 幾種還原版本 如何在Git中撤消提交
大多數人都不知道軟體開發人員的生命會是多麼危險 您可以刪除錯誤的檔案,將 編碼到完全錯誤的方向,或者一次提交就弄亂整個專案。因此,我發現在出現問題時,多次擁有強大的安全網非常寶貴。使用git作為版本控制系統,您將擁有這樣的安全網 確實是乙個非常強大的網路。在本文中,我將向您簡要介紹git如何幫助您消...
git 幾種還原版本 半小時學會使用Git(一)
關於git和github,相信凡是工作或者學習跟程式設計擦了點邊的人,都早已經耳熟能詳。即便不用,但肯定會聽人提起,而且一旦被人提起,那多半就是會被交口稱讚的。不巧的是,我就是乙個對程式設計有點興趣,喜歡自己鼓搗程式設計,另外也曾多次聽人說到過svn git的大名。按照我的慣例,今天這篇文章的背景可...