git入門
git
1.git簡介
1.1 誰創建了git,為了什麼?
linux
的創始人在壯大linux
的時候需要收到各地上傳的程式碼,需要版本控制系統,最初有公司免費支援。後來社區有人試圖破解別人的系統,公司停用要求破解者道歉。然後大牛拒絕道歉,就自己寫了個源碼管理,就是現在的git
。- 總結:牛逼的人就是牛逼
1.2 git是什麼?
- 分散式版本管理系統
- 分散式:就是不管你身在何地,都可以通過電腦使用
git
管理你的文件 - 版本:我們在開發的時候,會有不同的版本。(就像你寫一篇文章、初稿、檢查、潤色,每一步都是一個版本)
- 管理系統:就是一個管理工具
- 分散式:就是不管你身在何地,都可以通過電腦使用
1.3 git的特點
- 版本控制:支援多人同時開發程式碼,解決找回歷史程式碼的問題。(可以使用git快樂多人運動,並且不用擔心因為版本更新出現問題無法找到歷史程式碼產生問題)
- 分散式:可以存儲在一個倉庫中,然後多台電腦可以同時在各個地方進行開發操作。
- 史上最大的同性交友網站:GitHub(技術就是用的人越多,就會發現更多的問題,然後修復後變得更加強大)
2.安裝配置
2.1 安裝配置
-
在
linux/ubuntu
上安裝sudo apt-get install git
-
在
windows
上安裝- 推薦使用中國源 //npm.taobao.org/mirrors/git-for-windows/
- 找到一個簡易的安裝版本
Git-2.25.0.rc2.windows.1-64-bit.exe
(個人使用的是帶exe
後綴的版本) - 簡單操作,直接重複點擊下一步,直至安裝完畢。
-
檢查
git
是否安裝好linux/ubuntu
上直接使用命令git
查看windows
點擊右鍵,看是否出現了兩個關於git
的操作命令
2.2 配置倉庫
-
指定管理的目錄
linux/ubuntu
上直接在需要管理的文件夾下使用終端輸入初始化命令windows
上在需要管理的目錄下點擊右鍵,然後點git bash here
輸入初始化命令
git init # 初始化命令
-
隱藏文件
.git
- 裡面存儲了大量關鍵資訊,請勿輕易修改或者刪除。
2.3 了解工作區
- 工作區是指我們剛才指定管理目錄下的區域,管理目錄下的所有文件。
- 文件的狀態分為兩種:
- 已管理,沒有修改並非新增的文件。(我習慣性的用一個非專業辭彙工作區靜態文件表示)
- 已修改或者新增的文件。(
modified
)
3.git簡單的操作
3.1 創建第一個文件並且提交到版本庫
- 第一次提交時:進行全局郵箱配置,否則會在提交版本庫的時候報錯。
git add 文件名 # 提交指定的文件到暫存區
git add . # 提交所有`modified`狀態文件到暫存區
git config --global user.email 配置郵箱
git config --global user.name 配置用戶名
git commit -m '版本資訊' # 提交暫存區的文件到版本庫
3.2 檢測|檢查
git status # 檢測文件狀態
git log # 查看當前日誌記錄
git reflog # 查看所有的日誌記錄
3.3 更新版本庫
- 有了第一個版本之後,我們後續的操作是在第一個版本的基礎上進行改動。
- 我們增加或修改的東西,會在當前版本的基礎下記錄下來,提交到版本庫生成新的版本。
- 新版本只會記錄改動|新增部分,另外會生成一個指針指向上一個版本的地方。(這個指針是我理解
git
抽象出來的,具體待考證!)
修改文件
git add . # 提交所有的修改到暫存區
git commit -m '版本資訊' # 提交暫存區內容到版本庫,生成新的版本
3.4 對比文件的不同
-
工作區與版本庫相同的文件對比
git diff HEAD -- 文件 # 顯示資訊用`+ -`區別各自獨有內容 # `+`表示工作區文件獨有內容 # `-`表示HEAD(當前使用版本)獨有內容
-
版本庫之間相同文件的比較
git diff HEAD HEAD~2 -- 文件 # 比較當前版本與前兩個版本之間的區別 # `+`當前版本的獨有內容 # `-`表示前兩個版本獨有的內容
4.git三大區域
4.1 工作區
- 參考
2.3
處內容 - 日常本地用於開發,可見的區域。(一般是指我們進行
git
管理的文件夾)
4.2 暫存區
- 介於工作區與版本庫之間的緩衝區
4.3 版本庫
- 保留所有已提交的版本
4.5 三大區域日常操作
- 工作區進行日常開發
- 開發完成後添加至暫存區
- 暫存區提交到版本庫
- 同時三個區域也可以進行回滾操作
5.回滾操作
5.1 從工作區動態到工作區靜態
git checkout
5.2 從暫存區回滾到工作區的動態
git reset HEAD
5.3 從版本庫回滾到暫存區
git reset --soft 版本號
5.4 從版本庫回滾到工作區動態
git reset --mix 版本號
5.5 從版本庫回滾到工作區靜態
git reset --hard 版本號
5.6 版本號怎麼查?
git reflog # 查詢版本資訊
# 結果開頭部分就是版本號
6.分支
6.1 什麼是分支?
- 我們的提交的新版本,會在之前版本基礎上僅保存改動(新增|修改|刪除)了的部分內容。
- 這些版本可以抽象成串在一條線上,我們一般把這個成為主支。(
master
是主支的默認名) - 而在某一個版本上,我們創建一個新的支線進行其他開發處理,就叫做分支。
- 形象的說明:工廠有一條主流水線,我們在某個節點可以拿主幹線的東西到其他的分流水線進行工作,工作完畢後將東西放回主流水線。
6.2 分支的特點
- 隔離環境,避免開發流程對主幹線產生不必要的污染。
- 分工協作,每個分支進行不同的工作,提高效率。
6.3 分支的基本操作
-
查看當前的分支
git branch
-
創建分支
git branch <name>
-
切換分支
git checkout <name>
-
快速創建並切換到分支
git checkout -b <name>
-
刪除分支
git branch -d <name>
6.4 合併分支
-
合併分支:將兩條支線的內容進行合併,並且生成新的版本。
git checkout <name> # 切換到要進行合併的分支 git merge <name1> # 將<name1>合併到<name>上
6.5 分支衝突
-
兩個分支對相同文件相同位置進行了不同的操作,提交到版本庫,然後進行合併的時候系統無法判斷保留哪一個修改。
-
實際開發中,每個部門或者不同的人在分支上進行操作會產生分支衝突。這個時候需要我們與產生分支衝突的協作對象商量,並手動解決分支衝突。
6.6 解決分支衝突
-
找到產生衝突的分支管理者,進行協商手動編寫更改衝突,重新提交新的版本。
git log --graph 查看帶有分支示意圖的日誌
-
有時候合併分支不會成功,但是它也不會產生衝突。
-
我們可以禁用
fast-forward
禁用快速合併進行提交git merge --no--ff -m '版本資訊' # 禁用快速提交
6.7 保存工作狀態
-
當我們編輯一半的時候,需要切換到其他分支工作,需要保存當前工作狀態,以便切換回來之後繼續工作。
git stash # 保存工作狀態 git stash list # 獲取保存的工作狀態 git stash pop # 恢復工作現場
7.GitHub
7.1 GitHub的作用
- 充當最大的同性交友平台
- 充當一個分散式的中央伺服器(我們之前的版本都是保存在本地)
- 多台計算器可以通過中央伺服器,進行程式碼的交換。
7.2 如何使用github
-
註冊登錄帳號
-
創建倉庫
-
添加
ssh
倉庫-
在電腦中生成
SSHKey
ssh-keygen -t ras -C "註冊郵箱"
-
到
user/adminstor
中找到文件.ssh/
下的id_rsa.pub
-
複製文件下的內容,粘貼到
github
的ssh
配置中
-
7.3 推送本地項目到github
-
推送時,若遠程倉庫不為空倉庫時
git pull --rabse origin master # 合併遠程倉庫與本地庫
-
一般推送
# 將我們的遠程地址加一個別名 git remote add origin //xxxx # 從本地推送到遠端倉庫地址 git push -u origin 需要推送的分支名稱 -u # 默認提交到origin地址的指定分支 # 不使用-u就是手動指定
7.4 下載遠程倉庫項目到本地
-
克隆程式碼
# 克隆程式碼(第一次本地沒有需要拉取的程式碼) git clone //xxxxxx (內部已經實現了 別名添加)
-
更新程式碼
# 更新程式碼 git pull origin dev # 上面更新程式碼相當於下面兩句 git fetch origin dev git merge orgin/dev
-
克隆出錯時,可嘗試下列程式碼
eval "$(ssh-agent -s)" ssh-add
7.5 上傳分支
git push origin 分支名稱
7.6 本地分支跟蹤遠程
git branch --set-upstream-to=origin/遠程分支 本地分支
7.7 從遠程分支拉取程式碼
git pull origin 分支名