"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世紀,想再回去已經回不去了,腫麼辦?
辦法其實仍是有的,只要上面的命令行窗口尚未被關掉,你就能夠順着往上找啊找啊,找到那個a
的commit 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
查看命令歷史,以便肯定要回到將來的哪一個版本。
就是你在電腦裏能看到的目錄,好比個人learngit
文件夾就是一個工做區:
工做區有一個隱藏目錄.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的不少操做到底幹了什麼。