大多數人都不知道軟體開發人員的生命會是多麼危險:您可以刪除錯誤的檔案,將**編碼到完全錯誤的方向,或者一次提交就弄亂整個專案。因此,我發現在出現問題時,多次擁有強大的安全網非常寶貴。使用git作為版本控制系統,您將擁有這樣的安全網-確實是乙個非常強大的網路。
在本文中,我將向您簡要介紹git如何幫助您消除錯誤。
弄亂乙個提交真的很容易:在提交訊息中輸入錯誤或忘記在登台區域新增更改只是兩個示例。通常,我們在按下enter鍵後立即注意到我們的錯誤。
值得慶幸的是,git使修復最後一次提交變得非常容易。假設我們在鍵入以下命令後剛剛按下enter鍵:
$ git commit -m "massage full of typohs"
好像此訊息中的錯別字還不夠糟糕,可以說我們還忘記了將另乙個已更改的檔案新增到暫存區域。我們可以使用以下兩個命令來解決這兩個錯誤:
$ git add forgotten-changes.js
$ git commit --amend -m "a useful message"
該--amend
標誌在此示例中很重要:git將使用新訊息以及您可能已進行的任何更改來修復最後一次提交。
這裡只有一件事要記住:你只應該使用--amend
在本地提交您還沒有推到遠端儲存庫。這樣做的原因是--amend
重寫了給定的提交,將其完全替換為固定版本。在那之後,似乎原始提交從未發生過-這正是我們想要的。但是只有在我們尚未發布此提交的情況下!
乙個示例情況如下所示:
$ git status
modified: about.html
deleted: imprint.html
modified: index.html
假設您about.html
最好不要動手,最好不要刪除imprint.html
。為了消除您的錯誤,我們希望捨棄這兩個檔案中的更改-但請將(很棒!)更改保留在中index.html
。
「 git checkout」命令使我們可以做到這一點:
$ git checkout head about.html imprint.html
使用此命令,我們就可以恢復about.html
,並imprint.html
給他們的最後一次提交的狀態。
如果某個檔案中的所有更改並非都是不好的,則可以考慮只丟棄更改後的檔案中的各個行。是的,這是可能的,但是在命令列上做起來相當複雜。看一看桌面git客戶端(例如「 tower」)如何做到這一點:
如果情況真的很糟糕(例如「本來就不應該開始編碼」),那麼您也可以掏出大手槍:
$ git reset --hard head
使用該git checkout
命令,我們還原了特定檔案。git reset
另一方面,使用命令,我們可以還原整個工作副本!或者,換句話說:這會將您的完整專案重置為上次提交的狀態。
對該工具也有個簡短的警告:當您使用這些命令放棄本地更改時,您將無法撤消它!這些更改從未儲存到儲存庫中,因此git無法恢復它們。請確保您確實要丟棄它們!
很多時候,你只注意到你犯了乙個錯誤多後,它一直被提交到儲存庫之後。
然後的問題是:如何擺脫這種錯誤的承諾?答案是:通過使用git revert
命令。
$ git revert 2b504bee
使用此命令時,您可能會對結果感到驚訝-因為錯誤的提交尚未刪除!git不會刪除提交,而是自動建立了乙個新的提交,並進行了更改,以還原我們的「不良」提交的影響。
一種非常優雅且低風險的撤消方式!
另一種情況可能是當您要將整個專案還原到早期版本時。在這種情況下,您真正想要的是倒回時間-使您的完整專案與該特定時間點完全相同。
下面是乙個示例場景,在該場景中,我們將「 c2」之後的所有提交都宣告為不需要。我們想回到修訂版「 c2」的狀態,並擺脫後面的所有內容:
您已經知道git reset
我們早期冒險中的命令:
$ git reset --hard 2b504bee
我們向它提供要返回的修訂版本的sha-1雜湊。提交c3和c4然後將從專案的歷史記錄中消失。
使用「 tower」之類的git桌面客戶端時,可以從提交項的上下文選單輕鬆訪問git revert
和git reset
命令。
git 還原版本
reset命令有3種方式 git reset mixed 此為預設方式,不帶任何引數的git reset,即時這種方式,它回退到某個版本,只保留原始碼,回退commit和index資訊 git reset soft 回退到某個版本,只回退了commit的資訊,不會恢復到index file一級。如果...
git 幾種還原版本 半小時學會使用Git(一)
關於git和github,相信凡是工作或者學習跟程式設計擦了點邊的人,都早已經耳熟能詳。即便不用,但肯定會聽人提起,而且一旦被人提起,那多半就是會被交口稱讚的。不巧的是,我就是乙個對程式設計有點興趣,喜歡自己鼓搗程式設計,另外也曾多次聽人說到過svn git的大名。按照我的慣例,今天這篇文章的背景可...
git 幾種還原版本 詳細介紹下git中的多種撤銷
前面我們介紹過主流版本控制系統git和svn的區別,參考 手把手教你入門git,下面我們再介紹下git中關於各種撤銷的操作流程。當你在git倉庫中進行一次新的提交的時,git儲存這個特定時間的倉庫的快照,並生產乙個唯一串與本次提交相對應。之後,就可以利用 git返回到專案的乙個早期版本。下面我們說一...