1. 程式人生 > >git學習記錄二

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 用於刪除一個檔案。 如果一個檔案已經被提交到版本庫, 那麼你永遠不用擔心誤刪,但是要小心,你只能恢復檔案到最新版本,你會丟失最近一次提交後你修改動內容。