git实用指南
Git实用指南 -- RDG
Git的本地结构:
添加“新建/修改”
git add [file name]
将工作区的“新建/修改”添加到暂存区
git rm命令是把建立的版本库索引(index)和那个文件一起删除了。加上cached之后,就只删除索引,不删除文件本身。
与git add相应的取消操作并不是git rm,而是git rm –cached。这是需要非常注意的地方。
git rm --cached [file name]
撤销暂存区所有“新建/修改”
git reset --hard HEAD
撤回git add
使用场景你错误提交git add了N多文件,其中有你不希望提交的
放弃所有的暂存区修改可以使用,
git reset HEAD . 放弃所有的暂存区修改可以使用
git reset HEAD readme.md 来放弃指定文件的缓存
状态查看
git status
查看工作区、暂存区状态
Git add new.text
提交
git commit -m “commit message” [file name]
git commit -am"commit message"
将暂存区的内容提交到本地库
撤回提交
1,还在本地没有推送到远端
git add . //添加所有文件
git commit -m “本功能全部完成”
此时还没git push
git reset --soft HEAD~1
如果是撤回两个连续提交 git reset --soft HEAD~2
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留
2,错误提交, 并且推送到远端了,撤回的办法:
git reset --soft aa909cff
git push –-force 或 git push -f -u origin master
3,通过反做来撤销一个提交,会产生新的一个提交
git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861
git commit -m “revert add text.txt”
git push
拉取
git merge和git pull时代码与本地工作区未提交的代码有冲突
git提示your local changes to the following files would be overwitten by merge
1,按照提示提交本地工作区的代码 , 再merge
2,不提交代码 , git stash(隐藏当前工作区),再进行git merge,最后git stash pop(恢复隐藏的工作区);
合并
大多数情况是没有冲突的;
只解决一次冲突,分别对应的是当前分支最新提交和合并分支的最新提交的冲突
- 合并之后产生一个新的提交
- commit信息按照时间顺序合并
冲突未能解决可放弃本次合并
git merge --abort
解决冲突
冲突的表现
冲突的解决
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m “日志信息”
注意:此时commit 一不能带具体文件名
撤销合并
reset 到 merge 前的版本,然后再重做接下来的操作,要求每个合作者都晓得怎么将本地的 HEAD 都回滚回去:
git checkout [行merge操作时所在的分支]
git reset --hard [merge前的版本号]
查看历史记录
git log
git log --oneline
时光穿梭机(前进后退)
基于索引值操作[推荐]
git reset --hard [局部索引值]
git reset --hard a6ace91
使用^符号:只能后退
git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退n 步
使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退n 步
reset 命令的三个参数对比 默认—mixed
–soft 参数 仅仅在本地库移动 HEAD 指针
–mixed 参数 在本地库移动 HEAD 指针 + 重置暂存区
–hard 参数 在本地库移动 HEAD 指针 + 重置暂存区 + 重置工作区
文件对比
git diff [本地库中历史版本] [文件名]
千里之行,始于切糕
1,切换分支
git checkout 分支名
2,脱离分支切换历史版本
git checkout commit_id版本号
3,拷贝其他分支的文件到本地
git checkout 分支名 文件名
举个栗子:如果只是简单的将feature分支的文件f.txt copy到master分支上;
git checkout master
git checkout feature f.txt
如果突然不想合并过来 ,想还原master
git checkout master f.txt
4,拷贝其他历史版本的文件到本地
git checkout commit_id版本号 文件名
5,放弃某个文件的改动
git checkout文件名
6,放弃所有工作区的修改
git checkout .
7,切换到指定标签
git checkout 标签名
新建分支
Git checkout -b v1230
Git push –set-upstream origin v1230
便民套餐
git commit -am关联马蜂窝 && git pull && git push
Work flow
热修复
Bug出现:
基于master创建hotfix分支
git checkout -b hotfix
1,微小改动,在本地环境就可以完成验证的
验证通过后,发布人员在master分支merge 该hotfix分支后发布;
2,需要在测试环境验证的
测试环境git checkout hotfix ,测试人员进行验证
验证通过后,发布官在master分支merge 该hotfix分支后发布;
Git checkout master
Git merge hotfix
Git push
生产服务器 git pull
标签
git tag -a tagName -m “my tag” (新建本地标签)
git tag -a tagName 9fceb02 -m “my tag” (给指定commit版本打标签)
git push origin v20191205 (本地标签推送到远端服务器)
git tag (显示所有标签)
git show tagName (显示标签详情)
git tag -d v0.1.2 (删除本地标签)
git push origin :refs/tags/ (远端删除标签)
example: git push origin :refs/tags/v0.1.2 远端删除
遇事不对 , 莫要慌 , 这本git宝典 , 翻开它
祝大家切糕愉快