Git 是我们开发工作中使用频率极高的工具,下面总结下他的基本指令有哪些,顺便温习一下。
前言
一般项目中长存2个分支: 主分支(master) 和开发分支(develp)
项目存在三种短期分支 :功能分支(feature branch) 补丁分支(hotfix branch) 预发分支(release branch)一旦完成开发,它们就会被合并进develop或master,然后被删除。
虽然是主分支和分支,却是平级关系,develop可以理解为开发库,master为生产库。
一、初始化
# 初始化本地仓库,在当前目录下生成 .git 文件夹
git init
# 查看当前分支状态
git status
二、Git 配置
# 查看配置信息
git config <--local | --global | --system> -l // --local:仓库级,--global:全局级,--system:系统级
# 查看当前生效的配置信息
git config -l
# 编辑配置文件
git config <--local | --global | --system> -e
# 添加配置项
git config <--local | --global | --system> --add <name> <value>
# 获取配置项
git config <--local | --global | --system> --get <name>
# 删除配置项
git config <--local | --global | --system> --unset <name>
# 配置提交记录中的用户信息
git config --global user.name <用户名>
git config --global user.email <用户邮箱>
# 更改Git缓存区的大小,如果提交的内容较大,默认缓存较小,提交会失败,缓存大小单位:B,例如:524288000(500MB)
git config --global http.postBuffer <缓存大小>
三、查看日志log
# 打印所有的提交记录
git log // Q退出记录
# 打印从第一次提交到指定的提交的记录
git log <commit ID>
# 打印指定数量的最新提交的记录
git log -<指定的数量> // 例如 git log -3 打印最近3条记录
四、分支(branch)操作
# 列出本地的所有分支,当前所在分支以 "*" 标出
git branch
# 列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出
git branch -v
# 创建新分支
git branch <分支名>
# 修改分支名称
git branch -m <oldName> <newName>
# 强制修改分支名称
git branch -M <oldName> <newName>
# 删除指定的本地分支
git branch -d <分支名称>
# 强制删除指定的本地分支
git branch -D <分支名称>
五、切换(checkout)分支
# 切换到已存在的指定分支
git checkout <分支名称>
# 创建并切换到指定的分支,保留所有的提交记录
git checkout -b <分支名称>
# 创建并切换到指定的分支,删除所有的提交记录
git checkout --orphan <分支名称>
# 替换掉本地的改动,新增的文件和已经添加到暂存区的内容不受影响
git checkout <文件路径>
六、克隆(clone)分支
# 默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下
git clone <远程仓库的网址>
# 指定本地仓库的目录
git clone <远程仓库的网址> <本地目录>
# -b 指定要克隆的分支,默认是master分支
git clone <远程仓库的网址> -b <分支名称> <本地目录>
七、提交(commit)操作
# 把暂存区中的文件提交到本地仓库
git commit
# 把暂存区中的文件提交到本地仓库中并添加描述信息
git commit -m "<提交的描述信息>"
# 修改上次提交的描述信息
git commit --amend
八、合并(merge)操作
# 把指定的分支合并到当前所在的分支下,并自动进行新的提交
git merge <分支名称>
# 把指定的分支合并到当前所在的分支下,不进行新的提交
git merge --no-commit <分支名称>
九、还原(reset)提交记录
# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
git reset <commit ID>
# 将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了
git reset --hard <commit ID>
# 回退3级
git reset --hard HEAD~3
git push -f // 表示将目前自己本机的代码库推送到远端,并覆盖
# 撤销某次提交
git revert <commit ID>
git revert 与 git reset 最大的不同是,git revert 仅仅是撤销某次提交,而git reset会将撤销点之后的操作都回退到暂存区中
十、tag 操作
# 打印所有的标签
git tag
# 切换到指定的标签
git checkout <标签名称>
# 查看标签的信息
git show <标签名称>
# 删除指定的标签
git tag -d <标签名称>
# 将指定的标签提交到远程仓库
git push <远程仓库的别名> <标签名称>
# 将本地所有的标签全部提交到远程仓库
git push <远程仓库的别名> –tags
十一、差异对比 diff
# 比较暂存区中的文件和上次提交时的差异
git diff --cached
git diff --staged
# 查看从指定的版本之后改动的内容
git diff <commit ID>
# 比较两个分支之间的差异
git diff <分支名称> <分支名称>
十二、其他操作
# 列出已经存在的远程仓库
git remote -v
# 从远程仓库获取最新版本
git pull
# 合并分支出现冲突时,取消合并,一切回到合并前的状态
git merge --abort
# 选择一个commit,合并进当前分支
git cherry-pick <commit ID>
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m <message>
十三、操作案例
# 克隆仓库
git clone http://www.xxx.com/abc.git
# 查看分支当前状态
git status
# 将文件添加到暂存区 .代表所有
git add .
# 把暂存区中的文件提交到本地仓库
git commit -m '添加代码备注'
# 将本地代码提交到远程仓库
git push
总结
1.养成提交描述的好习惯,一个好的提交信息可以方便他人理解您的修改,也有助于日后回顾项目历史;
2.在频繁修改的项目中,保持提交频率,避免许多修改集中在一个提交中,会增加冲突的风险;
3.使用分支开发习惯,将开发环境和生产环境分开,不要在master分支上直接进行开发;
4.当合并时出现冲突,应该及时处理。解决冲突后进行测试,确保代码正常工作;
5.每天开发完成时,更新您的本地仓库,确保与远程仓库保持同步。
6.在项目中添加适当的文档,包括README文件、代码注释和项目文档,以便团队成员能够理解项目的功能和结构。