在 Git 中 Checkout 歷史版本


 昨天寫代碼的時候,誤刪了一個文件。今天發現的時候,commit 已經 push 到版本庫了。本想用 git reset 回退版本,找回文件后重新提交。但是想起 Git 是一個版本控制系統哎,直接從版本庫里 checkout 出某個文件的歷史版本不就好了?

想法挺好,但是很久沒用這個功能,自己已經不記得具體的命令了。於是查了下手冊,把和 checkout 歷史版本有關的幾個命令都記錄一下。

從某個歷史版本創建新的分支

在 Git 中從當前分支創建並檢出新分支的命令是

git checkout -b name-of-new-branch

這個命令實際上是

git checkout -b name-of-new-branch current-branch

的簡寫形式。也就是說,當我們不指定 checkout 起點時,Git 默認從當前活動分支開始創建新的分支。

Git 的每個提交都有一個 SHA1 散列值(Hash 值)作為 ID。我們可以在 checkout 命令中使用這些 ID 作為起點。比如:

git checkout -b name-of-new-branch 169d2dc

這樣,Git 的活動分支會切換到 name-of-new-branch 這個分支上,而它的內容與 169d2dc 這個分支一致。

注意:SHA1 的散列值有 40 個字母,相當長。所以 Git 允許我們在不引起歧義的情況下,使用散列值的前幾位作為縮寫。

提示:你也可以用 git branch name-of-new-branch 169d2dc 來創建一個歷史分支,而不切換到該分支。

將某個歷史版本 checkout 到工作區

首先說明,這樣做會產生一個分離的 HEAD 指針,所以個人不推薦這么做。

如果我們工作在 master 分支上,希望 checkout 到 dev 分支上,我們會這么做:

git checkout dev

這里 dev 實際上是一個指針的別名,其本質也是一個 SHA1 散列值。所以,我們很自然地可以用

git checkout <sha1-of-a-commit>

將某個歷史版本 checkout 到工作區。

將某個文件的歷史版本 checkout 到工作區

大多數時候,我們可能只需要對某一個文件做細小的修補,因此只 checkout 該文件就行了,並不需要操作整個 commit 或分支。

上一節我們介紹了如何將某個歷史版本完整地 checkout 到工作區。實際上,我們只需要在上一節的命令之后加上需要 checkout 的文件即可。

git checkout <sha1-of-a-commit> </path/to/your/file>

當然,有時候你需要將某個文件的歷史版本 checkout 出來,並以一個新的名字保存。這時候可以這么做:

git checkout <sha1-of-a-commit>:</path/to/your/file> </new/name/of/the/file>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM