在window下已經安裝了git的環境
1.建立本地倉庫
mkdir test #建立test目錄
cd test #進入目錄
git init #創建好了本地git倉庫,會發現在test目錄中多了一個.git目錄,並且這個目錄是隱藏的
示例:
$ git init Initialized empty Git repository in F:/git-repo/test/.git/
init前
init后
2.提交文件到中轉站和倉庫(add和commit)
使用Notepad++創建一個文本文件readme.txt
(記得把Notepad++的默認編碼設置為UTF-8 without BOM)不能使用記事本等其他工具創建
readme.txt文件位於test目錄中
readme.txt文件內容為:
Git is a version control system. Git is free software.
[提交到中轉站]在路徑為test目錄中執行命令
$ git add readme.txt #告訴git 將readme.txt文件添加到倉庫等等提交(也可以認為添加到了倉庫中轉站)沒有任何輸出表示正確添加到中轉站
[提交到倉庫]在路徑為test目錄中執行命令
$ git commit -m "wrote a readme file" #告訴git 將剛才放置在中轉站的提交到倉庫 並給這個提交動作附上一個標簽
[master (root-commit) 51af5b3] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
注意:注意:注意:
為什么提交要用add和commit 因為可以add多個文件到中轉站,一次commit就可以將中轉站中的文件提交到倉庫。
比如:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
------------------------------------------------------add時遇到的warning-----------------------------------------
$ git add file1.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory.
------------------------------------------------------需要了解的概念-----------------------------------------
LF是linux下的換行符,而CRLF是enter + 換行
當創建文檔的時候使用的環境是windows,而git運行環境在linux環境
-------------------------------------------------------解決這個warning--------------------------------------
git config --global core.autocrlf false
----------------------------------------------------------end--------------------------------------------------
3.git status和git diff
一般步驟為,檢查init的git倉庫的文件是否有修改 git status
如果有修改就查看修改的地方是不是正確的 git diff
如果修改正確的就提交的中轉站 git add <file>
不清楚是否正確提交到中轉站 git status
如果正確就再提交到倉庫確保代碼正常 git commit <file> -m "string"
$ git status #查看init倉庫所有文件的狀態,即查看當前文件test目錄中的所有文件的狀態(未修改/修改/更新)包括中轉站中的文件狀態
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt # 紅色表示此文件被修改
no changes added to commit (use "git add" and/or "git commit -a")
$ git diff readme.txt #查看被修改的文件,修改了哪些東西 diff --git a/readme.txt b/readme.txt #比較修改前和修改后的文件 index d8036c1..53d4271 100644 --- a/readme.txt +++ b/readme.txt #在readme.txt中做了增加操作 @@ -1,2 +1,2 @@ -Git is a version control system. -Git is free software. \ No newline at end of file +Git is a distributed version control system. +Git is free software.
$ git add readme.txt #檢查修改無誤后提交到中轉站
$ git status #確認各個文件的狀態和中轉站里的文件 On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: readme.txt
$ git commit readme.txt -m "add distributed " #將中轉站里的文件提交到.git倉庫 [master 9682929] add distributed 1 file changed, 2 insertions(+), 2 deletions(-)
最后,相當於所有的修改都已經提交到了git倉庫里面
$ git status #查看整個Test目錄的結果
On branch master
nothing to commit, working directory clean #已經clean了
4.git的快照commit
從之前的改動到現在已經提交了三個版本的readme.txt到.git倉庫
版本1:wrote a readme file Git is a version control system. Git is free software. 版本2:add distributed Git is a distributed version control system. Git is free software. 版本3:append GPL Git is a distributed version control system. Git is free software distributed under the GPL.
查看git的快照commit,需要使用git log:
類似每次快照都要產生log文件,需要用git log來查看快照,git log是按照最新到最舊來顯示。
如下:
################################
【需要了解的概念】:Git必須知道當前版本是哪個版本,在Git中,用HEAD
表示當前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一樣),
上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,當然往上100個版本寫100個^
比較容易數不過來,所以寫成HEAD~100
。
################################
$ git log commit f78cd0925b2bc2883d7ed4de49b1a851367ae56d #這一串數字代表快照的id號,由SHA1產生 Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 20:23:52 2016 +0800 #最新的commit快照 也叫做HEAD快照 append GPL commit 96829291d720b3b84d0ab2a5aad89b0af97a1394 Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 16:20:13 2016 +0800 add distributed #這是HEAD快照的前一個快照 用HEAD^表示 commit 51af5b36b85c52e86b6140d3a73b5e22cd3f78da Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 15:36:57 2016 +0800 #最舊的commit快照 wrote a readme file #這是HEAD快照的前前一個快照 用HEAD^^表示,問題來了?如果前前一百個,怎么表示? HEAD~100
或者顯示為一行,添加--pretty=oneline
$ git log --pretty=oneline f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
5.git中實現版本回退使用git reset
先看下面兩幅圖兩分鍾:
--------------------------------------------------------------------------------------------
圖一 表示當前在append GPL這個版本上
-----------------------------------------------------------------------------------------------------
圖二 表示當前在wrote a readme file這個版本上。
[看圖說明]
git reset 可以控制指針 HEAD 在不同的快照直接切換,如果需要切換到上一個快照用git reset --hard HEAD^
git reset 和 git commit <file> -m "string" 的動作會被記錄到git reflog中,使用git reflog可以查看記錄
git log 查看所有提交到版本庫中的快照(版本)
---------------------------------------------------------------------------------------------------
[實踐出真知]
看圖一,理解回退。
回退到中間那個版本add disributed
$ git log --pretty=oneline #列出.git倉庫中的所有版本號 f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file $ git reset --hard HEAD^ #回退到前一個版本add distributed Unstaged changes after reset: M readme.txt $ git log --pretty=oneline #查看是否回退到add distributed,不能查看之前的版本。 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
有沒有發現什么?對,回退到add distributed后,不能查看之前的版本。要是又要回退到最開始那個版本怎么辦呢?
看圖二,理解回退到倉庫中最新的那個版本:因為 git reflog 能記錄 git reset和git commit <file> -m "string"的動作,所以可以
使用git reflog來查看每個動作的id號,然后通過id號回退到最新的那個版本append GPL
[實踐出真知]
$ git reflog #羅列出所有的HEAD動作 9682929 HEAD@{0}: reset: moving to HEAD^ f78cd09 HEAD@{1}: commit: append GPL #append GPL 的id是 f78cd09 9682929 HEAD@{2}: commit: add distributed 51af5b3 HEAD@{3}: commit (initial): wrote a readme file
$ git reset --hard f78cd09 #移動HEAD指針到 f78cd09 即 append GPL $ git log --pretty=oneline #查看是否切換到append GPL 這個版本 f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
接下一篇:git的使用(二)
參考git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000