简介
Git是一个免费、开源的、分布式版本控制系统
它使用一个特殊的叫做仓库的数据库来记录文件的变化
仓库中的每个文件都有一个完整的版本历史记录
集中式版本控制系统:
缺点:单点故障问题,如果中央服务器出现故障或者网络连接出错,那么所有人都无法工作了
分布式管理系统
一、配置用户名和邮箱
使用git config命令配置用户名和邮箱
git config --global user.name "username" //有空格需要加双引号,没空格可以省略双引号
git config --global user.email "xxx.xxx@.com"
加global表示对所有的git仓库都有效,不加则只对当前的git仓库有效
git config --global credential.helper store //保存用户名和密码
git config --global --list //查看配置信息
二、本地仓库
可以把本地仓库理解成一个目录,这个目录中所有的文件都可以被Git管理起来
每个文件的删除、修改、新增操作都可以被Git跟踪到
以便任何时候,都可以追踪历史或者还原到之前的某一个版本
三、创建本地仓库
一般通过两种方式:
git init
一种是在自己电脑本地直接创建一个仓库 ---git init
git clone
另一种是从远程服务器上克隆一个已经存在的仓库 ---git clone
.git目录存放了Git仓库的所有数据
四、Git的本地数据管理分为三个区域
工作区
本地工作目录
暂存区
临时存储区域,用于保存即将提交到git仓库的修改内容
本地仓库
包含了完整的项目历史和元数据,是Git存储代码和版本信息的主要位置
五、Git中的四种状态
Untrack
未跟踪:新创建的还没有被Git管理起来的文件
Unmodified
未修改:已经被Git管理起来,但文件的内容没有发生变化,还没有被修改过
Modified
已修改:还没有放到暂存区里面
Staged
已暂存:修改之后,并且已经添加到暂存区域内的文件
git status
查看仓库的状态
git add
添加到暂存区 ;
可以使用通配符:git add *.txt
也可以使用目录,例如:git add .
git commit 提交
只提交暂存区中的内容,不会提交工作区中的内容
git log
查看仓库提交历史记录
git log --oneline
查看简洁的提交记录
六 git reset 回退版本
git reset HEAD^
回退到上一个版本
git reset --soft
要回退的版本ID
git reset --hard
要回退的版本ID
git reset --mixed
要回退的版本ID
误删恢复操作
git reflog 查看操作的历史记录
git reset --hard ID 回退到误删前的版本
七 Git diff
git diff 后面不加参数
默认比较的是工作区和暂存区的差异内容,会显示发生更改的文件和详情信息
git diff HEAD
比较工作区和版本库之间的差异
git diff --cache
比较暂存区和版本库之间的差异
git diff 版本ID 版本ID
比较两个版本之间的差异
HEAD指向分支的最新提交节点
HEAD~
表示上一个版本;HEAD^同样
HEAD~2
表示HEAD之前的两个版本
HEAD~3
表示HEAD之前的第三个版本
举例
git diff HEAD~ HEAD:比较当前版本和上一个版本的差异
git diff HEAD~3 HEAD file3:只会查看file3的差异内容
八、删除文件
直接删除文件之后提交:
ls -ltr:
查看本地仓库中的文件内容
git ls-files:
查看暂存区中的内容
git rm file2.txt:
把文件从工作区和暂存区都删除;
git rm --cached <file>
把文件从暂存区删除,但保留在当前工作区中
git rm -r *
递归删除某个目录下的所有子目录和文件
之后需要执行git commit更新版本库
九、分支
git branch
查看当前仓库的所有分支
git branch <分支名>
来创建一个新分支
git switch dev
切换分支
改用switch命令切换的原因
git checkout dev 默认切换分支 checkout还可以用来恢复文件或者目录到之前的某一个状态
git checkout -b dev 版本ID 恢复到这个分支的这一时间点的状态
git merge dev 将不同的分支合并到当前分支中
回车后Git会自动为我们产生一次提交
git log --graph --oneline --decorate -all
查看分支图
alias定义别名
alias graph = "git log --graph --oneline --decorate -all"
就可以直接只用graph查看图形化的提交记录了
git branch -d dev
删除已经完成合并的分支
git branch -D branch-name
删除没有被合并的分支,-D强制删除
十、解决冲突
如果两个分支修改了同一个分支的同一行代码,Git就不知道要保留哪一个了,就产生了冲突
需要手动解决冲突
git commit -a -m 'xxx'
加上-a参数就可以一个命令完成添加暂存和提交两个动作
等同git commit -am 'xxx'
merge后产生冲突需要手动编辑该文件后,留下想要的内容后再重新提交
git merge --abort
产生冲突时也可以使用 git merge --abort 终止合并
十一、rebase变基
git rebase步骤:
GIt会先找到当前分支和目标分支的共同祖先,
再把当前分支上 从共同祖先到最新提交记录的所有提交
都移动到目标分支的最新提交后面
Merge优点:不会破坏原分支的提交历史,方便回溯查看
其他
git push -u <远程仓库名> <分支名>
从远程仓库获取内容到本地仓库
1、pull命令:git pull <远程仓库名><远程分支名>:<本地分支名>
git pull后,git会自动执行一次合并;如果远程仓库的代码和本地仓库的代码有冲突的话,
合并操作就会因为冲突失败
2、git fetch,只是获取远程仓库的修改,并不会执行合并