本地库操作
(1)本地库初始化
$ git init
Initialized empty Git repository in E:/RuiBoworkspace/Git/ExecSQL/.git/
.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改
(2)设置签名
用户名:tom
Email地址:goodMorning@bucunzai.com
作用:区分不同开发人员的身份,邮件地址甚至可以不存在
辨析:代码托管中心的用户名、邮件地址,和签名这个的用户名、邮件地址,一点关系都没有
项目级别/仓库级别:仅在当前本地库范围生效
git config user.name tom
git config user.email goodMorning@bucunzai.com
系统用户级别:登录当前操作系统的用户范围
git config --global user.name tom
git config --global user.email goodMorning@bucunzai.com
就近原则:项目级别优先于系统用户级别
签名信息保存位置(项目级别) .git/config(系统级别)家目录下 .gitconfig
(3)基本操作
git status #查看工作区、暂存区状态
git add #提交更改到暂存区,如果有设置,那么win的LF换行会被替换为Unix的CRLF换行
CR: 回车(Carriage Return) \r
LF: 换行(Line Feed) \n
① Windows系统里面,每行结尾是 回车+换行(CR+LF),即“\r\n”;
② Unix系统里,每行结尾只有 换行LF,即“\n”;
③ Mac系统里,每行结尾是 回车CR 即'\r'。 Mac OS 9 以及之前的系统的换行符是 CR,从 Mac OS X (后来改名为“OS X”)开始的换行符是 LF即‘\n',和Unix/Linux统一了。
git rm --cached <file>... #删除缓存区中的文件
git commit testa.txt
弹出vim编辑器,输入commit信息
编辑testa.txt后
git checkout -- <file>... #撤销更改操作
git add testa.txt
git commit -m "第二次提交" testa.txt #使用-m参数,就不用进vim编辑器了
(4)查看日志
git log #查看版本的历史记录,原始,详细
git log --pretty=oneline #每条日志只显示一行,显示完整hash值
git log --oneline #hash值只显示一部分
git reflog #显示指针,需要移动的次数,HEAD@{移动到当前版本需要的步数}
(5)版本回退
git reset --hard 6f5f4a9 #靠索引值返回到前面
git reset --hard HEAD^ #往后退一个版本,^^就是两个,^^^三步,只能后退
git reset --hard HEAD~3 #后退3步简易写法,也是只能后退
git reset --hard HEAD #恢复到当前(最后一次提交)状态
git reset三个参数的对比
--soft:仅仅在本地库移动HEAD指针
--mixed:在本地库移动HEAD指针、重置暂存区
--hard:在本地库移动HEAD指针、重置暂存区、重置工作区
(6)比较文件
git diff [文件名] #对比工作区文件和暂存区文件,不带文件名的话会比较多个文件
git diff HEAD^ #对比工作区和历史版本
(7)git的分支
git branch -v #查看分支,-v表示查看详细信息
git branch hot_fix #创建hot_fix分支
git checkout hot_fix #切换分支到hot_fix
合并分支
#首先切换到要合并的那个分支上,这里是要合并到master
git checkout master
#git merge 要合并的分支
git merge hot_fix
解决冲突
两个分支都对同一个地方修改,并【提交】后,在合并时会发生冲突,如下,会有(master|MERGING)字段表示需要手动解决冲突
vim查看文件后,发现
<<<<HEAD那行到=====那行之间,是当前分支(master)的内容
hotfix-master
====到>>>>hot_fix那行之间,是hot_fix的内容
hotfix_hotfix
解决的话,删除特殊标记,并调整内容,然后
git add testa.txt
git commit -m '解决冲突的信息' #不能够带文件名
(8)hash运算校验工具
常见的hash算法有MD5、SHA-1,git底层采用的是SHA-1算法
MD5长度固定,32位十六进制数
【可自行百度hash.exe】
git的分支管理依赖于指针,主要是创建、移动指针
远程库操作
(1)给远程库取别名
git remote -v #查看有没有取了别名的地址
git remote add origin https://github.com/zhegeshijiehuiyouai/test.git #以后就用origin来代表这个地址了
(2)推送操作
git push origin master #别名+分支
弹出github的登录框,输入自己的github账号密码即可
(3)克隆项目到本地
git clone https://github.com/zhegeshijiehuiyouai/test.git
① 完成地把远程库下载到本地
② 创建origin远程地址别名
③ 初始化本地库
(4)邀请他人加入项目
点击Settings
添加对方github账号
(5)拉取操作
git pull # 等于 fetch + merge
git fetch origin master #只拉取
git checkout origin/master #查看拉取下来的文件
git merge origin/master #合并拉取的分支到本地分支
(6)协同开发时的冲突解决
有人在我们之前提前push了,我们push时就会报错,那么久需要先pull
git pull origin master
#然后进入merge状态,会有(master|MERGING)字段表示需要手动解决冲突
#和本地一样,vim编辑修改后再提交就行
git commit -m "resolve conflict" #和本地一样,不能带文件名
git push origin master
(7)提交Pull request及Merge request
① 找到需要fork的项目,并fork它,这就是一个远程库的clone
② 利用git clone将代码拉取到本地,修改之后,git push提交到自己的远程库
git clone https://github.com/atguigu2018east/huashan.git xxxxx
#一顿操作
git commit -m "注释"
git push origin master
③ 提交Pull request
④ 系统会列出所做的修改,确认后我们点击Create pull request
⑤ 在弹出的页面中输入标题和内容,点击Create pull request提交
⑥ 【项目创建者】那边就可以看到提交的request,点击具体的request
⑦ 【项目创建者】可以通过这里查看提交信息,对代码进行审核
⑧ 【项目创建者】也可以回复提交者,确认无误后可以点击Merge pull request合并代码
⑨ 【项目创建者】填写合并的信息,并点击Confirm merge
⑩ 【项目创建者】现在可以回到本地库,拉取最新的代码了
git pull origin master