初次使用git前的配置
# bash
git config --global user.name "用户名"
git config --global user.email "邮箱"
git的一般工作流程
- 在工作目录添加丶修改文件 【工作区】
- 将需要进行版本管理的文件放入暂存区域 【暂存区】
- 将暂存区域的文件提交到git仓库 【git仓库】
# bash
git add <文件名> # 使用.代表所有文件
git commit -m "一些提示文字"
查看状态
# bash
git status #查看工作区文件状态
红色文件:未跟踪文件丶已在【工作区】修改未提交到【暂存区】文件
绿色文件:已从【工作区】提交到【暂存区】,尚未提交到【git仓库】的文件
# bash
git log #查看所有版本提交信息及哈希序列
# 可选参数
# --oneline 或者 git log --pretty=oneline 以精简模式显示
# --graph 以图形模式显示
# --decorate会显示出tag信息
# --all 显示所有分支
# --stat 显示文件更改列表
# --author= 'name' 显示某个作者的日志
# -p filepath 查看某个文件的详细修改
# -L start,end:filepath 查看某个文件某几行范围内的修改记录
# --stat commitId 或者 git show --stat commitId 查看某一次提交的文件修改列表
版本回退
# bash
git reset [--mixed] HEAD~ #将当前HEAD指向上一个版本,【git仓库】回退到上一个版本,【暂存区】回退到上一个版本
# git reset HEAD~~ # 回退到上两个版本
# git reset HEAD~10 # 回退到上十个版本
# git reset HEAD 哈希序列 # 回退/前进到该哈希序列的版本,哈希值在git status 里查看,哈希值可只输入前几位,如'a34b5'
git reset --soft HEAD~ #仅将【git仓库】回退到上一个版本
git reset --hard HEAD~ #将【git仓库】丶【暂存区】丶【工作区】都回退到上一个版本
版本比较
- 比较【暂存区】和【工作区】文件
# bash
git diff # 比较【暂存区】和【工作区】文件的差异
绿色行:相较于【暂存区】新增内容
红色行:相较于【暂存区】减少的内容
灰色行:相同内容
- 比较【git仓库】两个版本的文件
# bash
git diff <哈希序列1> <哈希序列2> # 比较【git仓库】哈希序列1和哈希序列2两个版本的文件
- 比较【工作区】和【git仓库】的文件
# bash
git diff <哈希序列> # 比较【工作区】和【git仓库】该哈希序列的版本。使用HEAD代替哈希序列即为仓库最新版本
- 比较【暂存区】和【git仓库】
# bash
git diff --cached <哈希序列> #比较【暂存区】和【git仓库】该哈希序列的版本
版本修改
- 更正【git仓库】最后一次提交
# bash
git commit --ament -m "一些信息" #以此次提交更新【git仓库】最后一个版本,未产生新版本
- 取消【工作区】的修改
# bash
git checkout -- <文件名> # 取消【工作区】的修改,包括修改文件丶增删文件,即将【暂存区】文件还原到【工作区】
# git提醒你写成git checkout -- readme.md 的形式,那是为了防止你恰好有一个分支叫做readme.md,约定 -- 后面跟文件名
- 删除追踪文件
# bash
git rm <文件名> # 删除工作目录和暂存区域的文件,也就是取消追踪,在下次提交时不纳入版本管理。
# git rm -f 文件名 # 强制删除【工作区】和【暂存区】追踪的该文件
# git rm --cached 文件名 # 仅删除【暂存区】的该文件
- 修改文件名
# bash
git mv <旧文件名> <新文件名> #
分支管理
- 创建分支
# bash
git branch <分支1> # 创建分支1
# git checkout -b 分支1 # 创建分支1并切换至分支1
- 切换分支
# bash
git checkout <分支1> # HEAD指向 分支1
- 合并分支
# bash
# git checkout master #先切换回待合并到的分支,如master
git merge <分支1> # 合并分支1到当前分支,即master分支
# 分支1和master分支若有冲突的文件,需手动对该文件进行编辑,再合并
- 删除分支
# bash
git branch -d <分支1> # 删除分支1