git學習記錄二
一.版本回退
[email protected]:~/learngit$ git log commit 8e749cbd2e6be927c4aa6ffcd8e56df142457654 Author: duankun <[email protected]> Date: Wed Sep 26 00:41:24 2018 -0700 second develop commit 7ff8d82010e32d0d4790550fa61486795c7e3dcc Author: duankun <[email protected]> Date: Wed Sep 26 00:26:02 2018 -0700 wrote a readme file
現在有已經有兩個版本被提交到Git倉庫裡了。
[email protected]:~/learngit$ git log --pretty=oneline
bc2f19ab6dcbd2b1dbede906c9a79bc885666a0b third develop wrote
8e749cbd2e6be927c4aa6ffcd8e56df142457654 second develop
7ff8d82010e32d0d4790550fa61486795c7e3dcc wrote a readme file
[email protected]:~/learngit$
這裡的一大串字串就是commit id ,因為 Git是分散式的版本控制系統。
現在Git需要知道當前版本是哪個版本,在Git中, 用HEAD表示當前版本,上一版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易說不過來,所以寫成HEAD~100。
[email protected]:~/learngit$ git reset --hard HEAD^
HEAD is now at 8e749cb second develop
[email protected]:~/learngit$ git reset --hard HEAD
HEAD is now at 8e749cb second develop
[email protected] :~/learngit$ git log
commit 8e749cbd2e6be927c4aa6ffcd8e56df142457654
Author: duankun <[email protected]>
Date: Wed Sep 26 00:41:24 2018 -0700
second develop
commit 7ff8d82010e32d0d4790550fa61486795c7e3dcc
Author: duankun <[email protected]>
Date: Wed Sep 26 00:26:02 2018 -0700
wrote a readme file
如果要回到以前的版本,git 提供了一個命令git reflog用來記錄你的每一次命令,可以看到每一個版本的commit id, 然後通過命令
$ git reset --hard commit_id
回到制定的版本。
總結:
1.1 HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令 git reset --hard commit_id。
1.2 穿梭前,使用git log 可以檢視提交的歷史,以便確定要回退到哪個版本。
1.3 要重返回來,用git reflog 檢視命令歷史,以便確定要回到未來的哪個版本。
二. 工作區(work directory)和暫存區(repository),
工作區就是你在電腦裡能看到的目錄,比如我建立的learngit資料夾就是一個工作區。
版本庫就是工作區有一個隱藏目錄.git ,這個不算是工作區,而是Git的版本庫。
把檔案往Git版本庫裡新增的時候,是分兩步執行的:
第一步是用git add 把檔案新增進去,實際上就是把檔案修改新增到暫存區;
第二步是用 git commit 提交更改,實際上就是把暫存區的所有內容提交但當前分支;
在建立git版本庫的時候,git 自動為我們建立了唯一一個master 分支,所以現在git 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 add->第二次修改->git add-> git commit
二.撤銷修改
場景1:當你改亂了工作區的某個檔案的內容,想直接工作區的修改時,用命令 git checkout -- file
場景2:當你不但改亂了工作區的某個檔案的內容,還新增到了暫存區時,想丟棄修改,第一步用命令git reset HEAD file, 返回了場景1,第二步按場景1操作
場景3: 已經提交了不合適的修改到版本庫時, 想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。
三. 刪除檔案
命令 git rm file 用於刪除一個檔案。 如果一個檔案已經被提交到版本庫, 那麼你永遠不用擔心誤刪,但是要小心,你只能恢復檔案到最新版本,你會丟失最近一次提交後你修改動內容。