本文是以前学习 Git 时记录的相关内容。现在将笔记整理归档。

参考课程:尚硅谷 Git 教程

1. 版本控制功能

版本控制包括以下功能:

  • 协同修改
  • 数据备份
  • 版本管理:目标是不保存重复数据。其中,SVN 采用的是增量式管理,Git 采用的是系统快照。
  • 权限控制
  • 历史记录:包括修改人、时间、内容、日志信息、恢复功能等。
  • 分支管理:用于多线推进,之后进行合并。

2. Git 优势

Git 优势包括以下内容:

  • 大部分操作可以实现本地完成。
  • 提供完整性保证,对操作进行哈希处理和哈希验证。
  • 尽量添加数据,而不是删除、修改数据,以避免不同步现象。
  • 分支管理方便快捷,提供快照、指针等操作。
  • 与 Linux 命令全面兼容,创始人都是 Linus。

3. Git 结构

Git结构包括:

  • 远程库:一般是代码托管中心,GitHub、码云之类的。
  • 本地库:存放历史版本。
  • 暂存区:临时存储。
  • 工作区:写代码。
  • git add:工作区到暂存区的方法。
  • git commit:暂存区提交到本地库的方法。
  • git push:本地库上传到远程库的方法。
  • git clone:本地库获取远程库内容的方法。
  • git pull:本地库从远程库更新的方法。
  • git fork:外部团队参与工作的方法。
image-20201229155043827
image-20201229155107321
image-20201229155133989

4. Git 命令

Git 常用命令包括:

  • git init:初始化本地库,生成 .git 目录,里面存放了本地库相关的子目录和文件,不能随意删除。
  • git config [--global] user.name/user.email:配置签名。这里的签名就是作为标记,和远程库没关系,也不一定要用真的邮箱。项目签名优先度高于全局签名。信息存储在 .git/config 中。
  • git status:显示状态,包括:所在分支,提交内容,什么可以提交等。
  • git commit [-m message]:提交到本地库。提交时,会有 vim 用来编辑提交备注信息。
  • git add:提交到暂存区,同时让文件变得可追踪,能够查看 log。
  • git log [--pretty=oneline 一行显示] [--oneline 哈希值只显示一点]:查日志。会提供日志的哈希值,可以供后续回滚和前滚操作使用。空格向下翻页,b 向上翻页,q 退出。
  • git reflog:也是一样看日志。HEAD@ 对应移动到当前第几步。
  • git reset [--hard 将暂存区和工作区都重置] 索引值:前进、后退到指定哈希值对应的历史。Git 不会删除 log 历史。
  • git diff:比较差异。
  • git branch [分支名]:创建分支。
  • git branch -v:查看分支。
  • git checkout [分支名]:切换分支。
  • git merge 分支名:合并分支。首先要切换到主要分支上面,然后再填另一个分支。合并会用 vim 显示冲突发生的位置,需要删除提示冲突的符号,并修正冲突,之后 git commit 即可。
  • git remote add [别名] [网址]:连接远程库,并给远程库起个别名。
  • git push [名称] [分支]:推送文件到远程库。如果本地库不是基于最新的远程库文件开发的,还不能直接 push。必须先拉取,解决完冲突了,基于最新版再提交才可以。
  • git clone [网址]:获取远程库文件。
  • git fetch [名称] [分支]:拉取远程库文件,并且不会替换掉本地已有的文件,这样就可以先 fetch 再 merge,确保更新时不会把本地直接覆盖了。
  • git pull:拉取远程库文件,直接覆盖。

5. 常见问题

5.1 GitHub 操作慢

5.1 GitHub 操作缓慢

即使能够登录外网,也常常遇到连接 GitHub 操作缓慢的问题。

解决方法:在 clone 项目的时候,在 github.com 后面加上 .cnpmjs.com 即可。

例如:

https://github.com/BlueStragglers/DuReader

可以修改成:

https://github.com.cnpmjs.com/BlueStragglers/DuReader