今天差不多從中午開始下午一點才開始學的,把git學了一大半了,還好任務不是很多,但是我上午用的時間挺值的,因為我去搞了個cnblogs的背景主題,就是你們現在所看到的這套,這個沒搞明白有一通研究的,只不過現在已經搞熟悉了,添加那些參數,不得不說挺強大的,這個自己編輯頁面的功能,我最滿意的這套主題,是 ...
今天差不多從中午開始下午一點才開始學的,把git學了一大半了,還好任務不是很多,但是我上午用的時間挺值的,因為我去搞了個cnblogs的背景主題,就是你們現在所看到的這套,這個沒搞明白有一通研究的,只不過現在已經搞熟悉了,添加那些參數,不得不說挺強大的,這個自己編輯頁面的功能,我最滿意的這套主題,是自適應,以前用的預設的那個手機根本看不了,沒想到現在這個居然還可以自適應對手機用戶簡直福音。
然後第二件事情,今天開始用typora了,感覺還可以,不知不覺一大版筆記,都頭頭是道的,我後面就用Markdown編輯器傳上來了,因為順便可以把我的筆記一起傳上來,再配合點我做的效果演示。
搞了半天的typora自動上傳圖片到博客園裡來那個Python腳本,終於搞好了,以後就方便了我的筆記自動傳上來。
1.關於版本控制
- 版本控制軟體
即負責管理文件版本的軟體,記錄文件的版本變化
- 好處
以命令的形式,操作簡便等
- 分散式版本控制系統
客戶端是伺服器的完整備份,並不是只保留最新版本,而是會把伺服器的所有版本下下來,這樣的話,如果伺服器數據丟失,可以從任意一臺客戶端恢復
2.git基本概念
- 什麼是git
開源的分散式版本控制系統,特點:項目越大越複雜,協同開發者越多越能體現git的高性能和高可用性
- 特性
- svn基於差異比較:就是當更新一次版本的時候,不是去記錄最新的版本而是將最新的版本的差異點記錄下來
- 記錄快照
git裡面的記錄快照分為兩種,一種是版本變化了會在原文件上對更新的版本做一個備份,如果沒有更新就直接做出一個鏈接指向源文件,如下圖,虛線為沒有更新,實現表示更新了
其實這個快照就類似於虛擬機裡面的快照,你每建立一次快照是不是因為你做出了一些操作想保存在這裡,每次快照都是完整的體系所以占用洗盤空間大
- 近乎所有操作都是本地執行,只需要訪問本地文件和資源,因為前面說過git是分散式控制系統,客戶端和伺服器的資源是一樣的,你有三個版本我也有三個版本,而且這一特性也決定了我們在斷網後照樣可以版本管理 ,如果斷網後你把v3升級到了v4,你只管升級你的,伺服器也檢測不到因為斷網了,當我們聯網後會把記錄同步到雲端的
- git三個區域(工作區、暫存區、git倉庫)
當你在寫代碼的時候,代碼的目錄就是一個工作區;當你把代碼寫完一個功能後可以暫時放到暫存區;最後全部完成將其放到git倉庫
- git三狀態
- git基本工作流程
寫代碼,然後將寫好的功能放在暫存區裡面暫存,此時就已經過了已修改、已暫存狀態,繼續回去完善邏輯,當把所有功能實現後以快照的形式提交到git倉庫裡面
3.安裝配置git
- 安裝後檢驗查看右鍵菜單
- 配置
設置用戶名和郵箱地址:
註意使用了global選項後說明這個命令只需要運行一次即可永久生效,後面就不用這個命令了
- 全局配置
上面的命令執行後其實會在c盤/users/用戶名文件夾/.gitconfig這裡面顯示,這就是git的全局配置文件只要配置在這裡面的配置一次永久生效。
- 檢查配置信息
也可以使用命令快速查看
- 獲取幫助信息(不用聯網)
git help 我們的命令
eg :git help config
或者 git config -h
4.git基本操作
- 獲取git倉庫的兩種方式
-
將一個本地目錄轉換為git倉庫
在當前目錄下右鍵git Bash,輸入git init。即可初始化一個倉庫,當前目錄下會有一個.git的隱藏起來的目錄,他就是當前項目的git倉庫,裡面包含了一些初始化的必要文件
-
從其他伺服器克隆一個git倉庫
- 工作區中四種狀態
分為兩大類
一類是未被git管理的:那就會有未跟蹤狀態(在git上一次提交之前沒有這個文件,也就是新創建的)
一類是已被git管理的:未修改(工作區里的內容和git倉庫內容一致)、已修改(工作區裡面的內容和git倉庫內容不一樣)、已暫存(工作區修改的文件已放入暫存區,準備進入已提交狀態)
註意:git操作的終極結果為:讓工作區的文件都處於“未修改”狀態
- 檢查文件狀態
git status(輸出的結果叫狀態報告)
關鍵字:Untracked files 表示未跟蹤狀態
以精簡方式顯示文件狀態:git status -s
??表示未跟蹤
- 跟蹤新文件
git add 這個文件
committed:新增了這個文件的管理並且放到了暫存區,committed表示暫存區
精簡版為A開頭
- 提交更新
git commit 或者 git commit -m 可以對這個提交成功後作進一步的描述
這個就表示未修改狀態,沒有任何文件需要提交了
- 對已提交的文件進行修改
當我們把已經提交到倉庫的index.html又拿到工作區上來修改,這個時候去status會顯示modified,簡寫版為M這就是已修改狀態
- 暫存已修改的文件
再次運行git add即可 該命令可以吧未跟蹤、已修改的文件放到暫存區
註意:未跟蹤放到暫存區為A開頭,已修改放到暫存區還是modified,還是M但是沒放之前為紅色,現在為綠色
- 撤銷對文件的修改
將工作區修改的內容還原成倉庫裡面的內容,所有修改都會丟失且無法恢復,危險性高
git checkout -- index.html
- 向暫存區一次性添加多個文件
git add .
今後開發這個命令用的比較多
- 取消暫存文件
從暫存區移出一些文件
git reset HEAD 要移出的文件名稱
全部移出出去 git reset HEAD .
-
移除文件
- 從git倉庫和工作區都移除
git rm -f index.js
- 只從git倉庫移除,保留工作區中的
git rm --cached index.css
-
忽略文件
一般有些文件是不需要納入git的管理當中的,也不希望出線在未跟蹤列表裡面。
創建一個.gitignore的配置文件(這個文件是可以上傳的)
規範如下:
-
# 開頭都是註釋
-
/ 結尾是目錄
-
/ 開頭防止遞歸
-
!開頭表示取反
-
glob模式指簡化了的正則:
- 例子
註意:/開頭表示遞歸,這裡的意思是只需略當前目錄下todo文件夾,而不忽略其他目錄下todo文件夾,這就是遞歸;
倒數第二個:只是忽略這個目錄下的txt文件,但是不會忽略這個目錄下的子目錄下的txt文件
- 查看提交歷史
git log
git log -2 顯示最新的兩條
git log -2 --pretty=oneline在一行上展示最近的兩條
git log -2 --pretty=format:“%h | %an | %ar | %s“ 在一行上展示最近的兩條並自定義輸出格式
%h表示提交的唯一標識 %an表示作者名字 %ar作者修訂日期 %s提交說明
- 回退到指定版本
註意:commitID為剛纔說的唯一標誌符,沒有<>符號;回退到前面的版本後你查看提交歷史就是當時那個時候的提交歷史,想要查看所有的包括在他之後的需要輸入第三條命令