Git常用命令和常见问题

Git常用命令和常见问题

2022年12月12日 阅读:12 字数:2190 阅读时长:5 分钟

在使用Git管理代码的过程中,常用到的一些命令和遇到的问题以及解决方案。

Git 是一个分布式版本控制系统,广泛用于软件开发和代码管理。

以下是 Git 的一些关键特点和优势:

  1. 分布式系统:与集中式版本控制系统不同,Git 是一种分布式系统,每个开发者都可以在本地拥有完整的代码仓库。这意味着即使离线或无法访问远程仓库,开发者仍然可以进行提交、分支管理和代码回滚等操作。

  2. 速度和效率:Git 设计简单,执行速度快。由于本地保存完整的代码历史,大部分 Git 操作都可以在本地完成,不需要频繁地与远程服务器通信,提高了工作效率。

  3. 强大的分支管理:Git 鼓励使用分支管理代码。创建和切换分支非常快速和容易,可以同时处理多个任务和功能开发,而不会互相干扰。分支合并和解决冲突也较为简洁明了。

  4. 完整的历史记录:Git 追踪和存储每个文件的修改历史,包括谁、何时和为什么进行的更改。这些详细的历史记录使得回溯代码变更、定位问题以及审查代码更加简单。

  5. 灵活的协作:Git 支持多人协作开发。开发者可以将本地代码推送到远程仓库,或从远程拉取最新代码。Git 提供了工作流程和权限管理等功能,方便团队成员进行协作。

1. 常用命令

提供了很多常用的命令来管理代码仓库。以下是一些常用的 Git 命令:

  1. git init:在当前目录初始化一个新的 Git 仓库。
  2. git clone <repository>:克隆(下载)一个远程仓库到本地。
  3. git add <file>:将文件添加到暂存区。
  4. git commit -m "<message>":将暂存区中的更改提交到本地仓库,并附上提交信息。
  5. git status:查看工作区和暂存区的状态。
  6. git log:查看提交历史记录。
  7. git config --global user.name "Your Name":设置用户名
  8. git config --global user.email "your.email@example.com":设置邮箱地址
  9. git push:将本地仓库的代码推送到远程仓库。
  10. git pull:从远程仓库拉取最新代码到本地。
  11. git branch:列出所有分支,包括本地和远程。
  12. git checkout <branch>:切换到指定分支。
  13. git merge <branch>:将指定分支合并到当前分支。
  14. git diff:查看工作区和暂存区之间的差异。
  15. git reset <file>:从暂存区中移除文件的更改。
  16. git remote add <name> <url>:添加一个远程仓库。
  17. git remote -v:查看远程仓库的详细信息。
  18. git remote set-url <remote-name> <new-url>:修改远程地址,将 <remote-name> 替换为要修改的远程仓库的名称(例如 origin),将 <new-url> 替换为新的远程仓库地址。

2. 常见问题

在使用 Git 过程中,有一些常见的问题可能会遇到,下面是我遇到的其中一些常见问题以及相应的解决方案:

  1. 忘记提交代码就切换分支:

    解决方案:可以使用 git stash 命令将未提交的更改暂存起来,然后切换分支,完成后再使用 git stash apply 恢复之前的更改。

  2. 意外删除文件或文件夹:

    解决方案:如果文件还在工作区中,可以使用 git checkout -- <file> 恢复,如果文件已经提交到了版本库中,可以使用 git reset HEAD <file> 将其从暂存区撤销,并重新使用 git checkout -- <file> 从版本库中恢复。

  3. 无法推送代码到远程仓库:

    解决方案:首先确保已经关联了正确的远程仓库,可以使用 git remote -v 查看关联的远程仓库。如果远程仓库已存在,可以尝试使用 git pull 拉取最新代码,处理可能的冲突,然后再进行推送。

  4. 解决冲突:

    解决方案:当进行代码合并或拉取时,可能会发生冲突。需要手动解决冲突,可以使用文本编辑器打开有冲突的文件,根据标记 <<<<<<<、======= 和 >>>>>>> 来修改代码,解决冲突后再提交修改。

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

推荐阅读

恰饭区

评论区 (0)

0/500

还没有评论,快来抢第一吧