git學習之時光穿梭機

"x"修改readme.txt文件,改爲以下內容:python

Git is a distributed version control system. Git is free software.

 如今,運行git status命令看看結果:git

git status命令可讓咱們時刻掌握倉庫當前的狀態,上面的命令告訴咱們,readme.txt被修改過了,但尚未準備提交的修改。sql

查看修改的是什麼內容git diffruby

圈起來的兩個部分 上面的是修改前的內容 下面是修改後的內容spa

git diff顧名思義就是查看difference命令行

 

而後咱們就能夠將文件添加到倉庫 git add3d

$ git add readme.txt版本控制

 

不會有提示的指針

而後就進行git commit -m "備註"日誌

這樣再次查看狀態 git status 就沒有修改的內容了

版本回退

如今咱們再修改幾回readme.txt文件,記得多修改幾回哦,後面會用到的(沒修改一次就add一次)

 版本控制系統確定有某個命令能夠告訴咱們歷史記錄,在Git中,咱們用git log命令查看:

git log命令顯示從最近到最遠的提交日誌,咱們能夠看到4次提交,最近的一次是a,上一次是one,add 3 file ,最先的一次是wrote a readme file

若是嫌輸出信息太多,看得眼花繚亂的,能夠試試加上--pretty=oneline參數:

 

 

 如今,咱們要把當前版本「one」回退到上一個版本「add 3 file」,就可使用git reset命令:

git reset --hard HEAD^

上面圈起來的三個框,第一個框是版本回退一次的內容,由於忘記截圖最後一次的內容了, 第二個框最後那裏 one 表示回退了,

而後 git cat readme.txt  這裏是查看readme.txt中的內容 看看是否回退了

如今咱們來看一下版本庫的狀態

git log

 

 上面第一次git log的時候是4次提交  如今變成了3次了

最新的那個版本a已經看不到了!比如你從21世紀坐時光穿梭機來到了19世紀,想再回去已經回不去了,腫麼辦?

 辦法其實仍是有的,只要上面的命令行窗口尚未被關掉,你就能夠順着往上找啊找啊,找到那個acommit id,因而就能夠指定回到將來的某個版本:

因爲我不當心關掉了 因此如今我不能撤銷了

$ git reset --hard commit的id

Git的版本回退速度很是快,由於Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向a
這樣就能回到最新版本
HEADa

 

改成指向one

而後順便把工做區的文件更新了。因此你讓HEAD指向哪一個版本號,你就把當前版本定位在哪。

 

如今,你回退到了某個版本,關掉了電腦,次日早上就後悔了,想恢復到新版本怎麼辦?找不到新版本的commit id怎麼辦?

在Git中,老是有後悔藥能夠吃的。當你用$ git reset --hard HEAD^回退到one版本時,再想恢復到a,就必須找到a的commit id。Git提供了一個命令git reflog用來記錄你的每一次命令:

 

c的commit id是b144d39,如今,你又能夠乘坐時光機回到將來了。  HEAD^

 

這樣咱們就回到了最初的版本了

小結:

  • HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。

  • 要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。

 


 

 

工做區和暫存區

工做區(Working Directory):

就是你在電腦裏能看到的目錄,好比個人learngit文件夾就是一個工做區:

 

 

版本庫(Repository)

工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。

Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD

分支和HEAD的概念咱們之後再講。

前面講了咱們把文件往Git版本庫裏添加的時候,是分兩步執行的:

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。

由於咱們建立Git版本庫時,Git自動爲咱們建立了惟一一個master分支,因此,如今,git commit就是往master分支上提交更改。

你能夠簡單理解爲,須要提交的文件修改統統放到暫存區,而後,一次性提交暫存區的全部修改。

俗話說,實踐出真知。如今,咱們再練習一遍,先對readme.txt作個修改,好比加上一行內容:

 

Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage.

 

 

 

這裏說明了readme.txt文件被修改了 可是沒有被添加到分支中去

如今咱們git add個git commit -m "x" 後再看git status下的樣子

沒有被修改的文件了

如今,暫存區的狀態就變成這樣了:

修改了文件  git add後沒有commit 就是以下這種狀態

因此,git add命令實際上就是把要提交的全部修改放到暫存區(Stage),而後,執行git commit就能夠一次性把暫存區的全部修改提交到分支。

 如今呢 我屢次git add後 進行一次commit  就將暫存區的內容提交到分支中去了

 

小結

暫存區是Git很是重要的概念,弄明白了暫存區,就弄明白了Git的不少操做到底幹了什麼。

相關文章
相關標籤/搜索