Git
Git 是目前世界上最先進的分佈式版本控制系統(沒有之一)
作用
源代碼管理
好處
方便多人協同開發
方便版本控制
Git的誕生
作者是 Linux 之父:Linus Benedict Torvalds當初開發
Git 僅僅是爲了輔助 Linux 內核的開發(管理源代碼)
git 開發時間表
- git 的產生是 Linux Torvals 在無奈被逼的情況下創造的,我看了一下時間歷程:
- 2005 年 4 月3 日開始開發 git
- 2005 年 4 月 6 日項目發佈
- 2005 年 4 月 7 日 Git 開始作爲自身的版本控制工具
- 2005 年 4 月 18 日發生第一個多分支合併
- 2005 年 4 月 29 日 Git 的性能達到 Linux 預期
- 2005年 7 月 26 日 林納斯·託瓦茲 功成身退,將 Git 維護權交給 Git 另一個主要貢獻者 Junio C Hamano,直到被微軟收購
Git 迅速成爲最流行的分佈式版本控制系統,尤其是 2008 年,GitHub 網站上線了,它爲開源項目免費提供 Git 存儲,無數開源項目開始遷移至 GitHub,包括 jQuery,PHP,Ruby 等等
工作區暫存區和倉庫區
github gitlab命令一樣
工作區
- 對於
添加
、修改
、刪除
文件的操作,都發生在工作區中
暫存區
- 暫存區指將工作區中的操作完成小階段的存儲,是版本庫的一部分
倉庫區
- 倉庫區表示個人開發的一個小階段的完成
- 倉庫區中記錄的各版本是可以查看並回退的
- 但是在暫存區的版本一旦提交就再也沒有了
安裝git
sudo apt-get install git
如果想安裝最新版本國慶幾天我會寫一篇文章是Centos7 安裝git Python consul的文章
2.查看git安裝結果
git
配置個人信息
git config user.name '張三'
git config user.email '[email protected]'
查看文件狀態
- 紅色表示新建文件或者新修改的文件,都在工作區.
- 綠色表示文件在暫存區
-
新建的
login.py
文件在工作區,需要添加到暫存區並提交到倉庫區git status
將工作區文件添加到暫存區
# 添加項目中所有文件
git add .
或者
# 添加指定文件
git add login.py
將暫存區文件提交到倉庫區
commit
會生成一條版本記錄-
-m
後面是版本描述信息git commit -m '版本描述'
查看歷史版本
git log
或者
git reflog
推薦使用git reflog (詳細版包括刪除的commit記錄)
回退版本
-
方案一:
HEAD
表示當前最新版本HEAD^
表示當前最新版本的前一個版本HEAD^^
表示當前最新版本的前兩個版本,以此類推...HEAD~1
表示當前最新版本的前一個版本-
HEAD~10
表示當前最新版本的前10個版本,以此類推...git reset --hard HEAD^
方案二:當版本非常多時可選擇的方案
-
通過每個版本的版本號回退到指定版本
git reset --hard 版本號
推薦使用方案二
撤銷修改
- 只能撤銷工作區、暫存區的代碼,不能撤銷倉庫區的代碼
-
撤銷倉庫區的代碼就相當於回退版本操作
git checkout 文件名
撤銷暫存區代碼
# 第一步:將暫存區代碼撤銷到工作區
git reset HEAD 文件名
# 第二步:撤銷工作區代碼
git checkout 文件名
對比版本
-
對比版本庫與工作區
-
git diff HEAD -- login.py
推薦使用ide工具這個不清晰
對比版本庫
- 新加代碼
num3 = 30
,並add
到暫存區 -
git diff HEAD HEAD^ -- login.py
刪除文件:刪除文件分爲確定刪除和誤刪
-
在項目中新建
test.py
文件,並添加和提交到倉庫-
確定刪除處理:
# 刪除文件 rm 文件名 # git確定刪除文件,對比添加文件git add git rm 文件名 # 刪除後記錄刪除操作版本 git commit -m '刪除描述'
-
誤刪處理:撤銷修改即可
# 刪除文件
rm 文件名
# git撤銷修改
git checkout -- 文件名
克隆遠程倉庫的命令
git clone https://github.com/xxxxxxxx.git (第一次拉下來代碼)
配置用戶名和郵箱
git config user.name 'xx'
git config user.email '[email protected]'
在 push 的時候需要設置賬號與密碼,該密碼則是 github 的賬號與密碼
- 如果在每次 push 都需要設置賬號與密碼,那麼可以設置記住密碼
設置記住密碼(默認15分鐘): git config --global credential.helper cache 如果想自己設置時間,可以這樣做(1小時後失效): git config credential.helper 'cache --timeout=3600' 長期存儲密碼: git config --global credential.helper store
推薦使用ide工具配置 後面會演示
代碼衝突
- 提示:多人協同開發時,避免不了會出現代碼衝突的情況
- 原因:多人同時修改了同一個文件
- 危害:會影響正常的開發進度
- 注意:一旦出現代碼衝突,必須先解決再做後續開發
衝突代碼表現
解決衝突
- 原則:誰衝突誰解決,並且一定要協商解決
- 方案:保留所有代碼 或者 保留某一人代碼
-
解決完衝突代碼後,依然需要
add
、commit
、push
沒有具體解決方案 誰衝突誰解決 最簡單的就是你把自己代碼粘貼出來 然後重新pull一下在粘貼上去
########決不能修改同事代碼(會被打)
補充:
-
容易衝突的操作方式
- 多個人同時操作了同一個文件
- 一個人一直寫不提交
- 修改之前不更新最新代碼
- 提交之前不更新最新代碼
- 擅自修改同事代碼
-
減少衝突的操作方式
- 養成良好的操作習慣,先
pull
在修改,修改完立即commit
和push
- 一定要確保自己正在修改的文件是最新版本的
- 各自開發各自的模塊
- 如果要修改公共文件,一定要先確認有沒有人正在修改
- 下班前一定要提交代碼,上班第一件事拉取最新代碼
- 一定不要擅自修改同事的代碼
- 養成良好的操作習慣,先
標籤
- 當某一個大版本完成之後,需要打一個標籤
-
作用:
- 記錄大版本
-
備份大版本代碼
-
git tag -a 標籤名 -m '標籤描述'
推送到遠端
git push origin 標籤名
補充:刪除本地和遠程標籤
# 刪除本地標籤
git tag -d 標籤名
# 刪除遠程倉庫標籤
git push origin --delete tag 標籤名
分支
- 作用:
- 區分生產環境代碼以及開發環境代碼
- 研究新的功能或者攻關難題
- 解決線上bug
- 特點:
- 項目開發中公用分支包括master、dev
- 分支master是默認分支,用於發佈,當需要發佈時將dev分支合併到master分支
- 分支dev是用於開發的分支,開發完階段性的代碼後,需要合併到master分支
查看當前分支
git branch
創建並切換到dev分支
git checkout -b dev
設置本地分支跟蹤遠程指定分支(將分支推送到遠程)
git push -u origin dev
dev分支合併到master分支
- 提示:只有當dev分支合併到master分支成功
-
先切換到master分支
git checkout master
dev分支合併到master分支
git merge dev
推送合併分支操作到遠程倉庫
-
合併分支默認在本地完成,合併後直接推送即可
git push
只有當同事同步代碼成功,分支合併纔算成功
cd Desktop/zhangsan/test007/
git pull
git 命令大全
第一次拉下來代碼
git clone 網址
更新已經拉下來過得代碼
git pull
一次性拉下來分支代碼
git clone origin -b 分支名 網址
-
配置個人信息
-
git config user.name xxxx
-
git config user.email [email protected]
-
查看文件狀態
-
git status
-
建立文件追蹤
-
git add 文件名
-
git add . (建立所有文件追蹤)
-
將文件推送到工作區
-
git commit -m 描述信息(別瞎比寫不然會被打)
-
增添與提交合並命令
-
git commit -am 描述信息
-
推送到遠端
-
git push origin 分支名
-
查看歷史版本
-
git log
-
git reflog(推薦使用 可以看到刪除的commit信息)
-
回退版本(這裏不寫多命令上面帶圖的有詳細版)
-
git reset --HEAD版本號(推薦使用)
-
撤銷修改
-
只能撤銷工作區
-
git checkout 文件名
-
撤銷暫存區的代碼相當於回退版本
-
git reset HEAD 文件名
-
對比版本
-
git diff HEAD -- 文件名(推薦使用IDE工具裏面更詳細)
-
刪除文件(別記了 一般不用)
-
git rm 文件名
-
git commit 刪除信息描述
-
如果誤刪
-
git checkout -- 文件名
-
代碼衝突就不詳細解釋了上面寫的很詳細
-
標籤
-
打標籤
-
git tag -a 標籤 -m 描述信息
-
git push origin 標籤
-
分支
-
查看分支
-
git branch
-
切換分支 git checkout 分支名
-
創建並切換分支 git checkout -b 分支名
-
提交遠端
-
git push origin 分支名
使用流程
1 配置祕鑰
2 創建文件並使用 git clone 網址
3 拉下來代碼之後切換分支 git checkout 分支名
4 推到遠端 git push origin 分支名
使用ide 配置 網址
ctrl + k 一步 commit 加push