Git原理和常用操作
由于gitlab的免費(fèi)私有倉(cāng)庫(kù)的優(yōu)勢(shì),所以在公司使用gitlab會(huì)多一些,對(duì)于gitlab來(lái)說(shuō),登錄不需要。
關(guān)于git是做什么的,這里就不多說(shuō)了。相信大家知道,這里就帶大家,一小時(shí)掌握git原理,學(xué)會(huì)git操作。
Git 工作流程
在gitlab上一般每個(gè)人或每個(gè)項(xiàng)目或者每個(gè)bug都會(huì)有自己獨(dú)立的分支。分支不影響主分支master。
一般工作流程如下:
- 克隆 Git 資源作為工作目錄。
- 在克隆的資源上添加或修改文件。
- 如果其他人修改了,你可以更新資源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果發(fā)現(xiàn)錯(cuò)誤,可以撤回提交并再次修改并提交。

Git 工作區(qū)、暫存區(qū)和版本庫(kù)
這里理解git的重心。因?yàn)槲覀兪褂胓it,就是在本地電腦上,本地電腦會(huì)有自己的倉(cāng)庫(kù),可以在每個(gè)項(xiàng)目文件夾的根目錄均設(shè)置一個(gè)倉(cāng)庫(kù)。本地倉(cāng)庫(kù)和本地分支和遠(yuǎn)程分支是分離的。可以通過(guò)pull拉取遠(yuǎn)程分支到本地,或push,推送本地分支到遠(yuǎn)程分支。
- 工作區(qū):就是你在電腦里能看到的目錄。
- 暫存區(qū):英文叫stage, 或index。一般存放在 “.git目錄下” 下的index文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index)。
- 版本庫(kù):工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是Git的版本庫(kù)。
下面這個(gè)圖展示了工作區(qū)、版本庫(kù)中的暫存區(qū)和版本庫(kù)之間的關(guān)系:

圖中左側(cè)為工作區(qū),右側(cè)為版本庫(kù)。在版本庫(kù)中標(biāo)記為 “index” 的區(qū)域是暫存區(qū)(stage, index),標(biāo)記為 “master” 的是 master 分支所代表的目錄樹(shù)。
圖中我們可以看出此時(shí) “HEAD” 實(shí)際是指向 master 分支的一個(gè)”游標(biāo)”。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來(lái)替換。
圖中的 objects 標(biāo)識(shí)的區(qū)域?yàn)?Git 的對(duì)象庫(kù),實(shí)際位于 “.git/objects” 目錄下,里面包含了創(chuàng)建的各種對(duì)象及內(nèi)容。
當(dāng)對(duì)工作區(qū)修改(或新增)的文件執(zhí)行 “git add” 命令時(shí),暫存區(qū)的目錄樹(shù)被更新,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫(xiě)入到對(duì)象庫(kù)中的一個(gè)新的對(duì)象中,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中。
當(dāng)執(zhí)行提交操作(git commit)時(shí),暫存區(qū)的目錄樹(shù)寫(xiě)到版本庫(kù)(對(duì)象庫(kù))中,master 分支會(huì)做相應(yīng)的更新。即 master 指向的目錄樹(shù)就是提交時(shí)暫存區(qū)的目錄樹(shù)。
當(dāng)執(zhí)行 “git reset HEAD” 命令時(shí),暫存區(qū)的目錄樹(shù)會(huì)被重寫(xiě),被 master 分支指向的目錄樹(shù)所替換,但是工作區(qū)不受影響。
當(dāng)執(zhí)行 “git rm --cached <file>” 命令時(shí),會(huì)直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。
當(dāng)執(zhí)行 “git checkout .” 或者 “git checkout -- <file>” 命令時(shí),會(huì)用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個(gè)操作很危險(xiǎn),會(huì)清除工作區(qū)中未添加到暫存區(qū)的改動(dòng)。
當(dāng)執(zhí)行 “git checkout HEAD .” 或者 “git checkout HEAD <file>” 命令時(shí),會(huì)用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個(gè)命令也是極具危險(xiǎn)性的,因?yàn)椴坏珪?huì)清除工作區(qū)中未提交的改動(dòng),也會(huì)清除暫存區(qū)中未提交的改動(dòng)。
下面通過(guò)幾個(gè)常用的操作指令,通過(guò)注釋,就可以快速入手。由于大部分情況,我們并不需要在本地創(chuàng)建倉(cāng)庫(kù),所以這里就不介紹在本地創(chuàng)建倉(cāng)庫(kù)了。
git安裝配置
可以參考,在這篇文章中寫(xiě)過(guò) http://www.dhdzp.com/article/148066.htm
git使用前配置
配置賬號(hào)密碼和編輯器。首先要讓git知道我們登錄gitlab的賬號(hào)和郵箱。git每次聯(lián)系gitlab或github都會(huì)使用我們配置的賬號(hào)和郵箱
git config --global user.name "luanpeng" git config --global user.email xxxxx@xxxx.com
至于其他的配置,使用默認(rèn)即可。
- 注意:每個(gè)目錄下是一個(gè)倉(cāng)庫(kù),倉(cāng)庫(kù)信息通過(guò)目錄下的.git文件保存
將本地項(xiàng)目文件夾,上傳到遠(yuǎn)程倉(cāng)庫(kù)指定分支的某個(gè)文件夾
要修改遠(yuǎn)程倉(cāng)庫(kù)的分支內(nèi)容,需要我們先把遠(yuǎn)程倉(cāng)庫(kù)的某個(gè)分支pull到本地,在本地添加修改的內(nèi)容,在push到遠(yuǎn)程。
所謂的修改包括,添加文件,刪除文件,清空文件等等。
比如我想將我的文件夾上傳到遠(yuǎn)程倉(cāng)庫(kù)的luanpeng分支下的ios/server文件夾下面。
選擇一個(gè)目錄用來(lái)存儲(chǔ)遠(yuǎn)程倉(cāng)庫(kù)分支的內(nèi)容。 git clone -b luanpeng git@gitlab.com:luanpeng/cloud-ai.git 將遠(yuǎn)程倉(cāng)庫(kù)的分支luanpeng下載到當(dāng)前目錄。默認(rèn)master分支 cd 項(xiàng)目目錄 git branch 查看分支,顯示的就是luanpeng分支 在文件夾中對(duì)應(yīng)位置添加你的項(xiàng)目文件或文件夾,回到命令行。 git add . 添加當(dāng)前目錄下的所有文件到緩存區(qū) git status 查看緩存區(qū)和版本庫(kù)的所有變化 git commit -m "describe" //提交監(jiān)督的內(nèi)容的變化到本地版本庫(kù) 創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的鏈接 git remote add cloudai git@gitlab.com:luanpeng/cloud-ai.git 使用cloudai這個(gè)名字代表遠(yuǎn)程倉(cāng)庫(kù) git push cloudai luanpeng 將當(dāng)前分支上傳到遠(yuǎn)程倉(cāng)庫(kù)的分支。 git remote -v 查看遠(yuǎn)程倉(cāng)庫(kù)的鏈接 git remote rm cloudai 刪除遠(yuǎn)程倉(cāng)庫(kù)鏈接
如果你是自己在本地通過(guò)
git init創(chuàng)建的倉(cāng)庫(kù),想通過(guò)push上傳到遠(yuǎn)程倉(cāng)庫(kù),需要先
獲取遠(yuǎn)程庫(kù)與本地同步合并(如果遠(yuǎn)程庫(kù)不為空必須做這一步,否則后面的提交會(huì)失?。? git pull --rebase cloudai luanpeng 將遠(yuǎn)程倉(cāng)庫(kù)的分支拉取到本地
本地倉(cāng)庫(kù)管理
如果你想在自己的電腦上建一個(gè)倉(cāng)庫(kù),自己管理自己的代碼,也備以后使用??梢允褂孟旅娴牟僮?/p>
倉(cāng)庫(kù)初始化 mkdir projectdir 創(chuàng)建一個(gè)目錄 cd projectdir 進(jìn)入目錄 git init 創(chuàng)建一個(gè)倉(cāng)庫(kù),自動(dòng)創(chuàng)建master分支 手動(dòng)在工作區(qū)(也就是這個(gè)文件夾內(nèi))拷貝,剪切,修改文件 git add . //添加當(dāng)前文件夾下的所有文件添加到緩存區(qū),手動(dòng)添加的文件,必有add以后才能被添加到緩存區(qū) git status 查看緩存區(qū)和版本庫(kù)之間的文件差別 git commit -m "describe" //將緩存區(qū)的內(nèi)容更新到版本庫(kù) 分支 git branch 查看當(dāng)前分支 git branch -a 查看所有分支。前面帶*號(hào)的代表你當(dāng)前工作目錄所處的分支 git branch branch-name 當(dāng)前倉(cāng)庫(kù)添加分支,創(chuàng)建branch-name分支。需要你向里面添加文件并提交 git checkout branch-name #切換到branch-name分支,那工作區(qū)就會(huì)只顯示該分支下的文件夾。 git branch -D branch-name 刪除本地分支 git branch --delete branch-name
遠(yuǎn)程倉(cāng)庫(kù)的管理
從本地分支鏈接到遠(yuǎn)程分支,稱為跟蹤分支(tracking branch)。跟蹤分支是一種和遠(yuǎn)程分支有直接聯(lián)系的本地分支。在跟蹤分支里輸入git push,Git 會(huì)自行推斷應(yīng)該向哪個(gè)服務(wù)器的哪個(gè)分支推送數(shù)據(jù)。反過(guò)來(lái),在這些分支里運(yùn)行g(shù)it pull 會(huì)獲取所有遠(yuǎn)程索引,并把它們的數(shù)據(jù)都合并到本地分支中來(lái).
- 注意:本地創(chuàng)建的遠(yuǎn)程倉(cāng)庫(kù)和跟蹤分支,只是到遠(yuǎn)程倉(cāng)庫(kù)和分支的鏈接
我們可以在本地管理遠(yuǎn)程倉(cāng)庫(kù)或遠(yuǎn)程分支
git remote -v 查看遠(yuǎn)程倉(cāng)庫(kù)的鏈接 git remote rm cloudai 刪除cloudai遠(yuǎn)程倉(cāng)庫(kù)鏈接 git remote add cloudai git@gitlab.com:luanpeng/cloud-ai.git 建立一個(gè)遠(yuǎn)程倉(cāng)庫(kù)的鏈接 git push cloudai :luanpeng 刪除遠(yuǎn)程倉(cāng)庫(kù)的luanpeng分支 查看本地創(chuàng)建的遠(yuǎn)程分支鏈接 git branch 查看本地分支 git branch -a 查看所有分支 git branch -r 查看所有遠(yuǎn)程分支鏈接 git branch -r -d origin/branchname 刪除本地的遠(yuǎn)程分支鏈接 pull和push到遠(yuǎn)程分支 git pull <遠(yuǎn)程庫(kù)名> <遠(yuǎn)程分支名>:<本地分支名> //拉取遠(yuǎn)程倉(cāng)庫(kù)的分支,當(dāng)本地分支,本地分支可以不寫(xiě)默認(rèn)為當(dāng)前分支 git pull <遠(yuǎn)程庫(kù)名> <遠(yuǎn)程分支名> git push git@gitlab.com:luanpeng/cloud-ai.git master // 把本地倉(cāng)庫(kù)提交到遠(yuǎn)程倉(cāng)庫(kù)的master分支中 git remote add cloudai git@gitlab.com:luanpeng/cloud-ai.git git push cloudai luanpeng 需要說(shuō)明的是,默認(rèn)情況下這條語(yǔ)句等價(jià)于提交本地的master倉(cāng)庫(kù)到遠(yuǎn)程倉(cāng)庫(kù),并作為遠(yuǎn)程的luanpeng分支。 git push cloudai master:luanpeng 提交本地的luanpeng分支到遠(yuǎn)程倉(cāng)庫(kù)的luanpeng分支 git push cloudai :luanpeng 提交本地空分支到遠(yuǎn)程倉(cāng)庫(kù)的分支,也就是刪除遠(yuǎn)程倉(cāng)庫(kù)的分支 注意:我們修改了分支下的文件,都要 git add . 添加到緩存去 git commit -m "describe" 更新到版本庫(kù) git push cloudai master:luanpeng 將版本庫(kù)中的更新到遠(yuǎn)程分支
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Websocket的用法及常見(jiàn)應(yīng)用場(chǎng)景
本文詳細(xì)介紹了WebSocket的基本概念、特點(diǎn)、與HTTP的區(qū)別、常見(jiàn)應(yīng)用場(chǎng)景、實(shí)例以及心跳機(jī)制,WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,適用于實(shí)時(shí)數(shù)據(jù)傳輸場(chǎng)景,如實(shí)時(shí)聊天、實(shí)時(shí)協(xié)作、實(shí)時(shí)數(shù)據(jù)推送等2025-12-12
git 入門(mén)教程之本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的本質(zhì)介紹
本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)在本質(zhì)上沒(méi)有太大區(qū)別,只不過(guò)一個(gè)是本地電腦,一個(gè)是遠(yuǎn)程電腦.這篇文章主要介紹了git 入門(mén)教程之本地和遠(yuǎn)程倉(cāng)庫(kù)的本質(zhì)介紹,需要的朋友可以參考下2020-08-08
訪客站點(diǎn)停留時(shí)間和頁(yè)面停留時(shí)間的實(shí)現(xiàn)方案
這篇文章主要介紹了訪客站點(diǎn)停留時(shí)間和頁(yè)面停留時(shí)間的實(shí)現(xiàn)方案,需要的朋友可以參考下2015-01-01
JavaScript/VBScript腳本程序調(diào)試(Wscript篇)
在日常的操作系統(tǒng)維護(hù)過(guò)程中,有時(shí)我們也會(huì)寫(xiě)一些小的腳本程序來(lái)簡(jiǎn)化系統(tǒng)管理工作,例如調(diào)用一些WMI函數(shù)來(lái)自動(dòng)安裝卸載程序之類的。2009-09-09

