1、安裝和設(shè)置用戶名和郵箱
# 配置相關(guān)信息
git config
git config --global user.name "wincharle"
git config --global user.email "wincharle@qq.com"
2、git工作圖解

image
- workspace:工作區(qū)
- index/stage:暫存區(qū)
- repository:倉庫區(qū)(或者本地倉庫)
- remote:遠程倉庫
3、創(chuàng)建版本庫
#當(dāng)前目錄創(chuàng)建一個版本庫
git init
#新建一個目錄,并將其初始化為一個git代碼庫
git init [project-name]
#下載一個項目和它的整個代碼歷史
git clone [url]
4、增加文件到暫存區(qū)
#添加文件到暫存區(qū),可以一次添加多個
git add file1 file2 ...
#添加文件夾到暫存區(qū)
git add [dir]
#添加當(dāng)前文件夾下的所有文件到暫存區(qū)
git add
5、代碼提交到本地倉庫
#提交暫存區(qū)到倉庫區(qū)
git commit -m "message"
#提交暫存區(qū)指定文件到倉庫區(qū)
git commit file1 file2 ... -m "message"
6、文件修改查詢
#工作區(qū)狀態(tài)查看,查看哪些文件被修改
git status
#查看修改的具體內(nèi)容
git diff
7、倉庫區(qū)版本控制git reset
git reset主要做兩件事:
- 修改倉庫區(qū)HEAD指針
- 根據(jù)參數(shù)--hard、--soft和--mixed選擇是否覆蓋緩存區(qū)和工作區(qū),默認(rèn)是mixed
# 默認(rèn)情況下是覆蓋所有文件,如果想覆蓋一個文件,添加文件名
git reset --hard --mixed --soft [commit]
git reset HEAD [filename]
#HEAD指向當(dāng)前版本,HEAD^指向上一個版本
git reset --hard HEAD^
#通過版本號
git reset --hard commit_id
#通過git log查看提交歷史
git log
#通過git reflog查看歷史命令,以確定回到未來哪個版本
git reflog
8、刪除文件
#從版本庫中刪除文件
git rm file
git commit -m "remove file"
#誤刪文件,checkout實際是從版本庫里的文件代替工作區(qū)的版本
git checkout -- file
9、遠程倉庫
1、添加遠程庫
# 增加一個姓的遠程倉庫,并命名
git remote add [name] [url]
# origin就是https://github.com/wincharle/learngit這個倉庫
git remote add origin https://github.com/wincharle/learngit
# 本地倉庫的內(nèi)容推送到遠程倉庫,第一次Push添加-u
git push -u origin master
git push origin <branch>
NOTE: 如果遠程倉庫已經(jīng)有內(nèi)容,需要pull一下,并合并內(nèi)容
git pull origin master --allow-unrelated-histories
2、克隆遠程庫
# 克隆倉庫
git clone https://github.com/wincharle/test
10、分支
# 查看分支
git branch
# 新建分支
git branch <branchname>
# 切換分支
git checkout <branchname>
# 合并分支
git merge <branchname>
# 刪除分支
git branch -d <branchname>
1、checkout(檢出)
- 檢出分支,HEAD指向branch,更新緩存區(qū)和工作區(qū)
git checkout branch
- 從commit里檢出文件,重置緩存區(qū)和工作區(qū)
# 顯示的提供commit,重置緩存區(qū)和工作區(qū)
git checkcout commit -- filename
# 不提供commit,默認(rèn)是緩存區(qū)
git checkout -- filename
2、分支合并
# 直接merge,但是有缺點
git merge branch
# 直接merge通過git log查看不到分支信息
git log --graph
# 提供參數(shù)--no-ff,會有一次commit
git merge --no-ff -m "merge message"
3、分支管理策略
A和B同時工作,有兩個分支master和dev。
第1步:2人同時把遠程倉庫克隆到本地
git clone https://github.com/wincharle/learngit
NOTE:克隆節(jié)點的話,只會克隆master節(jié)點。
第2步:A和B需要在dev節(jié)點上開發(fā),就必須將遠程分支下載到本地,可以通過checkout或者fetch
# checkout遠程分支
git checkout -b dev origin/dev
# fetch
git fetch origin 遠程分支名:本地分支名
第3步:A完成開發(fā)后push到遠程倉庫
git add ...
git commit ...
git push origin dev
第4步:B完成開發(fā)后也push到遠程倉庫,但是發(fā)生錯誤。原因是A和B提交的版本有沖突,需要先pull一下,然后本地合并后,解決沖突,再推送。
git pull origin dev
11、標(biāo)簽管理(標(biāo)簽和commit就類似于域名和IP地址)
# 給一個commit創(chuàng)建一個標(biāo)簽,默認(rèn)commit是HEAD
git tag <name>
git tag <name> <commit>
# 給標(biāo)簽指定標(biāo)簽信息
git tag -a <name> -m "blabla...."
# 查看所有標(biāo)簽
git tag
# 查看一個標(biāo)簽的信息
git show <tagname>
# 推送本地標(biāo)簽
git push origin <tagname>
# 推送本地所有標(biāo)簽
git push origin --tags
# 刪除本地標(biāo)簽
git tag -d <tagname>
# 刪除遠程標(biāo)簽
git push origin :refs/tags/<tagname>