1、安裝和設置用戶名和郵箱
# 配置相關信息
git config
git config --global user.name "wincharle"
git config --global user.email "wincharle@qq.com"
2、git工作圖解
image
- workspace:工作區
- index/stage:暫存區
- repository:倉庫區(或者本地倉庫)
- remote:遠程倉庫
3、創建版本庫
#當前目錄創建一個版本庫
git init
#新建一個目錄,并將其初始化為一個git代碼庫
git init [project-name]
#下載一個項目和它的整個代碼歷史
git clone [url]
4、增加文件到暫存區
#添加文件到暫存區,可以一次添加多個
git add file1 file2 ...
#添加文件夾到暫存區
git add [dir]
#添加當前文件夾下的所有文件到暫存區
git add
5、代碼提交到本地倉庫
#提交暫存區到倉庫區
git commit -m "message"
#提交暫存區指定文件到倉庫區
git commit file1 file2 ... -m "message"
6、文件修改查詢
#工作區狀態查看,查看哪些文件被修改
git status
#查看修改的具體內容
git diff
7、倉庫區版本控制git reset
git reset主要做兩件事:
- 修改倉庫區HEAD指針
- 根據參數--hard、--soft和--mixed選擇是否覆蓋緩存區和工作區,默認是mixed
# 默認情況下是覆蓋所有文件,如果想覆蓋一個文件,添加文件名
git reset --hard --mixed --soft [commit]
git reset HEAD [filename]
#HEAD指向當前版本,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實際是從版本庫里的文件代替工作區的版本
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
# 本地倉庫的內容推送到遠程倉庫,第一次Push添加-u
git push -u origin master
git push origin <branch>
NOTE: 如果遠程倉庫已經有內容,需要pull一下,并合并內容
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,更新緩存區和工作區
git checkout branch
- 從commit里檢出文件,重置緩存區和工作區
# 顯示的提供commit,重置緩存區和工作區
git checkcout commit -- filename
# 不提供commit,默認是緩存區
git checkout -- filename
2、分支合并
# 直接merge,但是有缺點
git merge branch
# 直接merge通過git log查看不到分支信息
git log --graph
# 提供參數--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:克隆節點的話,只會克隆master節點。
第2步:A和B需要在dev節點上開發,就必須將遠程分支下載到本地,可以通過checkout或者fetch
# checkout遠程分支
git checkout -b dev origin/dev
# fetch
git fetch origin 遠程分支名:本地分支名
第3步:A完成開發后push到遠程倉庫
git add ...
git commit ...
git push origin dev
第4步:B完成開發后也push到遠程倉庫,但是發生錯誤。原因是A和B提交的版本有沖突,需要先pull一下,然后本地合并后,解決沖突,再推送。
git pull origin dev
11、標簽管理(標簽和commit就類似于域名和IP地址)
# 給一個commit創建一個標簽,默認commit是HEAD
git tag <name>
git tag <name> <commit>
# 給標簽指定標簽信息
git tag -a <name> -m "blabla...."
# 查看所有標簽
git tag
# 查看一個標簽的信息
git show <tagname>
# 推送本地標簽
git push origin <tagname>
# 推送本地所有標簽
git push origin --tags
# 刪除本地標簽
git tag -d <tagname>
# 刪除遠程標簽
git push origin :refs/tags/<tagname>