版本回退
現在,我們最次修改readme的檔案,並再次提交檔案:
有些時候,在打boss之前,你會手動存檔,以便萬一打boss失敗了,可以從最近的地方重新開始。git也是一樣,每當你覺得檔案修改到一定程度的時候,就可以「儲存乙個快照」,這個快照在git中被稱為commit。一旦你把檔案改亂了,或者誤刪了檔案,還可以從最近的乙個commit恢復,然後繼續工作,而不是把幾個月的工作成果全部丟失。$ git add readme.txt
1 file changed, 1 insertion(+), 1 deletion(-)
需要友情提示的是,你看到的一大串類似3628164…882e1e0的是commit id(版本號)。$ git log
--pretty=oneline
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
在git中,用head表示當前版本,也就是最新的提交3628164…882e1e0,上乙個版本就是head^,上上乙個版本就是head^^,往上的地一百個版本可以表示為head~100。
工作區和暫存區接下來的環節,我們要看看git版本控制系統的工作區和暫存區:
工作區(working directory):就是你在電腦裡能看到的目錄,比如我的learngit資料夾就是乙個工作區。
版本庫(repository):*工作區*有乙個隱藏目錄.git,這個不算工作區,而是git的版本庫。
git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(我們執行新增(add)指令之後,就把檔案新增修改到暫存區),還有git為我們自動建立的第乙個分支master(就是把暫存區的所有內容提交到當前分支),以及指向master的乙個指標叫head,看圖:
從工作區add檔案到暫存區需要逐個檔案新增,如果從暫存區commit到分支上則只需提交一次。
管理修改
假如說你修改了兩次檔案,把第一次修改的檔案add到暫存區,而第二次的沒有add,然後我們commit到master裡面。理解了工作區和版本庫的知識後,這個管理的修改就特別容易理解。
提交後,用git diff head – readme.txt命令可以檢視工作區和版本庫裡面最新版本的區別:
撤銷修改$ git diff head -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
git is a distributed version control system.
git is free software distributed under the gpl.
git has a mutable index called stage.
-git tracks changes. /*版本庫*/
+git tracks changes of files. /*工作區*/
我們會發現,git checkout – file可以丟棄工作區的修改,把readme.txt檔案在工作區的修改全部撤銷。$ git status
# on branch master
# changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
## modified: readme.txt
#no changes added to commit (use "git add" and/or "git commit -a")
1:如果你還沒有把檔案add到暫存區,這個撤銷指令會把檔案恢復到很版本庫裡面的一樣。
2:如果你已經把檔案add到暫存區,然後再修改檔案,這個撤銷指令會會把檔案恢復到新增到暫存區後的狀態。
用命令git reset head file可以把暫存區的修改撤銷掉(unstage),重新放回工作區:
刪除檔案我們可以直接用rm指令把工作區的檔案刪除掉:$ git reset head readme.txt
unstaged changes after reset:
m readme.txt
$ rm test.txt
git知道你刪除了檔案,工作區和版本庫不一致了,git status命令會立刻告訴你哪些檔案被刪除了:
現在你有兩個選擇,一是確實要從版本庫中刪除該檔案,那就用命令git rm刪掉,並且git commit:$ git status
# on branch master
# changes not staged for commit:
# (use "git add/rm ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
## deleted: test.txt
#no changes added to commit (use "git add" and/or "git commit -a")
另一種情況是刪錯了,因為版本庫里還有呢,所以可以很輕鬆地把誤刪的檔案恢復到最新版本:$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
$
gitcheckout--
test
.txt
git版本控制
1.git 是乙個開源的分布式版本控制系統,可以有效 高速的處理從很小到非常大的專案版本 管理。2.git配置管理 一般,有乙個 集中庫,包含4個分支 qa才能merge production 發布生產,出現生產問題,轉hotfix 研發經理 hotfix 解決緊急生產問題,測試後轉producti...
版本控制 Git
git 是目前世界上最先進的開源的分布式版本控制系統 沒有之一 用於敏捷高效地處理任何或小或大的專案。git 是 linus torvalds 為了幫助管理 linux核心開發而開發的乙個開放原始碼的版本控制軟體。git 與常用的版本控制工具 cvs,subversion 等不同,它採用了分布式版本...
GIT版本控制
不同情況下,實現版本回退 1.對於修改內容後,未add,未commit 可以利用git checkout 檔名 2.對於修改內容後,add,未commit get reset head 檔名 git checkout 檔名 3.對於修改內容後,add,commit 可以回到任何乙個版本 root g...