目录
1. 使用brew安装git, 在本地生成公钥添加到git上
10. 分支合并过程中的冲突处理
一、Git版本控制下的三种工程区域和文件状态
工程区域
1. 版本库(Repository):隐藏目录.git存放了Git用来管理工程的所有版本数据
2. 工作区(Working Directory):日常工作的代码文件所在文件夹
3. 暂存区(Stage):也称之为索引(index)
文件状态
1. 已提交(committed):文件已被安全保存在本地数据库
2. 已修改(modified):修改了某文件,但未提交保存
3. 已暂存(staged):把已修改的文件放在下次提交时要保存的清单中
二、基本操作
1. 使用brew安装git, 在本地生成公钥添加到git上
配置Git并生成SSH公钥
2. 从git上下载代码到本地
$git clone 地址
p.s. 如果你所在项目git服务器已支持git-lfs,对二进制文件进行了区别管理,那么克隆务必使用 git lfs clone 地址,否则克隆操作无法下载工程中的二进制文件,项目不完整。
3. 查看工作区
$git diff 分支 // 查看节点/分支之间的差异
$git diff --cached // 当前索引和上次提交间的差异
$git diff 分支 --name-status //看差异文件列表
$git status // 显示工作目录和暂存区状态
4. 新增/删除/移动文件到暂存区
$git add // 新创建的文件需要add,曾提交过的旧文件修改后不用add
$git rm // 将指定文件彻底从当前分枝的暂存区删除,因此它从当前分支的下一个提交快照中被删除
// 从本地磁盘删除,再git commit,和上述效果相同
$git mv // 移动文件,也可用于重命名文件
$git mv 文件 目标目录
$git mv 旧文件名 新文件名
5. 提交更改文件,保存到本地数据库
$git commit file_name -m "备注"
$git commit -am "备注" // 批量提交所有在暂存区的改动文件
$git commit amend // 修改最近提交的版本的提交信息,修改完后会新生成一个节点
6. 推送至远端仓库
$git push origin branch_name(远端服务器分支名) // 把新建的分支push到远端名为origin的服务器
$git push -f origin branch_name(远端服务器分支名) // 强制推送
7. 分支管理
查看分支
$git branch //查看本地分支
$git branch -r //查看远程分支
$git branch -a //查看本地和远程所有分支
新建分支
$git checkout -b new_branch // 从当前分支copy出新的开发分支,并切换到新分支
删除分支
// 删除本地分支
$git branch -d branch_name
$git branch -D branch_name // 大写表示强制删除,小写删不了时可用
// 删除远端分支
$git branch -d -r branch_name(本地分支名)
$git push origin branch_name(远端分支名)
切换分支
$git checkout branch_name
$git checkout -f branch_name // 强制切换
获取远端分支
// git pull 从远端服务器获取某分支更新,再与本地指定分支合并
$git pull origin remote_branch:local_branch
// 远程指定的分支和本地指定的分支相同时,可省略为:
$git pull origin remote_branch
// git fetch 从远端服务器获取某分支更新,不会与本地指定分支合并(多了一个本地分支),确认符合预期后再决定是否手动合并
// git fetch + git merge = git pull
$git fetch origin remote_branch:local_branch
// 远程指定的分支和本地指定的分支相同时,可省略为:
$git pull origin remote_branch
合并分支
// 从指定分支合并到当前分支
$git merge branch_name
$git merge 源分支 目的分支
$git rebase branch_name // 日志可读性很差,公共分支上不要用这种合并方式
![](https://i-blog.csdnimg.cn/blog_migrate/2e797a446029d7aa03a1457e848bb54c.png)
![git rebase](https://i-blog.csdnimg.cn/blog_migrate/b6806b50991675e3dfdd5bf9956a90c6.png)
8. 查看日志
$git log // 查看所有日志
$git log -1 // 查看最新一条日志
$git reflog // 查看最近做的修改列表
9. 撤销操作(谨慎使用)
// 撤销某些git add/commit 操作,工作区内容回退到历史提交节点
$git reset commit_id
$git reset --hard commit_id
// 回退本地"所有"修改而未提交的文件内容(谨慎,小心清空了所有缓存区)
$git checkout .
// 回退本地"某个"修改而未提交的文件内容
$git checkout file_name
// 工作区回退到某个版本
$git checkout commit_id
10. 分支合并过程中的冲突处理
$git merge 源分支 目标分支
// 发生冲突,修改冲突文件
$git add 冲突文件
$git commit -m "解决冲突"
三、工程开发常用
1.新建分支开发
//在父分支(release/1.0.x)下建本地分支
$ git checkout -b your_branch(feature/20210707_repeat_load_check)
//在云端建新分支
$ git push origin remote_branch(feature/20210707_repeat_load_check)
//将云端和本地分支同步
$ git branch --set-upstream-to=origin/remote_branch your_branch
$ git pull
2. 查看与源分支差别(修改部分)
$ git status
3. 修改提交到云端分支
$ git add .
$ git commit -m "commit"
$ git push
4. 开发分支提测,需要合并主分支
$ git checkout dev
//主分支合并到开发分支
$ git merge master
$ git push -u origin dev
5. merge 错了怎么回去?回滚到上个版本
//查看上个版本
$ git log
//回滚
$ git reset --hard HEAD^(^表示上个版本,^^表示上上个版本)
//重新提交
$ git add.
$ git commit -m "commit"
具体有没有合并上去,去github查看commit
6. 开发分支(dev)达到上线标准,合并到主分支
//开发分支合并到主分支
$ git checkout dev
$ git pull
$ git checkout master
$ git merge dev
$ git push -u origin master
//master改动了,需更新开发分支代码
$ git checkout master
$ git pull
$ git checkout dev
$ git merge master
$ git push -u origin dev
7. 查看日志
$ git log --pretty=format:"%h %s" --graph
$ git log
8. 重命名远程分支
//删除远程分支
$ git push --delete origin remote_branch
//修改本地分支名
$ git branch -m your_branch your_new_branch
//推送本地分支
$ git push origin new_remote_branch
//如果原本的远程分支已经关联本地了且已经是错误的名字了,则需要重新关联一下新的本地分支和远程分支
$ git branch --set-upstream-to=origin/new_remote_branch your_new_branch
9. 撤销、放弃本地修改
10. 远程分支回滚
//删除远程分支
$ git push --delete origin remote_branch
//推送本地分支
$ git push origin new_remote_branch
//重新关联一下新的本地分支和远程分支
$ git branch --set-upstream-to=origin/new_remote_branch your_new_branch