文章目錄
- Git分布式版本控制工具
- 版本控制器的方式
- 常用命令
- 遠程倉庫
- Tip
Git分布式版本控制工具
? Git是一個開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。
? Git是分布式的,Git不需要有中心服務器,我們每臺電腦擁有的東西都是一樣的。我們使用Git并且有個中心服務器,僅僅是為了方便交換大家的修改,但是這個服務器的地位和我們每個人的PC是一樣的。我們可以把這個服務器當作一個開發者的PC就可以,就是為了大家代碼容易交流不關機用的。沒有這個服務器大家一樣可以工作,只不過“交換“修改不方便而已。
版本控制器的方式
集中式版本控制工具
? 集中式版本控制工具,版本庫是集中存放在中央服務器的,team里每個人work時從中央服務器下載代碼,是必須聯網才能工作,局域網或互聯網。個人修改后提交到中央版本庫。如:SVN、CVS
分布式版本控制工具
? 分布式版本控制系統沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣工作的時候,無需要聯網了,因為版本庫就在你自己的電腦上。多人協作只需要各自的修改推送給對方,就能互相看到對方的修改了。如:Git
常用命令
Git工作流程:
-
clone:從遠程倉庫中克隆代碼到本地倉庫
-
checkout:從本地倉庫中檢出一個倉庫分支然后進行修改
-
add:在提交前先將代碼提交到暫存區
-
commit:提交到本地倉庫,本地倉庫中保存修改的各個歷史版本
-
fetch:從遠程庫抓取到本地倉庫,不進行任何的合并動作
-
pull:從遠程庫拉到本地庫,自動進行合并(merge),然后放到工作區,相當于
fetch+merge
-
push:將代碼推送到遠程倉庫
-
git config
:配置信息# 設置用戶信息 git config --global user.name "userName" git config --global user.email "Email"# 查看配置信息 git config --global user.name git config --global user.email
-
alias
:配置命令別名,在~/.bashrc
中添加配置,修改完成后需要執行source ~/.bashrc
# 部分windows系統不允許用戶創建.開頭的文件,可以在gitBash中執行 touch ~/.bashrc# 在~/.bashrc中添加內容,輸出git提交日志 alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
-
git init
:初始化當前目錄為一個git倉庫,執行成功后會多個.git
文件夾 -
git status
:查看修改狀態(暫存區、工作區)
-
git add
:添加工作區一個或多個文件的修改到暫存區git add 單個文件名 | 通配符# 將所有修改加入到暫存區 git add .
-
git commit
:提交暫存區內容到本地倉庫的當前分支,git commit -m '注釋內容'
-
git log
:查看提交日志,配置別名git-log
git log [option]--all 顯式所有分支--pretty=oneline 將提交信息顯示為一行--abbrev-commit 使得輸出的commitId更簡短--graph 以圖的形式顯示
-
git reset
:版本回退# 查看已經刪除的記錄,可以看到已經刪除的提交記錄 git reflog# 版本切換,commitId可以通過git log查看 git reset --hard commitId
-
git branch
:查看本地分支,使用分支意味著可以把工作從開發主線上分離開來進行Bug修復和開發新功能,以免影響主線-
master(生產)分支:線上分支,主分支,中小規模項目作為線上運行的應用對應的分支
-
develop(開發)分支:是從master創建的分支,一般作為開發部分的主要開發分支,如果沒有其它并行開發不同期上線要求,都可以在此版本進行開發,階段開發完成后,需要合并到master分支,準備上線
-
feature/xxx分支:從develop創建的分支,一般是同期并行開發,但不同期上線時創建的分支,分支上研究任務完成后合并到develop分支
-
hotfix/xxx分支:從master派生的分支,一般作為線上bug修復使用,修復完成后需要合并到master、test、develop分支
-
test(測試)分支
-
pre(預上線)分支
# 查看本地分支 git branch# 創建本地分支 git branch 分支名# 切換分支 git checkout 分支名# 切換到一個不存在的分支,創建并切換 git checkout -b 分支名# 合并分支,一個分支上的提交可以合并到另一個分支 git merge 分支名# 刪除分支,不能刪除當前分支,只能刪除其它分支 # 刪除時需要做各種檢查 git branch -d 分支名 # 強制刪除,不做任何檢查 git branch -D 分支名
-
-
沖突解決:當兩個分支上對文件的修改可能會存在沖突,如同時修改了同一文件的同一行,需要手動解決沖突,步驟如下:
- 處理文件中沖突的地方
- 將解決完沖突的文件加入暫存區(add)
- 提交到倉庫(commit)
遠程倉庫
-
git remote add
:添加遠程倉庫,此操作是先初始化本地庫,然后與已創建的遠程庫進行對接git remote add <遠端名稱> <倉庫路徑>遠端名稱:默認是origin,取決于遠程服務器設置倉庫路徑:從遠端服務器獲取此URL git remote add origin git@gitee.com:lshibo/local-git-store.git
-
git remote
:查看遠程倉庫 -
git push
:推送到遠程倉庫庫git push [-f] [--set-upstream] [遠端名稱 [本地分支名][:遠端分支名]]-f 強制覆蓋--set-upstream 推送到遠端的同時并且建立起和遠端分支的關聯關系# 如果遠端分支名=本地分支名,則可以只寫本地分支 git push origin master# 如果當前分支已經和遠端分支關聯,則可以省略分支名和遠端名 # 將master分支推送到已關聯的遠端分支 git push
-
git branch -vv
:查看本地分支與遠程分支的關聯關系 -
git clone
:clone遠端倉庫到本地git clone <倉庫路徑> [本地目錄]本地目錄可以省略,會自動生成一個目錄
-
git fetch [remote name] [branch name]
:將倉庫里的更新都抓取到本地,不會進行合并。如果不指定遠端名稱和分支名,則抓取所有分支 -
git pull [remote name] [branch name]
:拉取指令就是將遠端倉庫的修改拉到本地并自動進行合并,等同于fetch+merge。如果不指定遠端名稱和分支名,則抓取所有并更新當前分支。 -
解決合并沖突:先拉去遠程倉庫,經過合并后才能推送到遠端分支
Tip
-
GitBash亂碼問題
- 打開GitBash執行
git config --global core.quotepath false
命令 - 在
${git_home}/etc/bash.bashrc
文件最后添加export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8"
- 打開GitBash執行
-
添加文件到忽略列表:在工作目錄創建
.gitignore
文件(文件名稱固定),列出要忽略的文件模式# no .a files *.a # but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the TODO file in the current directory, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .pdf files in the doc/ directory doc/**/*.pdf
參考:黑馬