什么是Git?
Git是一款源代码管理工具(版本控制工具)
为什么要管理源代码:
人工的去处理不同的版本,做相应备份会很麻烦。
其他的源代码管理工具有:
svn,vss,vcs......
Git交互协作流程:
Git安装:
git官网下载安装程序
随便选一个文件右击鼠标会看到如下图中的内容就表示安装成功
其中GUI表示Git的图形化操作界面
Bash表示Git的敲命令操作界面
使用Git:
新建一个项目文件夹mypro
选中项目文件右击鼠标点击Git Bash Here打开Git命令窗口
初始化Git仓储:
这个仓库会存放,git对我们项目代码进行备份的文件
使用命令`git init`创建
配置使用者的用户名和邮箱:
辨别在git中设置当前使用的用户是谁
每一次备份都会把当前备份者的信息存储起来
使用的命令:
配置用户名:`git config --global user.name "xxx"`
配置邮箱: `git config --global user.email "xxx@xx.com"`
把代码存储到git仓储中:
1.把代码放到仓储的门口
`git add ./readme.md` 所指定的文件放到大门口
`git add ./` 把所有的修改的文件添加到大门口
2.把仓储门口的代码放到里面的房间中去
`git commit -m "这是对这次添加的东西的说明" `
这条指令如果不加-m就会进入vim编辑器的模式,可以敲代码,想要退出按esc键然后输入:q,强制退出按esc键然后输入:q!
可以一次性把我们修改的代码放到房间里(版本库)
`git commit --all -m "一些说明"`
--all 表示是把所有修改的文件提交到版本库
status 命令查看状态:
可以用来查看当前代码有没有被放到仓储中去
命令:`git status`
当前修改了代码(会比较工作区的代码和暂存区的代码是否一样,不一样则表示修改了),但是还没有执行命令:
代码放在了大门口,但还没有放到房间里面:
代码放进了房间里面:
git中的忽略文件:
.gitignore,在这个文件中可以设置要被忽略的文件或者目录。
被忽略的文件不会被提交仓储里去.
在.gitignore中可以书写要被忽略的文件的路径,以/开头
一行写一个路径,这些路径所对应的文件都会被忽略,
不会被提交到仓储中
写法
* ` /.idea ` 会忽略.idea文件
* ` /js` 会忽略js目录里的所有文件
* ` /js/*.js` 会忽略js目录下所有js文件
查看日志:
`git log` 查看历史提交的日志
`git log --oneline` 可以看到简洁版的日志
回退到指定的版本:
`git reset --hard Head~0`(--hard让工作区的代码被以前版本的代码覆盖,head~0指向上一次的版本)
表示回退到上一次代码提交时的状态
`git reset --hard Head~1`(head~1指向上上一次的版本)
表示回退到上上次代码提交时的状态
`git reset --hard [版本号]`
可以通过版本号精确的回退到某一次提交时的状态
`git reflog`
可以看到每一次切换版本的记录:可以看到所有提交的版本号
分支:
默认是有一个主分支master
`git branch dev`
创建了一个dev分支
在刚创建时dev分支里的东西和master分支里的东西是一样的
切换分支
`git checkout dev`
切换到指定的分支,这里的切换到名为dev的分支
`git branch` 可以查看当前有哪些分支
合并分支
`git merge dev`
合并分支内容,把当前分支与指定的分支(dev),进行合并
当前分支指的是`git branch`命令输出的前面有*号的分支
合并时如果有冲突(既在dev分支里面修改了,在没有合并前又在master分支里面修改了),需要手动去处理,处理后还需要再提交一次.
在分支dev中修改代码:
在dev分支中的代码版本日志:
切换到master分支并查看日志:
合并分支:
合并分支后查看master分支的日志:
删除dev分支(不能再自己的分支删除自己,不能自杀):
`git branch -d dev`
git协作:
GitHub:
这个网站提供了允许别通过git上传代码的功能
提交代码到github(当作git服务器来用)
用github建仓库:
创建完仓库后,会出现如下页面:
通过http请求地址push代码:
`git push [地址] master`(第一次使用这个命令会要求输入github的用户名和密码)
示例: `git push https://github.com/axiaoha/test.git master`
会把当前分支的内容上传到远程的master分支上
然后刷新所在的github页面就可以看到所写的readme文件
继续修改文件,比如在项目里面新增一个index.html文件
然后刷新所在的github页面就可以看到所写的文件
其他开发者怎样拿到代码:
方式一:
download zip
方式二:
先创建一个新的文件(fakepro)模拟其他开发者:
`git pull [地址] master`
示例:git pull https://github.com/axiaoha/test.git master
会把远程分支的数据得到:(*注意本地-要初始一个仓储!*)
方式三:
先创建一个新的文件(clonepro)模拟其他开发者
`git clone [地址]`(和pull有点不一样,会在项目下面新建一个文件存放clone的项目)
示例:git clone https://github.com/axiaoha/test.git
会得到远程仓储相同的数据,如果多次执行会覆盖本地内容。
ssh方式上传代码:
前面通过http请求地址push代码,这样如果别人要将代码上传到自己的github还要讲github的账号密码告诉别人,这样是不合理的,所以需要通过ssh方式来上传代码。
公钥 私钥,两者之间是有关联的
生成公钥,和私钥
`ssh-keygen -t rsa -C "1186070923@qq.com"`(-t指定加密的方式)
通过任意一个目录打开敲命令操作界面:
找到公钥私钥所在位置:
打开公钥文件并复制内容
在git上创建一个新的仓库test02
然后刷新所在的github页面就可以看到所写的文件
push和pull操作
先pull , 再push
为了每次push和pull操作能够不要复制粘贴那么一长串地址,将这串地址变为类似于变量的形式,下次的push和pull操作只需要用这个变量代替就行
示例:
`git remote add origin https://github.com/axiaoha/test.git master`(remote远程)
`git push origin master`
`git pull origin master`
`git push origin -u master`(加上-u之后,git会把当前分支与远程的指定的分支进行关联,那么在下一次push时,我们只需要写上`git push`就能上传我们的代码。)
`git push`(相当于写了`git push origin master`)
`git pull`(不需要输入`git pull origin -u master`这个命令,此时这个命令就相当于`git pull origin master`,但是别人修改代码要进行push和pull操作时还是需要再输入`git push origin -u master`这个命令的)
使用vs code默认集成的Git工具块