0%

Git

一、Git是什么

image

​ Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。

主要特点

  • 开源免费,使用广泛
  • 强大的文档(代码)的历史版本管理,直接记录完整快照(完整内容,而非差异),支持回滚、对比
  • 分布式多人协作的的代码协同开发,几乎所有操作都是本地执行的,支持代码合并、代码同步
  • 简单易用的分支管理,支持高效的创建分支、合并分支

二、概念汇总

工作区(Workspace) 就是在电脑里能看到的代码库目录,是我们搬砖的地方,新增、修改的文件会提交到暂存区
暂存区(stage 或 index) 用于临时存放文件的修改,实际上它只是一个文件(.git/index),保存待提交的文件列表信息。
版本库/仓库(Repository) Git的管理仓库,管理版本的数据库,记录文件/目录状态的地方,所有内容的修改记录(版本)都在这里。
服务端/远程仓库(origin 或 remote) 服务端的版本库,专用的Git服务器,为多人共享提供服务,承担中心服务器的角色。本地版本库通过push指令把代码推送到服务端版本库。
本地仓库 用户机器上直接使用的的的版本库
分支(Branch) 分支是从主线分离出去的“副本”,可以独立操作而互不干扰,仓库初始化就有一个默认主分支master
(HEAD) HEAD类似一个“指针”,指向当前活动 分支最新版本
提交(Commit) 把暂存区的所有变更的内容提交到当前仓库的活动分支。
推送(Push) 将本地仓库的版本推送到服务端(远程)仓库,与他人共享。
拉取(Pull) 从服务端(远程)仓库获取更新到本地仓库,获取他人共享的更新。
获取(Fetch) 从服务端(远程)仓库更新,作用同拉取(Pull),区别是不会自动合并。
冲突(Conflict) 多人对同一文件的工作副本进行更改,并将这些更改合并到仓库时就会面临冲突,需要人工合并处理。
合并(Merge) 对有冲突的文件进行合并操作,Git会自动合并变更内容,无法自动处理的冲突内容会提示人工处理。
标签(Tags) 标签指的是某个分支某个特定时间点的状态,可以理解为提交记录的别名,常用来标记版本。
master(或main) 仓库的“master”分支,默认的主分支,初始化仓库就有了。Github 上创建的仓库默认名字为“main
origin/master 表示远程仓库(origin)的“master”分支
origin/HEAD 表示远程仓库(origin)的最新提交的位置,一般情况于“origin/master

image

三、基本操作

image

1
2
3
4
5
6
7
8
9
git config --global user.name "name"	# 设置用户名
git config --global user.name "email" # 设置邮箱
git init # 设置当前目录为git仓库
git commit -a # 指令省略了add到暂存区的步骤,直接提交工作区的修改内容到版本库,不包括新增的文件。
git fetch, git pull # 都是从远程服务端获取最新记录,区别是git pull多了一个步骤,就是自动合并更新工作区。
git checkout ., git checkout [file] # 会清除工作区中未添加到暂存区的修改,用暂存区内容替换工作区。
git checkout HEAD ., git checkout HEAD [file] # 会清除工作区、暂存区的修改,用HEAD指向的当前分支最新版本替换暂存区、工作区。
git diff # 用来对比不同部分之间的区别,如暂存区、工作区,最新版本与未提交内容,不同版本之间等。
git reset # 是专门用来撤销修改、回退版本的指令,替代上面checkout的撤销功能。

四、配置文件

image

Git有三个主要的配置文件:三个配置文件的优先级是① < ② < ③

  • ① 系统全局配置(–system):包含了适用于系统所有用户和所有仓库(项目)的配置信息,存放在Git安装目录下C:\Program Files\Git\etc\gitconfig
  • ② 用户全局配置(–global):当前系统用户的全局配置,存放用户目录:C:\Users\[系统用户名]\.gitconfig
  • ③ 仓库/项目配置(–local):仓库(项目)的特定配置,存放在项目目录下.git/config
1
2
3
4
5
6
7
8
9
# 查看git配置
git config --list
git config -l
# 查看系统配置
git config --system --list
# 查看当前用户(global)全局配置
git config --list --global
# 查看当前仓库配置信息
git config --local --list

gitignore 文件示例

1
2
3
4
5
*.txt	# 忽略所有“.txt”结尾的文件
!lib.txt # lib.txt除外
/temp # 仅忽略项目根目录下的temp文件,不包括其它目录下的temp,如不包括“src/temp”
build/ # 忽略build/目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt