Git 是一个分布式版本控制系统,广泛用于软件开发和代码管理。
以下是 Git 的一些关键特点和优势:
-
分布式系统:与集中式版本控制系统不同,Git 是一种分布式系统,每个开发者都可以在本地拥有完整的代码仓库。这意味着即使离线或无法访问远程仓库,开发者仍然可以进行提交、分支管理和代码回滚等操作。
-
速度和效率:Git 设计简单,执行速度快。由于本地保存完整的代码历史,大部分 Git 操作都可以在本地完成,不需要频繁地与远程服务器通信,提高了工作效率。
-
强大的分支管理:Git 鼓励使用分支管理代码。创建和切换分支非常快速和容易,可以同时处理多个任务和功能开发,而不会互相干扰。分支合并和解决冲突也较为简洁明了。
-
完整的历史记录:Git 追踪和存储每个文件的修改历史,包括谁、何时和为什么进行的更改。这些详细的历史记录使得回溯代码变更、定位问题以及审查代码更加简单。
-
灵活的协作:Git 支持多人协作开发。开发者可以将本地代码推送到远程仓库,或从远程拉取最新代码。Git 提供了工作流程和权限管理等功能,方便团队成员进行协作。
1. 常用命令
提供了很多常用的命令来管理代码仓库。以下是一些常用的 Git 命令:
- git init:在当前目录初始化一个新的 Git 仓库。
- git clone <repository>:克隆(下载)一个远程仓库到本地。
- git add <file>:将文件添加到暂存区。
- git commit -m "<message>":将暂存区中的更改提交到本地仓库,并附上提交信息。
- git status:查看工作区和暂存区的状态。
- git log:查看提交历史记录。
- git config --global user.name "Your Name":设置用户名
- git config --global user.email "your.email@example.com":设置邮箱地址
- git push:将本地仓库的代码推送到远程仓库。
- git pull:从远程仓库拉取最新代码到本地。
- git branch:列出所有分支,包括本地和远程。
- git checkout <branch>:切换到指定分支。
- git merge <branch>:将指定分支合并到当前分支。
- git diff:查看工作区和暂存区之间的差异。
- git reset <file>:从暂存区中移除文件的更改。
- git remote add <name> <url>:添加一个远程仓库。
- git remote -v:查看远程仓库的详细信息。
- git remote set-url <remote-name> <new-url>:修改远程地址,将 <remote-name> 替换为要修改的远程仓库的名称(例如 origin),将 <new-url> 替换为新的远程仓库地址。
2. 常见问题
在使用 Git 过程中,有一些常见的问题可能会遇到,下面是我遇到的其中一些常见问题以及相应的解决方案:
-
忘记提交代码就切换分支:
解决方案:可以使用 git stash 命令将未提交的更改暂存起来,然后切换分支,完成后再使用 git stash apply 恢复之前的更改。
-
意外删除文件或文件夹:
解决方案:如果文件还在工作区中,可以使用 git checkout -- <file> 恢复,如果文件已经提交到了版本库中,可以使用 git reset HEAD <file> 将其从暂存区撤销,并重新使用 git checkout -- <file> 从版本库中恢复。
-
无法推送代码到远程仓库:
解决方案:首先确保已经关联了正确的远程仓库,可以使用 git remote -v 查看关联的远程仓库。如果远程仓库已存在,可以尝试使用 git pull 拉取最新代码,处理可能的冲突,然后再进行推送。
-
解决冲突:
解决方案:当进行代码合并或拉取时,可能会发生冲突。需要手动解决冲突,可以使用文本编辑器打开有冲突的文件,根据标记 <<<<<<<、======= 和 >>>>>>> 来修改代码,解决冲突后再提交修改。
3. Git提交规约
3.1. 提交格式
符合规范的Commit Message的提交格式如下,包含了页眉(header)、正文(body)和页脚(footer)三部分。其中,header是必须的,body和footer可以忽略。
如:feat(登录): 添加登录接口
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
3.2. 页眉(header)
页眉(header)通常只有一行,包括了提交类型(type)、作用域(scope)和主题(subject)。其中,type和subject是必须的,scope是可选的。中间是英文冒号和空格“: ”。
3.3. 提交类型(type)
提交类型(type)用于说明此次提交的类型,需要指定为下面其中一个:
build |
主要目的是修改项目构建系统的提交 |
chore |
其他修改,比如修改构建流程, 或者添加依赖库、工具等 |
ci |
主要目的是修改项目继续集成流程(例如 Travis,Jenkins,GitLab CI,Circle等)的提交 |
docs |
文档更新 |
feat |
新特性、新功能 |
fix |
修复bug |
perf |
优化相关,比如提升性能、体验 |
refactor |
重构代码(既没有新增功能,也没有修复 bug) |
revert |
回滚上一个或某个更早之前的提交 |
style |
代码格式修改,注意不是 css 修改,不影响程序逻辑的代码修改(修改空白字符,格式缩进,补全缺失的分号等,没有改变代码逻辑) |
test |
新增测试用例或是更新现有测试 |
3.4. 作用域(scope)
作用域(scope)表示此次提交影响的范围。比如可以取值api,表明只影响了接口。
3.5.主题(subject)
主题(subject)描述是简短的一句话,简单说明此次提交的内容。
- 英文使用现在时:“change”而不是“changed”也不是“changes”
- 第一个字母不要大写
- 建议使用“新增”、“修改”、“修复”等动词开头
- 末尾不需要点或标点符号
3.6. 正文(body)
正文(body)不是必须的。
正文应该包括改变的动机,并将其与以前的行为进行对比。
页脚(footer)也不是必须的。
3.7. 破坏性更新(chore)
如果是破坏性的变更,那就必须在提交的页脚加以展示。一个破坏性变更必须包含大写的文本 BREAKING CHANGE,紧跟冒号和空格。页脚必须只包含 BREAKING CHANGE、外部链接、issue 引用和其它元数据信息。
chore: 引入commitizen
BREANKING CHANGE:需要重新npm install,使用npm run cm代替git commit
3.8. 修复问题(fix)
页脚可以添加RDM的BUG编号.
fix: 修复登录失败没有提示问题
Closes #1, #2
4. 查询提交日志
使用git log
命令,> log.txt是将记录保存到log.txt
git log --pretty=format:"SHA-1:%h - 创建人:%an 时间:%ad 提交信息:%s" --date=format:"%y-%m-%d %H:%M:%S" --shortstat --since=2.weeks > log.txt
支持的参数如下:
-p 按补丁格式显示每个更新之间的差异
--pretty 内容格式化
--date 日期格式化
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示 --stat 中最后的行数修改添加移除统计
--name-only 仅显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA-1 的前9个字符,而非所有的 40 个字符
--relative-date 使用较短的相对时间显示(比如,“2 days ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--since/after 显示提交比指定日期更新
--until/before 显示早于特定日期的提交
>git log --since=2.weeks
>git log --after="2020-01-01"
>git log --since ==2019-12-01 --until=2020-01-01
--author 作者
--committer 提交者
--grep 筛选关键字
--grep-reflog 正则筛选
>git log --grep="xxx" -i
-i 忽略大小写
-E 扩展正则表达式
-F 将限制模式视为固定的字符串
-P 将限制模式视为与Perl兼容的正则表达式
pretty的一些简单内容格式:
git log --pretty=oneline // 一行格式(SHA-1+提交信息)
git log --pretty=short // 短格式(SHA-1+作者+日期+提交信息)
git log --pretty=full // 长格式(SHA-1+作者+提交者+提交日期+提交信息)
git log --pretty=fuller // 长格式(SHA-1+作者+作者提交日期+提交者+提交者提交日期+提交信息)
5. 代理
设置代理:
//http || https
git config --global http.proxy 127.0.0.1:10809
git config --global https.proxy 127.0.0.1:10809
//sock5代理
git config --global http.proxy socks5 127.0.0.1:10808
git config --global https.proxy socks5 127.0.0.1:10808
查看代理:
git config --global --get http.proxy
git config --global --get https.proxy
取消代理:
git config --global --unset http.proxy
git config --global --unset https.proxy
还没有评论,快来抢第一吧