@H_
403_0@
在开始任何命令之前,先上一张图,下面的所有的命令都是围绕这张图展开的
@H_
403_0@

常用命令
初始化本地库
git init
@H_
403_0@会
生成一个.git结尾的隐藏
文件
查看工作区文件的状态
git status
@H_
403_0@红色表示新增或者被
修改的
文件,绿色表示被管理(
添加进缓存区)的
文件,
git status
命令查看不到被
上传到本地库的
文件
@H_
403_0@在这里再拓展一个命令:
git checkout --file
可以撤销在工作空间对这个
文件的
修改
git add .
git add [文件名]
把项目移除出缓存区
git -rm --cached [名称]
提交到本地库
git commit -m '描述信息'
查看历史提交
git log
git reflog
回退到上一个版本
@H_
403_0@假设我们的版本迭代顺序是: 版本1 -> 版本2 -->版本3
git log // 目的是找到历史版本的md5 tag值
git reset --hard [md5格式的tag值]
// HEAD表示当前版本
// ^ 表示上一个版本,100个^表示 : 第前100个版本
git reset --hard HEAD^
git reflog // 目的是找到历史版本的md5 tag值
git reset --hard [md5格式的tag值]
@H_
403_0@找回已经
删除的
文件是有前提的,什么前提呢?
前提是: 这个被删除的文件曾经被上传到过本地库
@H_
403_0@
第一种情况:,我们在本地将
文件删除了,并且这次更改的操作被commit到本地库,
那么我们回退一下版本不就把文件找回来了?
@H_
403_0@
第二种情况:,我们在本地
删除了这个
文件,但是我们还没有将这次操作commit提交到本地库,于是我们使用下面的命令,目的是,重新检出
文件
git reset --hard [指针HEAD的hash值]
分支
@H_
403_0@
分支的目的是隔离不同的环境
@H_
403_0@
指针的概念: 比如说在master是已经上线了的主分支,它里面存在1000个文件,还有第二个叫dev的开发分支,在这个所有的新功能的拓展都在这个用来开发的分支上编写,假设又新增了100个文件,其实这个叫dev的分支器中真正保存的是自己新增的100个文件,其他的1000个文件通过指针的方式指向master分支
查看当前的分支
git branch
创建分支
git branch [分支名]
git checkout -b [分支名]
git branch -d [分支名]
合并分支
git merge [分支名]
如何紧急修复bug
@H_
403_0@

@H_
403_0@如上图: 采用分支的特点,可以灵活的
解决线上的bug,为什么非的新开辟一个临时分支呢? 因为如果想让dev分支去
修改bug是一个得不偿失的行为,很可能这时dev分支的开发人员已经写了很多天的新
代码了,让dev去修复bug,就的先让dev将本地的未写完的
代码提交到本地库,然后从master分支上拉取
代码到本地,这样诚然可以
修改bug,但是
修改完了后怎么提交呢? 没法提交啊,新
代码往哪里放?
@H_
403_0@
综上:,需要新开辟一个临时分支,临时分支,让临时分支去
修改bug,然后让master去merge这个临时分支,bug修复后,临时分支可以剔除
@H_403_0@本地的当前项目存在多个分支的话,做了个改动后得先提交到本地库才能再切换分支
产生冲突时报错
@H_
403_0@在merge时,难免出现
代码冲突,向下面这样报错
$ git merge dev
Auto-merging index2.html
CONFLICT (content): Merge conflict in index2.html
Automatic merge Failed; fix conflicts and then commit the result.
@H_
403_0@这时需要我们手动去
解决,然后重新 add到缓冲区,再commit到本地库,git会我们
生成类似下面这样的字符串
hello one git
9 <<<<<<<<<<<HEAD
10 hello two git edit by hot_fix
11 ===========
12 hello two git edit by master
13 >>>>>>>>>>> master
14 hello three git
github
默认的原始地址:
git remote add origin https://github.com/zhuchangwu/CIOC.git
git push -u origin master
修改:
git remote add origin https://用户名:密码@github.com/zhuchangwu/CIOC.git
git push -u origin master
执行 ssh-keygen 命令: 在本地生成公钥个私钥
默认会生成在 ~/.ssh目录下面
id_rsa.pub 是公钥
id_rsa 是私钥
@H_
403_0@我们需要做的就是拷贝公钥的
内容配置进github中,再从github中
获取到下面的信息,回到本地库进行认证
git remote add origin git@github.com:zhuchangwu/CIOC.git
git push -u origin master
从github上克隆项目
git clone [ssh地址]
@H_
403_0@项目被克隆到本地后,如果这个项目存在多个分支,我们同样可以使用
git checkout [分支名]
切换到不同的分支下面
新建仓库
@H_
403_0@在github上新创建仓库后,她会给我们一些
提示信息,
比如说,如何初始化本地库,如何将本地库和远程库管理起来,如何往远程库推送代码,如下图
@H_
403_0@

@H_
403_0@上面有一行命令是
git remote add origin git#githubXXX.git
,什么意思呢? 这其实是给后面那一长串地址取别名叫 origin,从这以后命令中,origin==后面那一长串
往github上推送代码
@H_
403_0@将本地库中的
代码推送上去
git push -u origin master
git push origin master // -u可以省写
从github上面拉取代码
@H_
403_0@拉取到工作区
git pull origin master
从github拉取的本地库
git fetch origin 分支
实用的rebase
(变基)
-
实用情景1: 小王为了开发在线聊天功能,前前后后往本地库里面提交了10次,为了方面别人查看,于是小王使用下面的命令合并提交记录
// 从最新的commit记录往下数,合并n条记录(包含n)
git rebase -i HEAD~n
// 从最新的commit记录往下合并,直到md5为指定值的那条commit(包含这条commit)
git rebase -i md5值
- 目的是将下面的存在分支的提交记录,整合成没有分支的提交记录
@H_
403_0@整合前
@H_
403_0@

@H_
403_0@整合后
@H_
403_0@

git checkout dev
git rebase master
git checkout master
git merge dev
// 查看
git log --graph
- 情景三: 当本地库对A功能新添加了一些代码,但是在开始新的开发前需要从远程的github中拉取一些其他人新增的关于A功能的代码时,两者合并不仅仅会产生冲突,还存在分支,使用rebase解决
git fetch origin dev
git rebase origin/dev
@H_
403_0@git中存在三个
配置文件: 优先级: 当前项目的
配置文件优先级最高,最次是系统的
配置文件
第一个: 位于 项目/.git/config
@H_
403_0@它里面的配置信息仅对当前项目有效,比如我们前面给ssh串取别名叫origin,就是对当前项目有效
git config --local user.name 'XXX'
git config --local user.email 'XXX'
第二个: 位于 用户目录/.gitconfig
git config --global user.name 'XXX'
git config --global user.email 'XXX'
@H_
403_0@linux:
/etc/.gitconf
@H_
403_0@acer :
C:\Users\acer\.gitconf
git的忽略文件
@H_
403_0@凡是和.git目录在同一级目录下面的
文件都会被git检测并管理起来,被管理起来就意味着这些
文件终究会被推送到远程库,但是有一些数据
文件被推送出去会产生安全性的问题,如果我们不想让这些
文件被git管理就可以使用git的忽略
文件
@H_
403_0@创建.gitignore结尾的
文件,git会读取这里面的
文件,并且会忽略这里面配置的
文件
.gitignore
files/
*.txt
@H_403_0@github搜索 gitignore有惊喜
@H_
403_0@最后再附上一张总结图:
@H_
403_0@

@H_403_0@到这里本文又行将结束了,总体的节奏还是挺欢快挺带劲的,我是bloger-赐我白日梦,如果有错误欢迎指出,也欢迎您点赞支持...