Git的基礎使用
回想起初次使用git是在大二下學期上課的時候,老師給我們推薦的版本管理系統…一直到現在還是處于非常懵*的狀态
git的初始化
git config --global user.name "nameString"
git config --global user.email "emailString"
使用 :
git config --list
就可以看到剛剛設定的使用者名和郵箱名了
那麼git記錄的是什麼呢?
答案: 将每個版本獨立儲存(空間換時間),壓倒性其他版本關系系統
這裡開始我們要有一個概念:
三棵樹
分别是:
-
工作區
-
暫存區
-
Git倉庫
那麼git的工作流程是怎麼樣的呢?!
- 在工作目錄中添加,修改檔案
- 将需要進行版本管理的檔案放入暫存區中
-
将暫存區的檔案送出到git倉庫上
這就是Git的主要的三部曲
示範
-
建立一個檔案夾(第一棵樹)
建立一個GitProject的檔案夾
接着往裡面增加一些檔案随便都可以。mkdir GitProject
-
添加檔案到暫存區(第二棵樹)
添加單一的檔案,也可以添加多個檔案
一次性添加所有檔案
git add . / git add *
成功添加到暫存區之後是沒有提示的。
是以說沒有提示就是最好的提示
-
送出到git倉庫
送出指令
送出之後會有相應的提示資訊。
檢視送出過的記錄
這裡後面可以帶部分參數git log
–decorate 顯示送出的所有引用(包括分支的) –all 顯示所有分支 –oneline 一行顯示一個快照(縮略顯示) –graph 圖形化的顯示分支情況 -
Git 管理檔案的三種狀态
- 已修改(modified)
- 已暫存(staged)
- 已送出(commited)
-
檢視git目前的狀态
git status
-
撤銷檔案/恢複檔案
reset指令
reset指令會更改
指針的指向head
-
将最近一次送出到git倉庫的檔案恢複到暫存區中
這裡預設是–mixed的模式,這裡沒有更改
指針的指向還是指向最新的快照head
- 将最近一次送出到git倉庫的檔案恢複到暫存區中并且更改
head
指針的指向
這裡同樣也是–miexed的模式,但是這裡更改了
head
的指向,指向了上一個快照。
對比上一條指令
HEAD後面多了一個~ , 那麼也就是說。想要更改git reset HEAD <file>
head
指針的指向。
可以對
進行一些操作head
更改
以此類推
指針,指向上上個快照head
head~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**也可以這樣做 : **
将
指針指向上(1,2,3,4,num)個快照head
reset指令的選項
這是預設的(影響兩棵樹)git reset --mixed HEAD~
- 移動
的指向,将其指向上一個快照HEAD
- 将
HEAD
移動後指向的快照,復原到暫存區
(影響倉庫區和暫存區)
git reset --soft HEAD~
- 移動
HEAD
的指向,将其指向上一個快照
(這裡隻影響倉庫區域,不會影響暫存區)。隻是單單的改變
指向而已head
- 相當于撤回上一的**
**操作commit
git reset --hard HEAD~
- 移動
的指向,将其指向上一個快照HEAD
- 将
移動後指向的快照,復原到暫存區HEAD
-
将暫存區的檔案還原到工作目錄
(硬着來,直接還原指定的快照。有風險)
復原到個别檔案
這一步git reset HEAD 版本快照 檔案名
head
指針不會改變
也就是說git log裡的日志還是有的。
往復原,當然也可以往前滾(隻要你記住了快照ID)
git reset 版本快照的ID
注意(預設是–mixed)模式
復原的檔案放到暫存區,可以
check
指令拉回來,後面說check
也可以直接使用
模式--hard
檢視曆史所有記錄
git reflog
- 移動
-
-
版本比較
這裡個人覺得用指令進行比較,有點眼花。
是以不怎麼說:
具體指令:
比較暫存區和工作區
比較兩個曆史快照
git diff 快照ID 快照ID
- 快照ID隻需要5位上下就可以了。不用全部都輸入進去
git diff 快照ID
比較 目前工作目錄快照 和 最新git倉庫中的快照
比較 暫存區 和 git倉庫快照
-
修改最後一次送出
執行帶
選項的--amend
commit
送出指令,git就會更正最近的一次送出。
此時不會産生新的快照
此時會進入到修改送出說明的界面:
- i 表示
insert
- 儲存退出:
後,esc
shift+z+z
- 不希望修改的話:
回車就可以了q!
- i 表示
-
删除檔案
- 隻是删除工作目錄和暫存區的檔案
git rm 檔案名
也就是取消跟蹤,下次送出時不納入管理
-f 強制删除 —>
--force
- 删除暫存區檔案,保留工作區檔案
git rm --cached/--staged 檔案名(*/.)
- 隻是删除工作目錄和暫存區的檔案
-
重命名
如果直接更改工作區的檔案名,暫存區就會顯示檢測到被重命名的那個檔案被删除了。并且新增了一個重命名後的檔案。實質上他們兩個檔案是同一個檔案。隻是git沒有那麼智能化,不能自動識别git mv 舊檔案名 新檔案名
-
建立分支和切換分支
建立分支
切換分支git branch 分支名
git checkout 分支名
- 每個分支都有自己的作用域,也就是每個分支都是獨立的,做任何修改都不會影響到其他分支
合并分支
最終分支工作完成後,那麼就需要合并分支,交由master分支上線了~
git merge 分支名
- 合并該分支到目前分支上,是以合并分支前,務必确認好再操作
git checkout -b 分支名
意思:建立并切換到分支
删除分支
git branch -d(--delete) 分支名
匿名分支
也就是說沒有分支名的分支
直接進入沒有名字的分支,同樣具有自己的作用域。不過當切換到其他分支後,該分支上做過的操作都會消失,不過也可以安裝git branch
提示把這個匿名分支給予它名字,轉換成一個正常的分支git
-
checkout 指令
checkout指令和reset指令很相似-
:checkout指令功能
git checkout --<file> ...
将原檔案恢複到工作目錄
也就是說暫存區恢複的檔案會覆寫工作區的檔案
切換分支
git checkout 分支名
-
-
checkout和reset差別
- 在
後面帶檔案時,不能使用reset
和--hard
模式。也就是說,隻能将檔案恢複到暫存區--soft
-
則是覆寫暫存區和工作區checkout
checkout從曆史快照(暫存區)中拷貝檔案到工作目錄
将會将上一個快照中的file檔案複制到工作區和暫存區中
- 在