GIT 和 GITHUB
- 在學習之前我們要先要清楚幾個東西
- git 和 github 是兩個東西,不是一個東西
- 就像 java 和 javascript 一樣,是兩個東西
- 需要搞清楚幾個詞語的意思
- 本地:我自己的終端
- 遠端:在網絡那一頭的終端
- 倉庫:一個被 git 管理了的檔案夾
- 推送:把本地的内容上傳到遠端裡面
- 同步:讓遠端的内容和本地的内容保持一緻
什麼是 GIT
- git 官方名稱: 分布式版本管理器
- 私人解釋: 就是一個管理我們檔案夾的工具
- 隻不過可以保留所有的版本資訊
- 就是我們安裝一個軟體
- 然後用這個軟體來管理我們的一個檔案夾
- 這個檔案夾被 git 管理以後,我們可以對他進行各種操作
- 保證我們寫過的内容不會丢失
什麼是 GITHUB
- github 是一個網站,是一個我們托管項目的平台
- 是一個 世界級别 的大型網站
- 也就是說,我們寫的項目的 源碼 可以放在上面儲存,隻要我們不自己删除,不會丢失
- 就相當于百度雲
- 隻不過功能更加強大,上面都是開發人員(世界級别)
- 因為 github 隻接受 git 來上傳代碼,是以叫做 github
- 也就是說,我們可以通過 git 這個軟體來管理我們本地的檔案夾
- 并且可以把檔案夾裡面的代碼上傳到 github 儲存
- 也可以寫一個插件之類的工具,上傳到 github 上面讓其他開發者使用
- 也可以從 github 上找到其他開發者寫的插件之類的東西下載下傳使用
- 是以說,github 也是一個大型的 開源 的資源共享平台
GIT 使用
- 剛才我們說過,git 是一個管理我們檔案夾的工具
- 那麼我們就要先安裝工具,再使用工具管理我們的檔案夾
GIT 安裝
- 下載下傳 git 直接到官網下載下傳就可以
- git官網
- git下載下傳中心
- 找到和作業系統對應的版本就可以了
- 方法一: 打開官網,直接點選下載下傳
- 方法二: 打開下載下傳中心,選擇作業系統,選擇下載下傳版本
- 下載下傳好以後,直接輕按兩下進行安裝就行
- 一直下一步就可以,安裝再預設路徑就行
- 安裝完畢後檢測一下安裝是否成功
-
方法一: 打開 cmd 視窗,輸入指令檢查
# 檢測 git 是否安裝
$ git --version
- 出現版本号,說明安裝成功
- 方法二: 随便找個地方單機 滑鼠右鍵,出現下圖内容,說明安裝成功
-
- 安裝完畢,接下來我們就可以開始使用了
GIT 使用
- git 是一個軟體沒錯,但不是那種安裝了會再桌面出現一個圖示的軟體
- 而是一個需要在 指令行 進行操作的軟體
- 我們單機滑鼠右鍵,點選 Git Bash Here
- 會出現下圖内容
- 我們發現點開以後,就是一個 指令行視窗
- 其實就是給我們寫一些指令使用的,隻不過色彩鮮豔一點
- 使用 cmd 或者 powershell 視窗來運作 git 指令也可以
- 隻要是再終端運作就行
- OS 作業系統直接在 終端 中運作就行
- Git Bash Here 表示再目前目錄下運作 Git Base
- 是以,你在哪個檔案夾下點選的,那麼你出來的指令行視窗的目錄就是哪裡
- 我們就在指令行裡面使用 git 來管理我們的檔案夾
GIT 初始化
- 我們希望一個檔案夾被 git 管理的話,那麼就要在一個檔案夾下進行 git 初始化
- 找到一個希望被 git 管理的檔案夾
- 在檔案夾内單擊滑鼠右鍵,點開 Git Bash Here
-
輸入指令
# git 初始化的指令
$ git init
- 然後檔案夾内會多一個 .git 的檔案夾(這個檔案夾是一個隐藏檔案夾)
- 這個時候,我的這個 git_demo 檔案夾就被 git 管理了
- git 不光管理這一個檔案夾,包括所有的子檔案夾和子檔案都會被管理
- 注意: 隻有當一個檔案夾被 git 管理以後,我們才可以使用 git 的功能去做版本管理
- 也就是說,我們必須要把我們電腦中的某一個檔案夾授權給 git
- git 才能對這個檔案夾裡面的内容進行各種操作
- 而 git init 就是在進行這個授權的操作
GIT 暫存區
- 當一個檔案夾被 git 管理了以後
- git 就會對目前檔案夾進行 “分區”
- 會分為三個區域
- 工作區:我們書寫的源碼就在工作區裡面
- 暫存區:把我們想要存儲的内容放在暫存區
- 曆史區:把暫存區裡面的内容拿出來形成一個曆史版本
- 也就是說,我們需要把想成為一個版本的代碼
- 要先放在暫存區
- 然後才能在暫存區裡面放到曆史去
- 才可以生成一個版本儲存下來
- 檢視git管理的檔案夾的狀态
- git status
- 我們要放入暫存區,要使用 git add 指令
-
把單獨一個檔案放在暫存區
# 把檔案夾下的 index.txt 文本放在暫存區
$ git add index.txt
-
把單獨一個檔案夾放在暫存區(暫存區不能存放空檔案夾)
# 把檔案夾下的 ceshi檔案夾 放在暫存區
$ git add ceshi/
-
把所有檔案都放在暫存區
# 把檔案夾下所有的内容都放在暫存區
$ git add --all
# git add --all 有一個簡單的寫法 $ git add .
- 全部存放的時候使用上面兩個指令哪個都行
-
把已經放在暫存區的内容在拉回到工作區
# 拉回暫存區的 index.txt 檔案
$ git reset HEAD – index.txt
# 拉回暫存區的 ceshi 檔案夾 $ git reset HEAD -- ceshi/ # 拉回暫存區的 所有檔案 $ git reset HEAD -- .
- 注意: – 兩邊都有空格,拉回所有檔案的時候有個 .
- 暫存區,隻是幫我們暫時存放内容,我們删除了還是會丢的
- 要想幫我們儲存下來,那麼還需要把暫存區的内容放到曆史區
GIT 曆史區
- git 的曆史區,就是把我們暫存區裡面的檔案變成一個曆史版本
- 當一些檔案形成一個版本的時候,就會被一直記錄下來了
- 向曆史區裡面添加内容的時候,必須保證 暫存區 有内容
- 因為曆史區就是把暫存區裡面的内容收錄進去
-
向曆史區添加内容使用 git commit -m “做一個簡單的說明”
# 把暫存區的内容放到曆史區之前需要先登入
git config --global user.name “YOUR-NAME”
git config --global user.email “YOUR-EMAIL-ADDRESS”
# 把暫存區的内容放到曆史區
$ git commit -m “我是第一個版本”
- 我們一定要寫一個簡單的說明
- 因為當我們的曆史版本多了以後,我們自己也記不住哪個版本做了哪些修改
- 是以有個簡單的說明會好很多
- 這個時候曆史區就有了我們的第一個版本
-
我們使用 git log 這個指令檢視版本資訊
# 檢視目前曆史區版本資訊
$ git log
- commit:這一個版本的版本編号
- Author:作者
- Date:本次版本的記錄時間
- 後面的内容就是我剛才送出的時候寫的說明
- 接下來我們對檔案夾内的内容進行一些修改,然後再次建立一個曆史版本
- 對 index.txt 中的文本内容進行修改
- 從 hello world 改變成 你好 世界
- 然後我們再次列印日志看一下
- 我們發現,日志資訊變成了兩條,也就是我們存在着兩個版本的内容了
- 放在曆史區的内容,理論上就丢不了了
- 現在我們可以把我們本地工作區中的内容給删除了,删除以後我們進行曆史回退
-
我們使用 git reset --hard 版本編号 進行曆史回退
# 回退到第一次送出的版本
$ git reset --hard ce0c17f7a703c6847552c7aaab6becea6f0197f2
# 回退到第二次送出的版本 $ git reset --hard abb2c4f12566440e04bc166c3285f855a37a3bb2
- 這個時候我們就可以來回來去的玩我們的曆史記錄了
GIT 儲存和忽略檔案
- .gitkeep
- 就是為了保留白檔案夾使用的
- 隻有字尾沒有名字
- .gitignore
- 表示在 git 管理的檔案夾中忽略哪些東西
- 直接寫在一個和 .git 同級的檔案夾下
- index.html忽略一個指定的檔案
- /css 忽略一個指定的檔案夾
-
*.css忽略指定字尾的檔案
GIT 推送
- 我們的所有内容已經全部保留在了本地曆史區
- 理論上是不會丢失了
- 但是如果把檔案夾删除了,還是沒有了
- 是以我們要使用 git 把我們所有的内容推送到 github 上面儲存起來
- 那麼就本地檔案夾就算删除了,那麼遠端上面還有一份,還可以拿回來使用
- 是以我們現在就要把本地内容推送到遠端
- 這個時候我們接需要一個 github 的賬号了
- 先去 github官網 注冊一個賬号
開辟一個遠端倉庫
- 有了 github 賬号以後
- 我們就登入 github 網站,開辟一個遠端倉庫
- github 的遠端也是以一個倉庫一個倉庫的形式來儲存代碼
- 我們可以在一個 github 上儲存很多的項目
- 隻要一個項目一個倉庫就可以了
- 按照下面步驟開辟倉庫
- 先點選建立倉庫
- 按照要求填寫内容
- 出現下圖表示建立倉庫成功
- 現在我們的遠端倉庫建立完畢了,我們就要把我們的項目代碼整個上傳了
添加倉庫位址
- 接下來,要使用 git 上傳代碼了
- 我們先要告訴 git 上傳到哪裡
- 也就是給 git 添加一個上傳的位址
- 我們還是來到我們的項目檔案夾
-
使用 git remote add origin 倉庫位址 來添加
# 在項目檔案夾下打開 git base
# 添加倉庫位址
$ git remote add origin https://github.com/guoxiang910223/ceshi2.git
- remote:遠端的意思
- add:添加的意思
- origin:是一個變量名(就是指代後面一長串的位址)
上傳
- 上傳到哪裡的位址我們已經添加好了
- 接下來就是上傳内容了
- 上傳要保證 曆史區 裡面有内容
- 上傳的過程會把 曆史區 裡面所有的内容上傳到遠端
-
我們使用 git push 指令來上傳
# 上傳内容
$ git push -u origin master
# 表示把内容上傳到 origin 這個位址
# master 是上傳到遠端的 master 分支
- push 向遠端推送
- -u 是我們第一次的使用用到了,是為了記錄一下使用者名和密碼
- 下次上傳的時候就不需要再寫了
- origin 推送的位址
- master 主要分支
- 第二次上傳
- 第二次上傳的時候,因為有剛才的記錄,就不需要再寫 origin 和 master 了
- 會預設傳遞到 origin 這個位址的 master 分支上
-
除非你要傳遞到别的分支上的時候再進行書寫
# 第二次上傳
$ git push
- 到這裡,就完成了一次 git 推送
- 這個時候本地的檔案夾就真的可以删除了
- 因為遠端有一份我們的内容,本地的删除了,可以直接把遠端的拉回來就行
GIT 分支
- git 分支,就是我們自己把我們的整個檔案夾分成一個一個獨立的區域
- 比如我在開發 登入 功能的時候,可以放在 login 分支下進行開發
- 開發 清單 功能的時候,可以放在 list 分支下進行開發
- 大家互不幹擾,每一個功能都是一個獨立的功能分支
- 這樣開發就會好很多
- git 在初始化的時候,會自動生成一個分支,叫做 master
- 是表示主要分支的意思
- 我們就可以自己開辟出很多獨立分支
-
開辟一個分支使用 git branch 分支名稱 指令
# 開辟一個 login 分支
$ git branch login
-
檢視一下目前分支情況
# 檢視目前分支情況
$ git branch
- 會看到,目前有兩個分支了
- 一個是 master,一個是 login
- 前面有個 * 号,并且有高亮顯示的,表示你目前所處的分支
- 我們對 登入 功能的開發要移動到 login 分支去完成
-
我們切換所處分支使用 git checkout 分支名稱
# 切換到 login 分支
$ git checkout login
- 然後我們在整個分支上進行 登入 功能的開發
- 開發完畢以後,我們就在目前分支上進行送出
- 送出以後我們進行分支切換
- 發現 master 上面還是最初始的狀态
- 而 login 分支上有我們新寫的 登入 功能的代碼
- 我們按照分支把所有功能都開發完畢了以後
- 隻要把所有代碼都合并到 master 主分支上就行了
- git 的合并分支,隻能是把别的分支的内容合并到自己的分支上
-
使用的指令是 git merge
# 切換到 master 分支
$ git checkout master
# 把 login 的内容合并到自己的分支 $ git merge login #儲存并退出 $ :wq
- 這個時候,我們剛才在 login 上開發的東西就都來到了 master 主分支上
- 如果是有多個分支的話,那麼所有的最後都合并到 master 分支上的時候
- 我們的主分支上就有完整網站的所有頁面
- 各個分支上都是單獨的頁面和功能
- 這個時候我們開辟的分支就沒有什麼用了,就可以删除分支了
- 先切換到别的分支(不能自己删除自己)
-
使用指令 git branch -d 分支名稱 來删除
# 先切換到别的分支
$ git checkout master
# 删除 login 分支 $ git branch -d login
常用的分支命名
- 我們的分支命名也要規範一些
- 我們有一些分支名稱大家都預設是有特殊意義的
- 比如我們之前的寫的 login 分支就是不規範的分支名稱
- 而且也是不規範的分支操作
- 常見的分支名稱
- master:主分支,永遠隻存儲一個可以穩定運作的版本,不能再這個分支上直接開發
- develop: 主要開發分支,主要用于所用功能開發的代碼合并,記錄一個個的完整版本
- 包含測試版本和穩定版本
- 不要再這個分支上進行開發
- feature-xxx:功能開發分支,從 develop 建立的分支
- 主要用作某一個功能的開發
- 以自己功能來命名就行,例如 feature-login / feature-list
- 開發完畢後合并到 develop 分支上
- feature-xxx-fix: 某一分支出現 bug 以後,在目前分支下開啟一個 fix 分支
- 解決完 bug 以後,合并到目前功能分支上
- 如果是功能分支已經合并之後發現 bug 可以直接在 develop 上開啟分支
- 修複完成之後合并到 develop 分支上
- hotfix-xxx: 用于緊急 bug 修複
- 直接在 master 分支上開啟
- 修複完成之後合并回 master
GIT 克隆
- git 克隆是指把遠端倉庫裡面的内容克隆一份到本地
- 可以克隆别人的 公開 的倉庫,也可以克隆自己的倉庫
- 克隆别人的倉庫,我們隻能拿下來用,修改後不能從新上傳
- 克隆自己的倉庫,我們修改後還可以再次上傳更新
- 我們先找到一個别人的倉庫,或者自己的倉庫(這裡以 jQuery 的倉庫為例)
- 複制好位址以後,選擇一個我們要存放内容的檔案夾(我這裡以桌面為例)
- 直接在想存放内容的位置打開 git base
-
輸入克隆指令 git clone 倉庫位址
# 直接克隆倉庫
$ git clone https://github.com/jquery/jquery.git
- 等待一段時間
- 你就會發現你的檔案夾裡面多了一個叫做 jquery 的檔案夾
- 裡面就是人家倉庫的所有内容
GIT 下拉
- 不管是你克隆下來的倉庫還是别的方式弄得本地倉庫
- 當人家的代碼更新以後,你想獲得最新的代碼
- 我們不需要從新克隆
- 隻要拉取一次代碼就可以了
-
直接在項目檔案夾裡面使用指令下拉
# 拉取遠端最新代碼
$ git pull
- 這樣一來,你本地的倉庫就可遠端的倉庫同步了
GIT 沖突
- git 沖突是指在我們的上傳過程中
- 本地的版本和遠端的版本不一緻導緻的
- 這個時候隻要先使用 git pull 拉取回來
- 讓本地和遠端保持一緻
- 然後再從新上傳就好了
- 但是 git pull 相對不安全,因為會自動和本地内容合并
-
我們也可以選擇使用 git fetch
# 使用 fetch 擷取遠端最新資訊并開辟一個臨時分支
$ git fetch origin master:tmp
# 将目前分支和臨時分支的内容進行對比 $ git diff tmp # 再選擇合并分支内容 $ git merge tmp