關(guān)于Git的使用總結(jié)
先來一張大佬鎮(zhèn)樓
1.創(chuàng)建版本庫
$ mkdir learngit
$ cd learngit
$ pwd
pwd命令用于顯示當(dāng)前目錄
通過git init命令把這個目錄變成Git可以管理的倉庫:
$ git init
添加文件到Git倉庫(把小豬佩奇放進冰箱),分三步:
第一步,將添加的文件拖入本地庫目錄下,即usegit文件夾
第二步姥宝,使用命令git add <file>,注意,可反復(fù)多次使用崔列,添加多個文件;
第三步旺遮,使用git commit -m "XXX"命令赵讯,-m后面輸入的是本次提交的說明
這里我創(chuàng)建了一個readme.txt文件,內(nèi)容為
life is short i use python
2.查看工作區(qū)狀態(tài)
git status命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài)
接下來對readme.txt進行修改耿眉,修改為
life is short i need python
再來查看當(dāng)前工作區(qū)狀態(tài)
此時上面的命令告訴我們readme.txt被修改過了边翼,但還沒有提交修改
如果忘記了上次修改的內(nèi)容,
這特喵也能忘記~~~
可以使用git diff命令
這個時候就可以看見修改了什么內(nèi)容
提交修改和添加新文件操作一致:
$ git add readme.txt
$ git commit -m "change use"
此時再查看工作區(qū)狀態(tài)
顯示當(dāng)前沒有需要提交的修改鸣剪,表明修改成功
3.版本回退
再進行一次修改操作组底,將readme.txt修改為
life is short i need python
i love python
然后進行提交,檢查工作區(qū)狀態(tài)
$ git add readme.txt
$ git commit -m "add"
$ git status
顯示提交成功筐骇,這個時候回顧一下债鸡,我們已經(jīng)對readme.txt進行了兩次修改
原始版本(create版本):
life is short i use python
第一次修改(change use版本):
life is short i need python
第二次修改(add版本):
life is short i need python
i love python
這個時候要查看有幾個版本的修改就可以使用git log命令
git log命令顯示從最近到最遠的提交日志
commit后面一長串字符是版本號
如果想返回上一個版本即change use版本
就可以使用git reset命令:
$ git reset --hard HEAD^
再查看readme.txt的內(nèi)容
$ cat readme.txt
可以看到確實回退到了change use版本
再使用git log查看修改日志
發(fā)現(xiàn)最新的那個add版本不見了~
如何找回:
只要上面的命令行窗口還沒有被關(guān)掉,你就可以找到那個add版本的commit 是f3db0a27...拥褂,再執(zhí)行:
$ git reset --hard f3db0a27
版本號沒必要寫全娘锁,前幾位就可以了,Git會自動去找饺鹃。當(dāng)然也不能只寫前一兩位莫秆,因為Git可能會找到多個版本號,就無法確定是哪一個了悔详。
再去查看readme.txt的內(nèi)容
$ cat readme.txt
可以看到add版本又回來了
Git的版本回退速度非衬魇海快,因為Git在內(nèi)部有個指向當(dāng)前版本的HEAD指針茄螃,當(dāng)你回退版本的時候缝驳,Git僅僅是把HEAD從指向change use改為指向add
然后順便把工作區(qū)的文件更新了。所以你讓HEAD指向哪個版本號,你就把當(dāng)前版本定位在哪用狱。
如果你把命令行窗口關(guān)閉了运怖。。夏伊。
那么也有解決方法:
Git提供了一個命令git reflog用來記錄你的每一次命令
$ git reflog
此時又可以愉快的查看到版本號了
講到這里就需要提到工作區(qū)摇展,暫存區(qū)和分支master的概念了
先上圖:
工作區(qū)有一個隱藏目錄.git,這個不算工作區(qū)溺忧,而是Git的版本庫咏连。
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)鲁森,還有Git為我們自動創(chuàng)建的第一個分支master祟滴,以及指向master的一個指針叫HEAD。
分支和HEAD的概念以后再講歌溉。
前面講了我們把小豬佩奇放進冰箱的時候垄懂,是分三步執(zhí)行的:
第一步是將添加的文件拖入工作區(qū)目錄下
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區(qū)研底;
第二步是用git commit提交更改埠偿,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。
因為我們創(chuàng)建Git版本庫時榜晦,Git自動為我們創(chuàng)建了唯一一個master分支,所以羽圃,現(xiàn)在乾胶,git commit就是往master分支上提交更改。
你可以簡單理解為朽寞,需要提交的文件修改通通放到暫存區(qū)识窿,然后,一次性提交暫存區(qū)的所有修改脑融。
git checkout -- file可以丟棄工作區(qū)的修改:
$ git checkout -- readme.txt
命令git checkout -- readme.txt意思就是喻频,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區(qū)肘迎,現(xiàn)在甥温,撤銷修改就回到和版本庫一模一樣的狀態(tài);
一種是readme.txt已經(jīng)添加到暫存區(qū)后妓布,又作了修改姻蚓,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)匣沼。
總之狰挡,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)。
git checkout -- file命令中的--很重要,沒有--加叁,就變成了“切換到另一個分支”的命令
命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)倦沧,重新放回工作區(qū):
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)它匕。當(dāng)我們用HEAD時展融,表示最新的版本。
在Git中超凳,刪除也是一個修改操作愈污,我們實戰(zhàn)一下,先添加一個新文件test.txt到Git并且提交:
$ git add test.txt
$ git commit -m "add test.txt"
一般情況下轮傍,你通常直接在文件管理器中把沒用的文件刪了暂雹,或者用rm命令刪了:
$ rm test.txt
這個時候,Git知道你刪除了文件创夜,因此杭跪,工作區(qū)和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了:
$ git status
現(xiàn)在你有兩個選擇驰吓,一是確實要從版本庫中刪除該文件涧尿,那就用命令git rm刪掉,并且git commit:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
現(xiàn)在檬贰,文件就從版本庫中被刪除了姑廉。
另一種情況是刪錯了,因為版本庫里還有呢翁涤,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:
$ git checkout -- test.txt
git checkout其實是用版本庫里的版本替換工作區(qū)的版本桥言,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”葵礼。