Git使用與管理

一.基本操作

1.創建本地倉庫

在對應文件目錄下進行:

git init

輸入完上面的代碼,所在文件目錄下就會多一個名為 .git 的隱藏文件,該文件是Git用來跟蹤和管理倉庫的。

我們可以使用 tree 命令(注意要先下載tree插件)來查看 .git 文件的細節:

創建完后我們一定要配置配置Git,設置用戶名和郵箱地址:

git config [--global] user.name "***"   
git config [--global] user.email "***"  

global是一個選擇選擇項,填上這個表示這臺機器上所有的Git倉庫都會使用這個用戶名和郵箱地址。

能設置自然也能刪除配置:

 git config [--global] --unset user.namegit config [--global] --unset user.email

了解完配置與刪除,我們可以使用下面的命令來查看配置:

git config -l

2.工作區、暫存區、版本庫(重要)

工作區:我們在本地的目錄;

暫存區(stage、index):一般存放在 .git 目錄下的index文件;

版本庫:隱藏目錄 .git 。

我們在本地,也就是工作區創建的文件,可以通過add操作將文件上傳到暫存區;我們可以使用commit命令將暫存區的文件上傳到版本庫中。從這里也可以看出,我們新創建的文件沒有經過add和commit命令是沒有添加到倉庫中的。

//指定文件名,可寫多個,用空格隔開
git add 文件名
//所有文件
git add .

通過這里的學習也解開了我之前的疑惑,那就是我在提交文件名有空格的文件時一直報錯,原來用了空格表示不是一個文件了。如果真有空格,可以使用引號括起來;也可以使用 \ 來轉義空格。

git commit -m "信息"
//指定文件到版本庫中
git commit 文件名 -m "信息"

這里是信息指的是本次提交的細節。

通過上面兩個步驟我們就將代碼提交到版本庫里了。我們可以使用下面的命令來查看歷史提交記錄:

git log [--pretty=oneline]

--pretty=oneline 是一個可選項,加上這個會使歷史提交記錄顯示的更加簡潔。

通過上面的命令我們會得到下面的內容:

4e65c55222473e05e72338d3ba75a101a6a56d56 First commit

前面這一堆數字和字母是commit id,這個很重要,下面會說到。

在使用上面的 tree .git 命令查看,我們可以看到objects中存入了commit id。

?在最上面的那張圖上我們可以看到head指向master,我們查看以下master的內容,發現:

4e65c55222473e05e72338d3ba75a101a6a56d56

其中存著的正是上面的commit id。這個master存的正是最新的commit id。

下面著重說一下objects。

對一開始那張圖進行補充:

objects 為Git的對象庫,里面包含了創建的各種版本庫對象及內容。

我們使用:ls .git/objects/ 來查看objects中的文件:

4e  70  e6  info  pack

為什么是這個,其實從樹上就能得到答案。

我們可以通過:git cat-file 命令來查看版本庫中的內容:

輸入下面的命令:

git cat-file -p 4e65c55222473e05e72338d3ba75a101a6a56d56

我們得到了:

tree 70ea63592ac4de5f9aec6b15273c4dd5cc0cd00f

3.修改文件

查看在上次提交之后是否有對文件進行再次修改:

git status

查看工作區文件與暫存區或版本庫文件的差異:

//工作區與暫存區差異
git diff [文件]
//工作區與版本庫差異
git diff HEAD -- [文件]

4.版本回退

git reset 命令用于回退版本,其后面還有幾個可選項:

git reset [--soft | --mixed | --hard] [HEAD]
工作區暫存區版本庫選項
原本file1、file2file1、file2file1、file2
回退后file1、file2file1、file2file1--soft
回退后file1、file2file1file1--mixed
回退后file1file1file1--hard

其中?--mixed?是默認選項。

上面表格不難理解,舉個例子如果我們使用了 --soft,那么只有版本庫回退了,工作區和暫存區都沒有回退。

HEAD選項:

commit id回退到指定版本
HEAD表示當前版本
HEAD^表示上一個版本
HEAD~1表示上一個版本
HEAD~2表示上上一個版本

5.刪除文件

刪除工作區和暫存區的文件:

git rm 文件名

二.分支管理

1.分支是什么

每次commit,git會根據時間形成一條“時間線”,這條時間線就是分支。git里面有一條主分支,master分支。HEAD指向master。

2.基本操作

1)查看分支

git branch

2)創建分支

git branch 分支名

比如我們創建一個dev分支:

此時再查看分支:

3)切換分支

git checkout 分支名

切換完后,HEAD就會指向切換的分支,比如我們切換到了dev分支:

?如果這個時候我們修改了某個文件,并且add和commit了,那么就會變成這樣:

如果此時我們切回master,打開剛剛修改文件,我們就會發現文件沒有被修改。原因從圖上也能看出,master跟dev指向的根本就不是一個東西。修改的只是dev分支的文件,master分支沒有被修改。

4)合并分支

像剛剛上面的例子,只有dev分支文件被修改了,我們想要將這個修改合并到master分支。

第一步,我們要先切換到master分支。

第二步,合并:

git merge dev

5)刪除分支

git branch -d 分支名

這里要注意,我們要刪除某一個分支,HEAD一定不能指向這個分支,如果指向這個分支是刪不了的。

還有,如果這個分支的沒有被合并,這個時候使用上面的方法是刪不掉分支的,我們要這樣寫強制刪除分支:

git branch -D 分支名

3.合并沖突

我們在dev分支修個了file1文件,同時也在master分支修改了file1文件,如果將這兩個分支合并就會發生沖突,git根本就不知道該聽誰的,是要dev分支的修改還是master分支的修改。這就是合并沖突。

我們的解決辦法也很原始,手動刪。

當出現沖突報錯后,再打開file1文件就會發現文件內容變成這樣了:

?<<< ==== >>>這些符號是用來向我們區分不同分支的沖突的。我們只需要留下我們真正需要的內容即可。

修改完后我們要再次add和commit一次,這個一定不能漏。

我們使用下面的命令也可以參看到這個結構:

 git log --graph --pretty=oneline --abbrev-commit

4.合并模式

在沒有合并沖突的情況下,git會優先使用Fast forward模式。這個模式有一個問題,在我們刪除合并完刪除分支后,會丟失分支信息,我們無法知道最新的commit是不是合并出來的。

為了解決這個問題,我們要使用普通模式:

 
git merge --no-ff -m "" 分支名

三.遠程操作

前面的操作其實都是在本地操作的,我們在實際開發時,不可能所有人都在一臺設備上操作,每個人一臺獨立的設備,都在自己的設備上進行開發。這個時候就需要一個遠程倉庫,每個將寫的代碼提交到遠程倉庫中,遠程倉庫可以自己搭建,也可以是使用GitHub或Gitee等。

下面使用Gitee做示范。

1.克隆遠程倉庫

打開右上角克隆/下載,里面會有:

為什么可以選擇使用上面的地址克隆。

這里只以HTTPS和SSH為例。

對于HTTPS,操作很簡單,只需要將上面的地址復制:

git clone 地址

2.推送到遠程倉庫

將遠程克隆到本地后,我們可以使用命令將本地倉庫的代碼推送到遠程倉庫中:

git push 遠程主機名 本地分?名:遠程分?名# 如果本地分?名與遠程分?名相同,則可以省略冒號
git push 遠程主機名 本地分?名

比較常見的就是下面這個:

git push origin master

3.拉取遠程倉庫

如果別人修改了代碼并提交到遠程倉庫,我們要與遠程倉庫的代碼同步,這個時候就要使用拉取操作了:

git pull 遠程主機名 本地分?名:遠程分?名# 如果本地分?名與遠程分?名相同,則可以省略冒號
git pull 遠程主機名 本地分?名

git pull 命令其實執行了兩個操作,一個是從遠程倉庫拉取代碼,一個是與本地分支合并。

4.配置git

1)忽略特殊文件

在我們初始化倉庫的時候,我們添加了一個 .gitignore文件:

寫入這個文件的文件在使用 git add . 時就不會一起提交了。

比如我們想忽略所有 .ini 結尾的文件,那么我們就可以寫:

*.ini

如果我們在忽略的文件中 a.ini 我們是想讓其提交的,這個時候我們可以寫:

*.ini
!a.ini

2)命令配置別名

比如我們想給 git status 起一個別名:

git config [--global] alias.st status

此時我們使用 git st 與使用 git status 的效果是一樣的。

我們配置完命令后,原來的命令還是可以用的,其與我們的配置是并存的。

四.標簽管理

標簽tag,可以簡單的理解是某次commit的一個標識,相當于起了一個別名。

1.創建標簽

先切換到要創建標簽的分支,然后創建標簽:

git tag 標簽名

創建完后我們可以使用 git tag 來查看我們創建的標簽,但是要注意標簽不是按時間順序列出,而是按字母排序的。

2.操作標簽

刪除本地標簽:

git tag -d 標簽名

刪除遠程倉庫標簽:

 git push origin :refs/tags/標簽名

將本地標簽推送到遠程倉庫:
?

git push origin 標簽名
# 將全部標簽推送
git push origin --tags

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76405.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76405.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76405.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機視覺——深度學習圖像處理中目標檢測平均精度均值(mAP)與其他常用評估指標

概述 平均精度均值&#xff08;mAP&#xff09;是目標檢測領域中最為流行且復雜的重要評估指標之一。它廣泛用于綜合總結目標檢測器的性能。許多目標檢測模型會輸出類似以下的參數結果&#xff1a; Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.3…

C語言中單鏈表操作:查找節點與刪除節點

一. 簡介 前面學習了C語言中創建鏈表節點&#xff0c;向鏈表中插入節點等操作&#xff0c;文章如下&#xff1a; C語言中單向鏈表&#xff1a;創建節點與插入新節點-CSDN博客 本文繼續學習c語言中對鏈表的其他操作&#xff0c;例如在鏈表中查找某個節點&#xff0c;刪除鏈表…

WePY 框架:小程序開發的“Vue式”利器!!!

WePY 框架&#xff1a;小程序開發的“Vue式”利器 &#x1f680; 哈嘍&#xff0c;大家好&#xff01;&#x1f44b; 今天我們要聊聊一個在微信小程序開發中大放異彩的框架——WePY&#xff01;它是什么&#xff1f;有什么特點&#xff1f;為啥值得一試&#xff1f;別急&#…

什么是微前端?有什么好處?有哪一些方案?

微前端&#xff08;Micro Frontends&#xff09; 微前端是一種架構理念&#xff0c;借鑒了微服務的思想&#xff0c;將一個大型的前端應用拆分為多個獨立、自治的子應用&#xff0c;每個子應用可以由不同團隊、使用不同技術棧獨立開發和部署&#xff0c;最終聚合為一個整體產品…

【家政平臺開發(33)】庫存管理模塊開發實戰:從基礎搭建到智能管控

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

Mysql個人筆記

Mysql個人筆記 sql基礎書寫規則和種類種類書寫規則注釋規則啟動 DDL數據類型數據庫的操作useshowcreatedrop 表的操作useshowcreate創建表復制表 dropalter Mysql的存儲引擎 DMLselectselect語句like&#xff08;謂詞&#xff09;where聚合函數&#xff1a;關于nullgroup byexi…

【重裝系統】大白菜自制U盤裝機,備份C盤數據,解決電腦啟動黑屏/藍屏

1. 準備 U 盤 U 盤容量至少 8G&#xff0c;備份 U 盤的數據&#xff08;后期會格式化&#xff09; 2. 從微軟官網下載操作系統鏡像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下載安裝大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盤&#…

各類神經網絡學習:(十)注意力機制(第2/4集),pytorch 中的多維注意力機制、自注意力機制、掩碼自注意力機制、多頭注意力機制

上一篇下一篇注意力機制&#xff08;第1/4集&#xff09;待編寫 一、pytorch 中的多維注意力機制&#xff1a; 在 N L P NLP NLP 領域內&#xff0c;上述三個參數都是 向量 &#xff0c; 在 p y t o r c h pytorch pytorch 中參數向量會組成 矩陣 &#xff0c;方便代碼編寫。…

uni-app初學

文章目錄 1. pages.json 頁面路由2. 圖標3. 全局 CSS4. 首頁4.1 整體框架4.2 完整代碼4.3 輪播圖 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分類 uni-row、uni-col4.6 商品列表 小程序開發網址&#xff1a; 注冊小程序賬號 微信開發者工具下載 uniapp 官網 HbuilderX 下…

VBA將Word文檔內容逐行寫入Excel

如果你需要將Word文檔的內容導入Excel工作表來進行數據加工&#xff0c;使用下面的代碼可以實現&#xff1a; Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL運行一段時間后磁盤出現100%讀寫

MySQL運行一段時間后磁盤出現100%讀寫的情況&#xff0c;可能是由多種原因導致的&#xff0c;以下是一些常見原因及解決方法&#xff1a; 可能的原因 1. 磁盤I/O壓力過大[^0^]&#xff1a;數據量過大&#xff0c;數據庫查詢和寫入操作消耗大量I/O資源。索引效率低&#xff0c…

【RabbitMQ】延遲隊列

1.概述 延遲隊列其實就是隊列里的消息是希望在指定時間到了以后或之前取出和處理&#xff0c;簡單來說&#xff0c;延時隊列就是用來存放需要在指定時間被處理的元素的隊列。 延時隊列的使用場景&#xff1a; 1.訂單在十分鐘之內未支付則自動取消 2.新創建的店鋪&#xff0c;…

Linux筆記之Ubuntu系統設置自動登錄tty1界面

Ubuntu22.04系統 編輯getty配置文件 vim /etc/systemd/system/gettytty1.service.d/override.conf如果該目錄或者文件不存在&#xff0c;進行創建。 在override.conf文件中進行編輯&#xff1a; [Service] ExecStart ExecStart-/sbin/agetty --autologin yourusername --no…

C++程序詩篇的靈動賦形:多態

文章目錄 1.什么是多態&#xff1f;2.多態的語法實現2.1 虛函數2.2 多態的構成2.3 虛函數的重寫2.3.1 協變2.3.2 析構函數的重寫 2.4 override 和 final 3.抽象類4.多態原理4.1 虛函數表4.2 多態原理實現4.3 動態綁定與靜態綁定 5.繼承和多態常見的面試問題希望讀者們多多三連支…

算法訓練之動態規劃(三)

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ?????? 個…

$_GET變量

$_GET 是一個超級全局變量&#xff0c;在 PHP 中用于收集通過 URL 查詢字符串傳遞的參數。它是一個關聯數組&#xff0c;包含了所有通過 HTTP GET 方法發送到當前腳本的變量。 預定義的 $_GET 變量用于收集來自 method"get" 的表單中的值。 從帶有 GET 方法的表單發…

jQuery多庫共存

在現代Web開發中&#xff0c;項目往往需要集成多種JavaScript庫或框架來滿足不同的功能需求。然而&#xff0c;當多個庫同時使用時&#xff0c;可能會出現命名沖突、功能覆蓋等問題。幸運的是&#xff0c;jQuery提供了一些機制來確保其可以與其他庫和諧共存。本文將探討如何實現…

MySQL 中的聚簇索引和非聚簇索引有什么區別?

MySQL 中的聚簇索引和非聚簇索引有什么區別&#xff1f; 1. 從不同存儲引擎去考慮 在MySIAM存儲引擎中&#xff0c;索引和數據是分開存儲的&#xff0c;包括主鍵索引在內的所有索引都是“非聚簇”的&#xff0c;每個索引的葉子節點存儲的是數據記錄的物理地址&#xff08;指針…

Java從入門到“放棄”(精通)之旅——啟航①

&#x1f31f;Java從入門到“放棄 ”精通之旅&#x1f680; 今天我將要帶大家一起探索神奇的Java世界&#xff01;希望能幫助到同樣初學Java的你~ (??????)?? &#x1f525; Java是什么&#xff1f;為什么這么火&#xff1f; Java不僅僅是一門編程語言&#xff0c;更…

三相電為什么沒零線也能通電

要理解三相電為什么沒零線也能通電&#xff0c;就要從發電的原理說起 1、弧形磁鐵中加入電樞&#xff0c;旋轉切割磁感線會產生電流 隨著電樞旋轉的角度變化&#xff0c;電樞垂直切割磁感線 電樞垂直切割磁感線&#xff0c;此時會產生最大電壓 當轉到與磁感線平行時&#xf…