改变你的想法,你就改变了自己的世界。——文森特·皮尔
文章目录
Git简介
Git是目前比较流行的分布式版本控制系统之一,能够记录文件的每次修改,还实现了多人并行开发。
Git组成
- 工作区(用户能开到的文件)
- 暂存区
- 本地仓库(.git)
Git安装
Linux系统
Mac OS系统
Windows系统
创建本地仓库
# 1. 创建项目文件夹
$ mkdir my-project
# 2. 进入项目文件夹
$ cd my-project
# 3. 初始化 .git
$ git init
# 4. 查看 .git 文件
$ ls -la
文件提交到本地仓库
文件 ⇒ \Rightarrow ⇒ 工作区
当项目目录下的文件被修改,修改内容被自动添加到工作区
工作区 ⇒ \Rightarrow ⇒ 暂存区
git add <file | .>:将修改内容从工作区添加到暂存区
# 1. 创建测试testA.txt,testB.txt文件
$ touch testA.txt testB.txt
# 2. testA.txt添加到暂存区
$ git add testA.txt
# ================ 以下补充 ================
# 将多文件添加到暂存区
$ git add testA.txt testB.txt
# 将所有文件添加到暂存区
$ git add .
暂存区 ⇒ \Rightarrow ⇒ 本地仓库
git commit -m <description>:将暂存区内容添加到本地仓库,并描述提交的目的
git status:查看文件状态 (红色:文件在工作区;绿色:文件在暂存区;显示nothing no commit, working tree clean
说明文件已添加到本地仓库)
# 1. 将暂存区内容提交到本地仓库
$ git commit -m "这是一次测试提交"
# 2. 查看文件状态
$ git status
# ================ 以下补充 ================
# 修改最新commit的description信息
$ git commit --am -m "对最新commit的description修改"
版本回退
git log <-n>:查看n条 git 日志
git reflog <-n>:查看n条历史操作记录
git reset --hard HEAD~n:返回第n个版本 (HEAD
代表当前版本)
# 1. 查看git日志,获取commit ID
# --pretty=oneline:只显示commitID
# --graph:查看日志图谱
# --abbrev-commit:commitID缩写
$ git log --pretty=oneline --graph --abbrev-commit
# 2. 返回当前版本的上一个版本
$ git reset --hard HEAD~1
# ================ 以下补充 ================
# 返回上一个版本,(^一个版本,^^两个版本,以此类推)
$ git reset --hard HEAD^
# 返回指定版本
$ git reset --hard 2a8a604
差异比较
git diff:比较工作区与暂存区的内容
# 比较工作区与暂存区的内容
$ git diff
# 比较工作区与本地仓库最新一次commit的内容
$ git diff HEAD
# 比较暂存区与本地仓库最新一次commit的内
$ git diff --cached
# 比较两个commit之间的内容
$ git diff 2a8a604 2a8a605
文件撤销
git checkout --file:撤销工作区修改内容
# 1. 修改testA.txt
vim testA.txt
# 2. 撤销的 testA.txt 修改
$ git checkout --testA.txt
删除文件
git rm --file:删除本地仓库修改内容
# 1. 删除testA.txt
$ rm testA.txt
# 2. 删除本地仓库里的 testA.txt 文件
$ git rm --READMEA.md
# 3. 提交本次修改
$ git push commit -m "删除了READMEA.md文件"
本地仓库与远程仓库建立连接
一. 创建私钥
# 1. 查看电脑是否存在.ssh文件
$ open ~/.ssh
# 2. 创建SSH key(如果第一步里的.ssh存在,那么请忽略这步)
$ ssh-keygen -t rsa -C "youreamil@example.com"
# 3. 复制id_rsa.pub里文件内容
$ cat ~/.ssh/id_rsa.pub
二. 添加SSH到GitHub
三. 创建远程仓库并与本地仓库相关联
git remote add origin <rep_url>:让本地仓库员与远程仓库建立联系
git push <-u> origin master:将本地仓库内容推送到远程仓库master分支上
# 1. 与远程test仓库建立联系
$ git remote add origin git@github.com:SmithJson/test.git
# 2. 将本地仓库推到test远程仓库master分支上
# -u只需要在第一次提交的时候添加
$ git push -u origin master
克隆远程仓库
git clone <rep_url>:克隆指定仓库
# 克隆test远程仓库
$ git clone git@github.com:SmithJson/test.git
分支管理
一. 创建分支
git branch <name>:创建分支
git checkout <name>:切换分支
# 1. 创建dev分支
$ git branch dev
# 2. 切换到dev分支
$ git checkout dev
# ================ 以下补充 ================
# 创建并切换到dev分支
$ git branch -b dev
# 本地创建于远程仓库对应的分支
$ git checkout -b dev origin/dev
# 查看分支列表
$ git branch
二. 合并分支
git merge <origin> <name>:合并分支
# 1. 合并本地dev分支(在master分支上)
$ git merge dev
# ================ 以下补充 ================
# 合并远程master分支
$ git merge origin master
# 使用普通模式合并分支
# 普通模式会创建一个合并commit,用于查看合并记录,Fast forward模式无法查看合并记录
# --no-off:禁用Fast forward模式
$ git merge --no-off -m "本次合并commit描述" dev
三. 删除分支
git branch -d <name>:删除本地分支
git branch -D <name>:强制删除本地分支
git push -d origin <name>:删除远程分支
# 1. 切换回master分支
$ git checkout master
# 2. 删除本地dev分支
$ git branch -d dev
# 3. 删除远程仓库dev分支
$ git push -d origin dev
四. 分支冻结
使用场景:需要去其他分支处理BUG,但当前分支还存在未提交的代码时使用
git stash:将当前的分支的修改冻结
,使当前分支工作区,暂存区没有内容
git stash list:查看冻结
列表
git stash pop:解冻修改
git cherry-pick commit ID:将某个分支的commit合并
# 1. 切换到dev分支
$ git checkout dev
# 2. 修改里面的 testA.txt 文件
$ vim testA.txt
# 3. 冻结当前修改(如果分支存在修改,那么无法切换到其他分支)
$ git stash
# 4. 现在能切换到其他分支了
$ git checkout master
# ========================================
# 将os-12分支的的commit修改赋值在dev分支上
$ git cherry-pick 7a18e07
五. 多人协作
git fetch origin <name>:获取远程指定分支修改
git pull origin <name>:
⇔
\Leftrightarrow
⇔ git fetch + git merge
# 1. 获取远程dev分支修改(每天开发前先fetch,避免后期冲突过多)
$ git fetch origin dev
# 2. 合并远程dev仓库
$ git merge origin dev
# 3. 解决冲突
# 4. 提交到远程dev分支
git push origin dev
# ========================================
# 获取远程dev分支修改,同时与当前分支进行合并
git pull origin dev
标签管理
一. 创建Tag
git tag <name>:创建tag
# 为当期Commit创建tag
$ git tag v1.0
# 为指定Commit创建tag
$ git tag v0.9 59f03c7
# 为tag添加描述语言
$ git tag -a v0.1 -m "创建一个带有描述的tag" 59f03c7
# 查看所有tag
$ git tag
# 查看v1.0 tag对应的commit
$ git show v1.0
二. 删除Tag
git tag -d <name>:删除本地tag
git tag push origin :refs/tags/<name>:删除远程tag
git push origin tag <name>:推送本地tag到远程仓库
git push origin --tags:推送所有未推送的本地tag到远程仓库
# 1. 将多个tag推送到远程仓库
$ git push origin --tags
# 2. 删除本地tag v0.9
$ git tag -d v0.9
# 3. 删除远程仓库的tag v0.9
$ git push origin :refs/tags/v0.9
其他git指令
指令 | 操作 |
---|---|
git remote rm origin | 删除远程关联仓库 |
git config --list | 查看git配置项 |
git config --global <key> <value> | 设置git配置项,key属性名,value属性值 |
git config --list | 查看git配置项 |