Git简单入门(学习笔记)
一. Git概念
Git是一个免费的开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。
二. 版本控制
版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制的好处在于可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。也可以比较文件的变化细节,从而查看是谁修改了什么地方,导致的一些问题,等等。
*举个例子:假如你今晚需要上线软件的4版本,但在这过程中测试人员发现4版本里有bug,而开发人员无法及时赶来修改bug,这时便可以运用版本控制回溯到之前的3版本。
版本控制系统分为两大类:集中化版本控制系统(常见的有SVN,CVS等)和分布式版本控制系统(常见的有Git)。
集中化版本控制系统都有中央服务器,不同的开发人员可以直接连接服务器获取数据,以及提交下载等等。每个人都可以在一定程度上看到项目中的其他人正在做些什么。但缺点是中央服务器的单点故障。
*举个例子:如果服务器宕机一小时,那么在这一小时中,谁也无法提交更新。假如这个时候你把软件的4版本修改的一塌糊涂,这时你想回溯到3版本,但因为中央服务器宕机,你无法进行操作。(遇到这种情况建议提前备份,这样回溯时可以用备份)。
分布式版本控制系统中,客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这时每个客户端上都有最新版本和历史版本,这样一来每个客户端都相当于服务器,就算服务器都宕机了,但只要有一个客户端是好的,就没问题。这里也是一个去中心化的思想
而且,许多这类系统都可以指定和若干不同的远端代码仓库进行交互,这样,你就可以在同一个项目中分别和不同工作小组的人互相协作。
分布式版本控制系统在管理项目时存放的不是项目版本与版本之间的差异,他存的是索引(所需磁盘空间很少的所以每个客户端都可以放下整个项目的历史记录)。
*举个例子:假如你用了SVN存储项目(集中化版本控制系统),当你从版本3迭代到版本4的时候,你存储的并不是版本4,而是版本3与版本4的差异。这时你想从版本4回溯到版本1的话,要先从版本4回溯到版本3,再从版本3回溯到版本2……直到版本1,这是非常耗时的。但,假如你用的是git存储项目(分布式版本控制系统),当你从版本3迭代到版本4的时候,你存储的并不是版本4,也不是版本3与版本4的差异,而是版本3的索引,这时你想从版本4回溯到版本1的话,可以直接找到版本1的索引,这是非常快的。
三. Git下载与安装
详见博客:https://blog.csdn.net/m0_59188912/article/details/123909979
四. Git结构
本地结构:工作区,暂存区,本地库
概念:
写的文件都存在工作区,暂存区里是打算提交的东西,但还没有提交,用作临时存储。本地库里存的都是每个历史版本的信息。
命令:
工作区提交到暂存区:git add
暂存区提交到本地库:git commit
五. 本地库与远程库的交互方式
团队内部合作:
- 项目经理创建本地库。
- 将本地库内容推送到远程库。(push操作)
- 程序员将远程库里的内容克隆到本地库。(clone操作)
- 程序员将写完的代码推送到远程库。(push操作)(需要加入团队才有权利推送)
- 项目经理将远程库里的内容拉取到本地。(pull操作)
跨团队合作:
- A公司项目经理创建本地库。
- 将本地库内容推送至A项目经理创建的远程库。(push操作)
- B将A的远程库复制一份形成一个新的远程库。(fork操作)
- 程序员将远程库内容克隆到本地库。(clone操作)
- 程序员推送代码到远程库B。(push操作)
- 远程库B→远程库A发起请求。(pull request)
远程库A审核。
没有问题就把远程库B的内容合并到远程库A中。(merge) - A公司项目经理或A公司程序员将远程库里的内容拉取到本地。(pull操作)
六. 代码托管中心
局域网环境:
搭建GitLab服务器等,适用于团队内部合作。
外网环境:
注册GitHub或Gitee(码云)等,适用于跨团队合作。
GitHub官网:https://github.com/
Gitee官网:https://gitee.com/
七. 初始化本地仓库
- 在本地磁盘中创建文件夹。
- 右键打开Git Bash Her。
- 右键打开Options设置。
- 设置Character set为UTF-8。
- 设置用户名。
git config --global user.name “dgyj”
- 设置邮箱。
git config --global user.email “10086@qq.com”
- 切路径,去之前创建的文件夹的盘里(我之前是在f盘下创建的文件夹,所以我输入的是f:/)。
cd f:/
- 再继续去之前创建的文件夹里。(我之前创建的文件夹名为GitRepository)
cd GitRepository/
- Git初始化。
git init
- 我们可以再检查一下是否有该文件。(.git目录是隐藏的)
ll -la
- 查看.git里的文件(.git文件里的东西不要乱删和胡乱操作)
ll -la .git/
*我的这里的一些显示有点问题,为了避免误导大家这里就用马赛克遮掉了。
八. 常用命令
*在Git中命令和Linux是一样的。
- 查看Git安装版本。
git --version
- 清屏。
clear
- 将文件提交到暂存区。(我要提交的文件名为test.txt)
git add test.txt
- 将文件提交到暂存区后查看文件状态。
git status
- 将暂存区的内容提交到本地库。
git commit -m "这是我提交的测试文件 test.txt“ test.txt
注意:
不放在本地仓库中的文件,git是不进行管理的。
即使放在本地仓库的文件,git也不管理,必须通过add,commit命令操作才可以将内容提交到本地库。
- 查看提交的日志,由近到远。
git log
当一页显示不下,数据过多的时候会有分屏。
下一页:空格
上一页:b
到尾页显示end
退出:q
- 日志展示方式二。
git log --pretty=oneline
- 日志展示方式三。
git log –oneline
- 日志展示方式四。
git reflog
- 前进或者后退历史版本。
git reset --hard a340e1c
本地库的指针移动的同时,重置暂存区,重置工作区
-
本地库的指针移动的同时,重置暂存区,但是工作区不动。
git reset --mixed -
本地库的指针移动的时候,暂存区和工作区都不动。
git reset --soft
注意:最常用的就是hard。 -
删除工作区中的test.txt。
rm test.txt
- 将删除操作同步到暂存区。
git add test.txt
- 将删除操作同步到本地库。
git commit -m “删除test.txt文件” test.txt
- 找回本地库中删除的文件(实际上就是将历史版本切换到刚才添加文件的那个版本即可)。
git reset --hard a340e1c
- 比对工作区和暂存区的文件。
git diff test.txt
Git是按照行为单位管理数据。所以,删除一行,添加一行。
- 多个文件比对时,不用加文件名。
git diff
- 将暂存区和本地库中的文件进行比对。
git diff HEAD test.txt
git diff 2be3d65 test.txt
九. 分支
-
概述
在版本控制过程中,使用多条线同时推进多个任务,这里面说的多条线就是多个分支。分支的好处有:同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率。 -
查看当前git里面的所有分支。
git branch -v
- 创建分支。
git branch newone
当前在那个分支上时通过*来显示
- 切换分支。
git checkout newone
- 将newone中的内容和主分支内容进行合并。
git merge newone
- 文件合并冲突。
处在合并状态中
出现冲突
在同一个文件的同一个位置,才会出现冲突问题。
解决方法:只能靠人商量,人为决定,留下想要的即可。
- 解决完冲突问题后,取消合并状态。
十. github注册
注册教程详见博客:https://danbaku.blog.csdn.net/article/details/124912340
十一. 创建github远程库
- 创建远程库,点击右上角加号,new repository。
- 创建库信息填写。
- 在首页左侧有创建的库,点击进去。
这就是刚刚创建的远程库的地址
- 通过别名在git本地将地址保存。
查看别名:
git remote -v
起别名:
git remote add GitRetest https://github.com/Kevinzhushrek/GitRepository.git
fetsh:取回
push:推送
十二. 远程库操作
- 远程库推送。
git push GitRetest master
完成
- 克隆操作。
复制地址:
git clone https://github.com/Kevinzhushrek/GitRepository.git
D盘中出现:
克隆操作可以帮我们初始化本地库、将远程库的内容完整的克隆到本地、替我们创建远程库的别名。
- 拉取操作。
拉取操作pull,相当于fetch操作和merge操作的合并。
项目经理先确认远程库的内容是否更新了。
项目经理进行拉取操作。
抓取操作:
git fetch GitRetest master
执行抓取操作后,只是将远程库的内容下载到本地。工作区中的文件并没有更新,工作区中还是原先的内容。
这时可以切换到下载下来的远程库的master中查看里面的内容。
git checkout GitRetest/master
发现没有什么问题即可进行合并操作:
git merge GitRetest/master
以上两个操作也可以通过一个操作解决:
git merge GitRetest/master
(未完待续……先学这么多就够了,后面的以后有空更)
本篇博客为本人学习Git时的详细记录,如有错误之处,还望各位指正。
文章为原创,如要转载请注明出处