git工作原理-工作目錄(Working Directory)、暫存區(qū)(Stage/Index)、資源庫(Repository或Git Directory)、git倉庫(Remote Direc...

轉(zhuǎn)自:https://www.cnblogs.com/qdhxhz/p/9757390.html

一、概念

? ?1、四個工作區(qū)域

Git本地有四個工作區(qū)域:工作目錄(Working Directory)、暫存區(qū)(Stage/Index)、資源庫(Repository或Git Directory)、git倉庫(Remote Directory)。文件在這四個區(qū)域之間的轉(zhuǎn)換關(guān)系如下:

?Workspace: 工作區(qū),就是你平時存放項目代碼的地方

Index / Stage: 暫存區(qū),用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息

?Repository: 倉庫區(qū)(或版本庫),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本

?Remote: 遠(yuǎn)程倉庫,托管代碼的服務(wù)器,可以簡單的認(rèn)為是你項目組中的一臺電腦用于遠(yuǎn)程數(shù)據(jù)交換

? ?2、工作流程

git的工作流程一般是這樣的:

1、在工作目錄中添加、修改文件;

2、將需要進行版本管理的文件放入暫存區(qū)域;

3、將暫存區(qū)域的文件提交到git倉庫。

因此,git管理的文件有三種狀態(tài):已修改(modified),已暫存(staged),已提交(committed)

? ?3、文件的四種狀態(tài)

版本控制就是對文件的版本控制,要對文件進行修改、提交等操作,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交的文件,或者要提交的文件沒提交上。

GIT不關(guān)心文件兩個版本之間的具體差別,而是關(guān)心文件的整體是否有改變,若文件被改變,在添加提交時就生成文件新版本的快照,而判斷文件整體是否改變的方法就是用

SHA-1算法計算文件的校驗和。

Untracked:未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.

?Unmodify:文件已經(jīng)入庫, 未修改, 即版本庫中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)镸odified.

? ? ? ? ? ? ? ? ? ?如果使用git rm移出版本庫, 則成為Untracked文件

?Modified:?文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存staged狀態(tài), 使用git checkout 則丟棄修改過,

? ? ? ? ? ? ? ? 返回到unmodify狀態(tài), 這個git checkout即從庫中取出文件, 覆蓋當(dāng)前修改

?Staged:?暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行g(shù)it reset HEAD filename取消暫存,

? ? ? ? ? ? ? ?文件狀態(tài)為Modified

?下面的圖很好的解釋了這四種狀態(tài)的轉(zhuǎn)變:

新建文件--->Untracked

使用add命令將新建的文件加入到暫存區(qū)--->Staged

使用commit命令將暫存區(qū)的文件提交到本地倉庫--->Unmodified

如果對Unmodified狀態(tài)的文件進行修改---> modified

如果對Unmodified狀態(tài)的文件進行remove操作--->Untracked


二、四個區(qū)域常用命令

? ?1、新建代碼庫

# 在當(dāng)前目錄新建一個Git代碼庫 git init# 新建一個目錄,將其初始化為Git代碼庫git init [project-name]# 下載一個項目和它的整個代碼歷史git clone [url]

? ?2、查看文件狀態(tài)

#查看指定文件狀態(tài)git status [filename]#查看所有文件狀態(tài)git status

? ? 3、工作區(qū)<-->暫存區(qū)

# 添加指定文件到暫存區(qū)git add [file1] [file2] ...# 添加指定目錄到暫存區(qū),包括子目錄git add [dir]# 添加當(dāng)前目錄的所有文件到暫存區(qū)git add .#當(dāng)我們需要刪除暫存區(qū)或分支上的文件, 同時工作區(qū)也不需要這個文件了, 可以使用(??)git rm file_path#當(dāng)我們需要刪除暫存區(qū)或分支上的文件, 但本地又需要使用, 這個時候直接push那邊這個文件就沒有,如果push之前重新add那么還是會有。git rm --cached file_path#直接加文件名? 從暫存區(qū)將文件恢復(fù)到工作區(qū),如果工作區(qū)已經(jīng)有該文件,則會選擇覆蓋#加了【分支名】 +文件名? 則表示從分支名為所寫的分支名中拉取文件 并覆蓋工作區(qū)里的文件git checkout

? ? 4、工作區(qū)<-->資源庫(版本庫)

#將暫存區(qū)-->資源庫(版本庫)git commit -m '該次提交說明'#如果出現(xiàn):將不必要的文件commit 或者 上次提交覺得是錯的? 或者 不想改變暫存區(qū)內(nèi)容,只是想調(diào)整提交的信息#移除不必要的添加到暫存區(qū)的文件git reset HEAD 文件名#去掉上一次的提交(會直接變成add之前狀態(tài))? git reset HEAD^#去掉上一次的提交(變成add之后,commit之前狀態(tài)) git reset --soft? HEAD^

? ? 5、遠(yuǎn)程操作

# 取回遠(yuǎn)程倉庫的變化,并與本地分支合并git pull# 上傳本地指定分支到遠(yuǎn)程倉庫git push

? ?6、其它常用命令

# 顯示當(dāng)前的Git配置git config --list# 編輯Git配置文件git config -e [--global]#初次commit之前,需要配置用戶郵箱及用戶名,使用以下命令:git config --global user.email "you@example.com"

git config --global user.name "Your Name"#調(diào)出Git的幫助文檔git --help#查看某個具體命令的幫助文檔git +命令 --help#查看git的版本git --version

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 工作區(qū)和暫存區(qū) 工作區(qū) 在我們自己電腦中,里面有.git文件夾的那個目錄,我們一般叫做git工作區(qū),但是請注意.g...
    程序淡然閱讀 393評論 0 1
  • 一 Git配置和倉庫初始化 下面會介紹Git的使用,每個小節(jié)里會講解各個功能在命令行中的實現(xiàn)方式,并在每小節(jié)的最后...
    Happioo閱讀 3,655評論 0 5
  • 一、基本概念: 注:對于git的分布式概念及其優(yōu)點,不重復(fù)說明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大廠offer閱讀 1,560評論 0 3
  • Git 是目前最流行的分布式版本控制系統(tǒng)之一。 版本控制指的是,記錄每次版本變更的內(nèi)容和時間等細(xì)節(jié),保留各版本之間...
    神齊閱讀 1,515評論 0 7
  • 以下筆記主要參考gitgot,大致了解git使用和原理。 第一部分我們從個人的視角去研究如何用好Git,并且揭示G...
    carolwhite閱讀 2,531評論 0 1

友情鏈接更多精彩內(nèi)容