Git是一个版本管理控制系统(缩写VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。
在开发中,Git已成为现在主流的一种代码托管技术(版本管理工具),基本上大多数的公司都在使用Git进行协同开发。很多代码托管平台也是基于Git来实现的。
Git可以帮我们做到很多的事情,比如代码的版本控制,分支管理等。
Git里面主要包含的几个概念有远程仓库,克隆,本地仓库,分支,提交,拉取,合并,推送等。
远程仓库是指我们代码存储在服务器的地方,这个仓库是我们整个团队中所有人都可以访问的地方。
1. 克隆:
从远程仓库克隆到本地的过程
本地仓库指的是我们开发人员从远程仓库克隆一份代码之后,保存在我们本地的代码,这份代码只有克隆的代码的开发人员可以看到。
2. 分支:
我们在开发中可能会遇到多个分支进行,比如主分支(master分支),开发分支(develop分支),但我们开发的时候,一般不在master上面进行开发,而是我们自己单独的从主分支或者开发分支中在分出来一条分支(比如test分支),然后我们就在test分支上进行开发,每个分支都有自己的代码。
3. 提交:
在我们的代码开发完成之后,需要将代码进行提交,提交的时候需要我们将修改的文件进行提交,并说明修改的内容。注意,此时代码提交只会提交到我们本地的仓库,远程仓库此时还不会修改。
4. 拉取:
开发中,同一个项目可能是多人协作开发,这个时候,我们就需要将别人修改的代码拉去下来合并到我们自己的代码中。但是如果不同的开发人员修改了统一部分代码,那么就可能发冲突,这时候我们需要解决完冲突时候,才能继续将代码进行提交。
5. 合并:
在上面我们自己的分支开发完成之后,没有问题之后,需要将我们的分支合并到主分支上面
6. 推送:
之前的所有操作都是在我们本地进行的,远程仓库的代码并没有任何的改变,这个时候就需要我们将本地的代码推送到远程的仓库中,更新远程仓库代码。在推送的过程中,如果我们本地的代码不是最新版本的,就需要我们先将远程代码拉去下来(如果有冲突重新解决冲突,提交),然后在重新推送。
在开发中,我们可以合理地使用Git进行管理,当新版本遇到问题之后,我们就可能需要将代码进行回滚,使用旧版本的代码,这样可以很方便的解决突发问题。
提交步骤
git init 初始化git仓库 (mac中Command+Shift+. 可以显示隐藏文件)
git status 查看文件状态
git add 文件列表 追踪文件
git commit -m 提交信息 向仓库中提交代码
git log 查看提交记录
撤销
用暂存区中的文件覆盖工作目录中的文件: git checkout 文件名
将文件从暂存区中删除: git rm --cached 文件名
将 git 仓库中指定的更新记录恢复出来,并且覆盖暂存区和工作目录:git reset --hard commitID
分支命令
git branch 查看分支
git branch 分支名称 创建分支
git checkout 分支名称 切换分支
git merge 来源分支 合并分支 (备注:必须在master分支上才能合并develop分支)
git branch -d 分支名称 删除分支(分支被合并后才允许删除)(-D 强制删除)
暂时保存更改
在git中,可以暂时提取分支上所有的改动并存储,让开发人员得到一个干净的工作副本,临时转向其他工作。
使用场景:分支临时切换
存储临时改动:git stash
恢复改动:git stash pop
1注册
2 多人协作开发流程
A在自己的计算机中创建本地仓库
A在github中创建远程仓库
A将本地仓库推送到远程仓库
B克隆远程仓库到本地进行开发
B将本地仓库中开发的内容推送到远程仓库
A将远程仓库中的最新内容拉去到本地
3创建仓库
1.git push https://github.com/teach-tian/ccc.git master
备注:如果远程仓库有内容,要先 git pull https://github.com/teach- tian/ccc.git master
2.git remote add origin https://github.com/teach-tian/ccc.git
// git 添加远程仓库origin (origin是仓库别名)
3.git push origin master
4.git push -u origin master
//-u 记住推送地址及分支,下次推送只需要输入git push即可
备注: 首先本地已经进行git初始化等一系列操作之后再进行推送命令:
git push -u -f origin master
(提交到远程仓库,这个命令中的 -f是强制推送,因为远程仓库只有初始化的文件,所以强制推送上去就行了)
同样可以尝试这句:(从远程仓库拉取内容,同步本地仓库)
git pull origin master --allow-unrelated-histories
拉取操作
克隆远端数据仓库到本地:git clone 仓库地址
拉取远程仓库中最新的版本:git pull 远程仓库地址 分支名称
邀请别人成为当前项目的开发者,别人就可以向公共仓库推送代码。
流程如下:
进入github仓库—> settings---->Manage access----->第一次添加会弹出密码输入框------>Invite a collaborator (输入你邀请的B程序员github账号)----> 发送邀请------>B程序员登陆邮箱接受邀请------B程序员可以向仓库推送代码
5 解决冲突
在多人同时开发一个项目时,如果两个人修改了同一个文件的同一个地方,就会发生冲突。冲突需要人为解决。
6 跨团队协作
即使你不是团队成员,也可以向别人的仓库贡献代码。
程序员 C fork仓库
程序员 C 将仓库克隆在本地进行修改
程序员 C 将仓库推送到远程 (git push 远程仓库地址 master)
程序员 C 发起pull reqest
点击pull requests—>点击 new pull request-–>create pull request-—>输入推送描述信息–>create pull request
原仓库作者审核 (与提交者对话)
原仓库作者合并代码 (merge pull request)
7 ssh免登陆
https协议仓库地址格式:https://github.com/itcast-frontEnd/git-demo.git
每次用https协议的地址进行git push git pull操作时都需要输入github账号密码进行身份验证。所有我们有了ssh协议,可以免登陆操作。
生成秘钥:ssh-keygen
秘钥存储目录:C:\Users\用户.ssh
公钥名称:id_rsa.pub (放到github服务器中)
私钥名称:id_rsa (放在自己电脑上)
添加远程仓库,起别名:origin_ssh
git remote add origin_ssh [email protected]:teach-tian/ccc.git
向远程仓库origin_ssh推送,无需密码。
git push origin_ssh master
8 GIT忽略清单
将不需要被git管理的文件名字添加到此文件中,在执行git命令的时候,git就会忽略这些文件。
git忽略清单文件名称:.gitignore
# dependencies npm包文件
/node_modules/
# 过滤所有.zip文件
*.zip
# 过滤某个具体文件
/cc/a.css
# production 打包文件
/build/
1. ls 查看文件/目录
2. pwd 显示当前的工作目录
3. cd 进入目录
[例子]:
cd 回到注册进入时的目录
cd /tmp 进入 /tmp 目录
cd ../ 进入上级目录
4. mkdir 创建目录
5. rmdir 删除目录
6. cat 显示文件至标准输出
7.cp 拷贝
例子
cp fi le1 file2 将文件 file1 拷贝到文件 file2
8. mv 移动
- i 在覆盖已存在文件时作提示,若回答 y 则覆盖,其他则中止
[例子]:
mv file1 file2 将文件 file1 改名为 file2
mv file1 file2 /tmp 将文件 file1 和文件 file2 移动到目录 /tmp 下
9. touch 创建文件
10. vi 编辑
i 插入 编辑内容
esc 退出编辑
:wq 保存并退出
更多linux 指令参考:https://www.cnblogs.com/frankliiu-java/articles/2059537.html
git 与svn比较
git: 分布式版本控制系统,免费而超好用的gitgitHub 是使用git进行版本控制的代码管理网站
SVN: 集中式的版本控制系统,而Git是分布式版本控制系统。
区别:集中式版本控制系统是,干活的时候用的都是自己的电脑所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆
集中式版本控制系统最大的毛病就是必须联网才能工作。
分布式版本控制系统根本没有‘中央服务器’,每个人的电脑上都是一个完整的版本库,这样就可以不用联网了,
但是如果你在自己电脑上修改了文件A,你的同事也修改了A,你们两个需要互相推送就可以看到对方的修改了。
分布式版本控制系统通常也有一台充当‘中央服务器’的电脑,这个服务器用来‘交换大家的修改’,交换修改更方便。
Git极其强大的分支管理