# 1.什么是git

git跟踪的是修改,而不是文件

git是分布式版本控制工具,用来协助开发者进行程序版本控制

# 2.常用指令

# 2.1初始化版本库

// 初始化
git init
// 将修改提交到本地暂存区
git add 文件名
// 将修改从暂存区提交到本地分支
git commit -m "提交信息"
// 将本地的提交同步到远程分支
git push

# 2.2查看仓库状态

// 查看工作区状态
git status
// 查看文件修改状态
git diff
// 查看提交日志
git log

# 2.3版本回退(本地分支)

// 回退指定步骤,HEAD表示当前版本,这里是更改HEAD的指针来达到版本回退的效果
git reset --hard HEAD~1
// 回退到指定版本
git reset --hard 提交id
// 查看git命令日志
git reflog

# 2.4工作区和暂存区

.git文件夹所在的目录就是工作区

.git文件夹也叫错git版本库,而版本库里有暂存区本地分支

# 2.5撤销修改

// 撤销工作区中对文件的修改,和当前分支版本或者暂存区的状态保持一致
git checkout -- readme.txt
// 切换到目标分支
git checkout dev
// 将修改后添加到暂存区的文件回退到工作区
git reset HEAD readme.txt

# 2.6文件删除

// git删除文件,删除后直接commit即可
git rm <file>
// 和本地删除后再git add <file>效果一样

# 3.远程仓库

# 3.1本地库和远程仓库关联

// 将本地仓库关联GitHub仓库,remote:远程的,origin:仓库名
git remote add origin 远程仓库链接
// 将本地分支推送到远程仓库,-u将本地分支和远程分支关联
git push -u origin master
// 删除远程库,本质是解除本地库和远程库的关联
git remote rm <name>
// 查看远程库信息
git remote -v

# 3.2克隆远程仓库

git clone 远程仓库url

# 4.分支管理

# 4.1新建分支

// 创建dev分支,并切换到dev分支
git checkout -b dev
// 等价于
git branch dev
git checkout dev
// 查看当前分支
git branch
// 新版创建并切换分支,更容易理解
git switch -c dev

# 4.2合并分支

// 将dev分支合并到当前分支
git merge dev
// 删除指定分支,本质是删除指针
git branch -d dev

1.顺着dev分支(图中为hotfix)往前走能够到达另一个master分支时,此时的合并本质上是更改当前master的指针,和dev指针指向同一个提交

2.若不能,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的公共祖先(C2),做一个简单的三方合并

# 4.3解决本地不同分支合并时的冲突

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交

# 4.4 克隆远程dev分支

// 创建和远程dev分支关联的本地dev分支,且切换到该分支上
git checkout -b dev origin/dev
// 本地dev分支和远程dev分支进行关联
git branch --set-upstream-to=origin/dev dev

# 4.5解决远程推送冲突

// 先git pull拉取最新的远程分支
git pull
// 在本地和并解决完冲突后再提交推送至远程仓库