Git 使用教程
前情提要
- 毕业做了两年单片机项目开发,均采用 SVN 进行版本管理(集成式)
- 在接触Linux、Android等项目后,均采用 Git 进行版本管理(分布式)
- 常用命令自不用再提,但遇到问题时还是得看用哪条命令合适
- 究其根源,还是对git --help用的不熟,那就今天就开设专题,缕缕这每天都要打交道的 git 命令
参考资料
一、git 常用指令
全局:
git config --global user.name "mooncity"**
git config --global user.email "mooncity0910@163.com"
本地:
git config user.name "mooncity"
git config user.email "mooncity0910@163.com"
1.1 创建一个空的Git仓库或重新初始化已有仓库并提交
git init
git add .
git commit -m “this is a empty codebase.”
git push origin master
1.2 克隆远程仓库代码修改后提交Gerrit审核
git clone ssh://192.168.xx.xxx:xxxxxx/openharmony-r4.0.git
本地修改
git status // 显示红色意味着进行了增添、修改、删除,但未提交到暂存区
git diff // 显示更改前一行信息与更改
git add .
git status // 显示绿色即已经提交到暂存区,未提交到版本库
git commit -m “add rk3568 driver support.”
git push origin HEAD:refs/for/master
git status // 空,当前所有文件已被git管控且与远端版本库保持一致
git reflog // 查看简易版本更改记录
1.3 提交
git add . // 工作区文件内容修改内容添加。
git add -u // 工作区被修改的文件提交到暂存区。不会提交新文件(untracked file),(git add --update的缩写)
git commit -m “submit all.” -a // 提交所有修改
git comm -m “add readme.md.” readme.md // 提交单个文件
git commit -C HEAD -a --amend // 增补提交,不会产生新的提交记录
git remote add origin ssh://192.168.xx.xxx:xxxxxx/openharmony-r4.0.git // 添加远程仓库地址
git remote -v // 查看对应仓库
git push [远程主机名] [本地分支名]:[远程分支名]
git push origin master // 本地分支与远程分支同名
git push origin master:dev // 本地分支与远程分支不同名
git push -u origin master // 首次添加加-u
git push // 之后就不需要了
1.4 撤销修改
1.4.1 撤销尚未提交的修改,不保留更改点
1.4.2 撤销尚已提交至暂存区的修改,不保留更改点
git checkout readme.md // 撤销readme.md文件更改
git checkout kernel/ // 撤销kernel文件下所有修改点
git checkout . // 撤销所有修改点
git restore . //丢弃工作区的修改
1.4.3 撤销尚已提交至暂存区的修改,保留更改点
git reset HEAD // 撤销至 HEAD 对应版本
git reset HEAD filename // 撤销filename文件夹的暂存
git reset commit-id-前7位即可 // 撤销至 commit-id 对应版本
git reset --hard HEAD^ // 不会在版本库中留下记录
git restore --staged file_name
1.4.4 反转提交
git revert --no-commit HEAD // 提交最近一次提交的反操作
1.4.5 清除未跟踪文件(编译临时文件)
// 如果已经git add . 就不会被删除
git clean -n // 显示将要被删除的文件以及目录
git clean -f // 删除所有未跟踪文件,.gitignore文件里指定的不会删除
git clean -f file_path // 删除对应文件夹下所有未跟踪文件,.gitignore文件里指定的不删除
git clean -df // 强制删除所有未跟踪的文件夹及文件
git clean -fx // 强制删除所有未跟踪的文件(.gitignore文件也会删除)
1.5 提交文件不完整或提交信息拼错
git reset --soft HEAD^
git commit -m “add file.” -c ORIG_HEAD // 沿用上次日志信息,-C 不需要编辑信息
1.6 分支
1.6.1 查看分支
git branch // 查看本地分支
git branch -a // 查看所有分支
1.6.2 创建分支
git branch [branch-name] // 基于当前分支创建新分支
git checkout [branch-name] // 检出分支
git checkout -b [branch-name] // 基于当前分支创建新分支并检出
git branch commit-id [branch-name] // 基于commit-id对应版本创建新分支
git branch branch-1 [branch-name] // 基于branch-1版本创建新分支
1.6.3 合并分支
git merge [branch-name] // 合并某分支到当前分支并提交
git merge --no-commit [branch-name] // 合并某分支到当前分支但不提交
git merge --squash [branch-name] // 压合合并并提交
git merge --squash --no-commit [branch-name] // 压合合并不提交
1.6.4 重命名分支
git branch -m [branch-name> [new-name] // 不会覆盖已存在的同名分支
git branch -M [branch-name> [new-name] // 会覆盖已存在的同名分支
1.6.5 删除分支
git branch -d [branch-name] // 若未被合并会提示失败
git branch -D [branch-name] // 强制删除分支
git push origin --delete [branch_name] // 删除远程分支
git branch -r // 查看远程分支
git remote show origin // 获取远端分支信息
git remote prune origin // 删除远程库中不存在的分支
1.7 查看修改
git diff // 查看当前改动
git diff --cached // 查看已经缓存的改动
git diff HEAD // 查看所有改动
git diff --stat // 显示摘要
1.8 日志
git log // 查看详细版本提交信息
git log --oneline // 查看简洁版本信息
git log --oneline --author=mooncity // 查看指定用户提交的日志
git log --patch-with-stat // 显示提交的代码差异、增改文件及i行数信息
git show commit-id // 查看指定提交日志
1.9 标签
git tag Relese-V1.0 // 注意:标签无法重命名
git tag Openharmony-Relese-V1.0 openharmony // 为分支openharmony创建标签
git tag Openharmony-Relese-V2.0 commit-id // 基于commit-id提交创建标签
git tag // 显示标签列表
git checkout Relese-V1.0 // 检出标签,但是不能提交
git branch V1.1 Relese-V1.0 // 基于标签创建分支
git checkout -b V1.1 Relese-V1.0 // 基于标签创建分支并检出至分支
git tag -d Relese-V1.0 // 删除标签
1.10 patch包生成与合并
1.10.1 根据 git 提交记录生成 PATCH
git format-patch -1 commit_id // 生成专用0001-xxxx.patch
git diff commit-id-1 commit-id-2 > diff.patch // 生成通用PATCH,commit-id-1~2(含commit-id-2)的修改
git apply --stat 0001-xxxx.patch // 检查该PATCH信息
git apply --check 0001-xxxx.patch //检查该PATCH是否合入
git apply 0001-xxxx.patch // 合入到本地
patch -p(n) < diff.patch // 合入PATCH,其中 n 代表路径的层级
推荐使用git format-patch 生成 git 专用PATCH
-git diff生成通用PATCH,对于删除文件的操作会出现失败
-若无删除操作的情况下 git diff 的效率及通用性会比较好
1.11 常用命令拓展
1.11.1 快速克隆代码到指定名称文件夹下
git clone --depth=1 --branch=[tags标签] ssh://192.168.xx.xxx:xxxxxx/openharmony-r4.0.git openharmony
- 名称更改 openharmony-r4.0 > openharmony
- –depth=1:仅克隆最近一次commit
- 对应[tags标签]分支克隆
1.11.2 ssh 公钥生成
ssh-keygen -t ed25519 -C “youremail@example.com”
# Generating public/private ed25519 key pair...
cat ~/.ssh/id_ed25519.pub // 公钥生成
ssh -T git@gitee.com // 远程仓库连接测试
1.11.3 查看当前git仓库大小
git count-objects -vH
1.12 忽略本地部分文件 .gitignore
mkdir .gitignore
vim .gitignore
添加:
node_models # 忽略所有node_models文件与子目录
/out # 忽略当前工程根目录下out文件夹
/out/* # 忽略当前工程根目录下out文件夹所有文件
*Y* # 名称中有一个Y的都会被过滤(*代表0~n个任意字符)
注意:已经纳入版本管理的文件不会被过滤,故先删除需过滤的文件,再添加.gitignore文件
git add .gitignore
git commit -m "add .gitignore file" -a
二、git 命令进阶
待补充