一、git初始化和用户名密码配置
1.用户名和邮箱设置(--global 设置系统级别的用户可与远程代码库交互,不加--global管理的就是本地仓库)
git config --global user.name yourname //设置用户名
git config --global user.email xxx@cc.com //设置邮箱
2.初始化本地仓库(初始化后,本地会保存一个隐藏文件 .git)
git init
3.远程拉取代码
git clone xxxxxx //git仓库拉取代码 具体根据ssh 或 http等
二、代码提交
1.代码管理分区: 工作区 -》暂存区 -》本地仓库 -》远程仓库
2.我们新建一个文件或修改一个文件内容后,需要先将代码提交到暂存区:
git add ./ #提交当前的所有文件到暂存区
git add a.txt #提交a.txt文件到暂存区
3.查看状态:根据命令后的提示,可看到当前所在分支,文件是否修改(修改添加红色)
git status
4.如果提交到暂存区的修改需要否掉(清掉暂存区的修改,前一步或多个暂存区的修改新增会被清掉,慎用。)
git checkout .
5.将暂存区的文件提交到本地仓库
git commit -m 'first commit xxx.txt' xxx.txt #将某个文件的修改提交到本地仓库xxx.txt是文件名
git commit -m 'all commit' #暂存区的所有修改、新增都提交到本地仓库
6.查看日志
git log #查看所有日志
git log --pretty=oneline #每个日志一行
git reflog #查看简短日志
查看日志的作用是列出我们之前操作的步骤,每个步骤有生产一个哈希值记录步骤,用于跳转到某个版本,reflog 显示的是每个步骤哈希值得一部分(后面切换到之前的版本可以用简短的哈希值)
7.跳转到之前的某个版本(即基于哈希索引值切换版本,切换后发现代码回到了对应版本的状态)
git reset --hard 0024f6b #切到0024f6b这个版本
git reset --hard HEAD^ #向后回退一步 一个 ^ 符号
git reset --hard HEAD^^ #向后回退两步 两个 ^^ 符号
git reset --hard HEAD~3 #向后回退3步
版本切换 git reset 但是它的参数有三个不同的选择: --soft --mixed --hard
--soft : 仅仅在本地仓库移动HEAD指针(版本)
--mixed:本地仓库移动HEAD指针,重置暂存区
--hard: 本地仓库移动HEAD指针,重置暂存区,重置工作区
soft 相当于本地库回退或前进了版本,前面的从暂存区提交到本地库的去掉了(相当于之前暂存区的版本没有提交到本地库)
mixed相当于本地库和暂存区回退或前进了版本,相当月工作区的没有提交到暂存区再提交本地库
hard 相当于 本地库、暂存区、工作区都回退、前进了版本,暂存区没有没提交本地仓库的代码、工作区没有要提交暂存区的新代码
所以我们git版本回退操作,用hard比较多,因为三个区的代码在同一水平线
8.删除文件
当我们删除一个文件后,提交暂存区,提交到本地仓库。其实我们的版本库里并没有将删除的文件真的删除到,会把之前的文件放在之前的版本里,要找回文件,只需要回退到删除文件之前的版本,就可以找到文件。(注意:找回文件的前提是,之前的文件已经提交到了本地库,纳入了本地库版本管理)
9.比较文件差异
git diff [文件名] #将工作区的修改与暂存区的对比 不带文件名,就是比较多个文件
git diff HEAD [文件名] #暂存区的 与 本地库对比 HEAD可以用历史版本,即与历史版本比较
三、git的分支
1.什么是分支?
就是在版本管理中,同时推进多个任务的开发。
比如:a在主分支上开辟一条分支,a用户写a的功能代码,提交到a的分支上,b在主分支上开辟一条分支,b用户写b的功能代码,提交到b的分支上。
2.分支开发的好处是:
2.1同时并行推进多个功能开发,提高开发效率
2.2各个分支开发过程中,如果某个分支开发失败,不会对其他的分支有任何的影响。将失败的分支删除重新开始即可。
3.分支操作
1.git status 可以看到 当前所在的分支
2.查看所有的分支,当前所在的分支
git branch -v
git branch
3.创建分支
git branch test_fix #创建名字为test_fix的分支
4.切换分支
git checkout test_fix #切换到test_fix分支上去
5.合并分支(如果要将 test_fix分支合并到master分支上,那么就需要先切换到master分支上,然后合并)
git merge test_fix
6.合并冲突
6.1 首先在master分支 某个文件的第6行添加 eee代码,add -》commit 提交到当前master版本库
6.2 切换到test_fix分支 在同一个文件上的第6行添加fff代码,add-》commit提交版本到当前test_fix分支上
6.3 在test_fix分支上将master分支上的代码合并过来, git merge master ####产生了冲突(也就是说,在不同的分支上,不同的用户修改的了同一个文件,产生了冲突)
6.4手动编辑去掉冲突标记符号,编排整理代码到满意为止,保存, add-》commit,注意 commit的时候最后不要携带文件名。合并成功。
6.5切换到master分支, 因为在test_fix分支上解决了冲突,要将test_fix合并道master分支,直接merge即可,如果还是有冲突,则同样编辑解决。提交。
注意:冲突主要在于多个用户修改了同一个位置,或者,同一个文件的同一位置不统一,就出现了冲突。如果两个用户 在不同的行末加了代码,那么冲突会被git自行解决。
如在同一文件,不同行下添加一行各自写下各自的代码,git会自行解决冲突将,双方的代码整理排好。
四、git远程仓库
1.将本地仓库代码提交到远程仓库,以及从远程仓库拉取最新代码
git push origin master #提交代码到远程仓库主分支
git pull origin master #从远程仓库master分支拉取代码
2.如果本地仓库与远程仓库出现冲突。
解决方式:
1.新建一个分支,
2.拉取远程仓库代码,
3.diff 对比新建分支和当前冲突分支的代码,解决冲突,
4.合并新分支到本地分支中,
5.提交代码到远程库上。
代码编辑器上一般一个集成了git版本管理,可以很方便的对比冲突,对代码进行合理编排,解决冲突。再合并。
上图中,phpstrom解决冲突界面, 三块 :左边当前代码 右边另一用户冲突代码 中间合并代码。 冲突的位置有 X 和 》 《 ,很好操作,
X 就是去掉(不加如合并代码中)
》 就是把左侧的代码加入合并代码中
《 把右侧的代码加入合并代码中