一、Git 简介
Git是一个快速的、可扩展的分布式版本控制系统。它将每次变化的文件作快照后,记录在一个系统中。每次提交更新,都会把所有文件的信息做一遍快照,然后保存一个指向该快照的索引。
Git 结构
对于任何一个文件,Git内部只有三种状态:已修改,已暂存和已提交。
- 修改表示已修改了某个文件,但是没有提交暂存
- 暂存表示已将文件放入暂存区
- 提交表示将当前所有文件更新持久化到本地版本库中
Git在工作和使用时,可以分为三个区域:工作目录、暂存区、版本库。
- 工作目录:就是项目的目录
- 暂存区:每次修改完文件,都要把修改的文件放入暂存区才能提交到版本库,可以将暂存区理解为缓存
- 版本库:本地仓库,里面按照不同的提交,将每次提交分为了一个个版本,可对某一个版本进行回滚操作
二、Git 使用
1. 初始化
进入工作目录后使用命令:
git init
将当前目录初始化成 Git 的一个仓库。
还可以进行用户名邮箱的个性化设置:
git config --global user.name xxx
git config --global user.email xxx@xxx.com
第一条命令设置用户名,第二条命令设置邮箱,然后我们就能在家目录下看到一个 .gitconfig 文件,里面设置了用户名和邮箱。
[user]
name = xxx
email = xxx@xxx.com
2. 下载远程库
git clone xxx
最经常使用的命令,将xxx地址库的下载到当前工作目录中。
3. 版本库基础命令
添加暂存区
git add xxx
git add .
git commit -m "this is a explain"
用 add 命令将 xxx 文件添加到暂存区,使用 add . 将所有文件加入暂存区。然后使用 commit 命令并用 -m 参数写上备注提交版本到本地仓库。
查看当前仓库状态
git status
命令将显示出当前仓库有无修改文件需要放到暂存区,并且给出命令建议。
回滚仓库相关命令
git log // 查看当前分支所有版本
git reset --hard HEAD^ // 往前回滚一个版本
git reset --hard HEAD^^ // 回滚两个版本
git reset --hard HEAD~100 // 回滚一百个版本
git reset --hard version_num // 回滚到指定版本
git reflog // 查看HEAD指针历史移动纪录
Git 的目录结构是类似树型的,有一个HEAD指针指向当前所在的版本,这里的回滚都是将HEAD指针往前移动。
撤销删除相关命令
git rm --cached xxx // 将xxx从暂存区撤销
git restore xxx // 将xxx的修改撤销
restore 的撤销是针对于暂存区的,将文件恢复成暂存区里文件的模样,如果暂存区为空,那就恢复成当前版本的模样。
远程连接仓库
git remote add origin www.xxx.com
将本地仓库关联至 www.xxx.com 地址的仓库。
git push -u // 将本地仓库推送至远程仓库,第一次需要加 -u
git push origin branch_name // 将分支推送至远程仓库
git pull // 将远程仓库的当前分支与本地仓库的当前分支合并
4. 分支
当使用git init命令后,本地仓库初始化后会自动创建 master 主分支,之前的所有命令都是默认在主分支上进行的。为了多人协作,才有了分支的设定,每人或多人单独写一个分支,最后将分支合并到主分支,保证了分支之间的独立性,以便同一时间对仓库进行改动。
创建分支
git checkout -b branch_name // 创建分支并切换到该分支
git branch branch_name // 创建分支
删除分支
git branch -d branch_name
查看所有分支
git branch
合并分支
git merge branch_name // 将branch_name合并到当前分支
git pull origin branch_name // 将远程仓库的branch_name分支与本地仓库的当前分支合并
分支合并若合并过来的分支不是当前分支的子集,会产生冲突。这时,打开冲突文件,git会帮你把冲突的位置标注出来,我们只需要手动解决冲突位置,然后保存文件,就算合并完成。然后删除合并分支。
本地分支同步远程分支
git push --set-upstream origin branch_name // 设置本地的branch_name分支对应远程仓库的branch_name分支
git push -d origin branch_name // 删除远程仓库的branch_name分支
当本地分支和远程分支关联后,再使用git pull和git push拉取和推送。