介紹
是一個開源的分佈式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。 Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
git的功能
協同修改
多人並行不悖的修改服務器端的同一個文件。
數據備份
不僅保存目錄和文件的當前狀態,還能夠保存每一個提交過的歷史狀態。
版本管理
在保存每一個版本的文件信息的時候要做到不保存重複數據,以節約存儲空 間,提高運行效率。這方面 SVN 採用的是增量式管理的方式,而 Git 採取了文 件系統快照的方式。
權限控制
對團隊中參與開發的人員進行權限控制。
對團隊外開發者貢獻的代碼進行審覈——Git 獨有。
歷史記錄
查看修改人、修改時間、修改內容、日誌信息。
將本地文件恢復到某一個歷史狀態。
分支管理
允許開發團隊在工作過程中多條生產線同時推進任務,進一步提高效率。
版本控制工具分類
集中式版本控制工具
CVS、SVN、VSS……
分佈式版本控制工具
Git、Mercurial、Bazaar、Darcs……
git的優勢
大部分操作在本地完成,不需要聯網
完整性保證
儘可能添加數據而不是刪除或修改數據
分支操作非常快捷流暢(基於指針實現,因此創建分支很快)
與 Linux 命令全面兼容
基於行情來管理文件的變動
git本地分區
git本地分爲三個區域:
工作區—>暫存區---->本地庫
工作區:就是我們寫代碼的區域
暫存區:臨時存儲區
本地庫:本地的倉庫,如果要推送到遠端 需要先提交到本地庫
git常用命令
本地庫初始化
git add
此命令會在當前目錄創建一個.git的隱藏文件夾,存放git用來管理版本的文件
設置簽名
用來區分不同開發人員的身份,這裏設置的簽名和登陸遠程倉庫的賬號、密碼沒有任何關係。
設置系統級別的簽名,對當前系統有效;信息保存位置:~/.gitconfig 文件
git config --global user.name "zhangsan"
git config --global user.email "[email protected]"
設置項目級別簽名:項目級別的簽名只在當前項目有效;信息保存位置:./.git/config 文件
git config user.name "zhangsan"
git config user.email "[email protected]"
優先級
就近原則:項目級別優先於系統用戶級別,二者都有時採用項目級別 的簽名
如果只有系統用戶級別的簽名,就以系統用戶級別的簽名爲準
二者都沒有不允許
基本操作
git status 查看工作區、暫存區狀態
git add【fileName】 將工作區的"新建/修改"添加到暫存區
git commit -m "commit message" [fileName] 將暫存區的修改提交到本地庫
git commit -am “commit message” 直接將工作區的文件提交到本地庫
查看本地的歷史版本記錄
git log 多行顯示
git log --pretty=oneline 單行顯示
6d3042d38f0536de3b07e1d578f366ad62f8c625 (HEAD -> master) my third commit
2218863d35feca7e4d2984c6454577ed3afb730a my sencond commit.good.txt modify
fe04652cb9a0bf031ce444e3d1381f3f9fdd118d my first commit.create new file good.txt
git log --oneline
6d3042d (HEAD -> master) my third commit
2218863 my sencond commit.good.txt modify
fe04652 my first commit.create new file good.txt
git reflog 單行顯示,HEAD@{移動到當前版本需要多少步}
6d3042d (HEAD -> master) HEAD@{0}: commit: my third commit
2218863 HEAD@{1}: commit: my sencond commit.good.txt modify
fe04652 HEAD@{2}: commit (initial): my first commit.create new file good.txt
版本穿梭
基於索引值操作[推薦]
git reset --hard [局部索引值]
git reset --hard a6ace91
使用^符號:只能後退
git reset --hard HEAD^
注:一個^表示後退一步,n 個表示後退 n 步
使用~符號:只能後退
git reset --hard HEAD~n
注:表示後退 n 步
reset 命令的三個參數對比
--soft 參數
僅僅在本地庫移動 HEAD 指針
--mixed 參數
1在本地庫移動 HEAD 指針
2重置暫存區
--hard 參數
在本地庫移動 HEAD 指針
重置暫存區
重置工作區
文件比較
git diff [文件名]
將工作區中的文件和暫存區進行比較
git diff [本地庫中歷史版本] [文件名]
將工作區中的文件和本地庫歷史記錄比較
不帶文件名比較多個文件
分支操作
分支的好處
同時並行推進多個功能開發,提高開發效率
各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任 何影響。失敗的分支刪除重新開始即可。
創建分支
git branch [分支名]
查看分支
git branch -v
切換分支
git checkout [分支名]
合併分支
第一步:切換到接受修改的分支(被合併,增加新內容)上
git checkout [被合併分支名]
第二步:執行 merge 命令
git merge [有新內容分支名]
衝突的解決
第一步:編輯文件,刪除特殊符號
第二步:把文件修改到滿意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日誌信息"
注意:此時 commit 一定不能帶具體文件名
刪除本地分支
git branch -d 分支名
git branch -D 分支名 強制刪除
刪除遠程分支
git push origin --delete 分支名 或
git push origin :分支名
遠程庫操作
創建遠程庫地址別名
git remote -v 查看當前所有遠程地址別名
git remote add [別名] [遠程地址]
推送
git push [遠程庫別名] [分支名]
克隆
git clone 遠程地址
拉取
git pull [遠程庫地址別名] [遠程分支名]