一、什么是Git
Git是一个免费的、开源的 分布式版本控制系统 ,可以快速高效地处理从小型到大型的各种项目 。
Git易于学习,占地面积小,性能极快 。 它具有廉价的本地库 ,方便的暂存区域和多个工作流 分支 等 特性。 其性能优于 Subversion、 CVS、 Perforce和 ClearCase等 版本控制工具。
二、什么是版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
三、Git 工作机制
见下图。
工作区指的是:代码存放的位置
暂存区指的是:在工作区写了代码后,需要让 git 知道你有这么个代码文件,所以你需要把你工作区的代码添加到暂存区,即 git add ,暂存区的代码是临时存储的(说明暂存区的代码可删掉,此时没有历史版本)。
可以通过 git commit 将代码由 暂存区 提交到 本地库,会生成 历史版本,但是一旦提交到本地库,代码就删不掉了。
四、代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
五、Git常用命令
命令名称 | 作用 |
---|---|
git config global user.name 用户名 | 设置用户签名 |
git config global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m " 日志信息 " 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset hard 版本号 | 版本穿梭 |
1、设置用户签名
git config --global user.name 用户名
git config --global user.email 邮箱
操作后会发现生成了下图所示文件:
右键在 Notepad++中打开会发现,
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。 Git首次安装必须设置一下用户签名,否则无法提交代码。
注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
2、初始化本地库
git init
初始化本地库是指:如果要用 git 管理某个目录,首先你需要用 git 获取这个目录管理权,也就是初始化一下它。
例如新建一个文件夹,然后用 git init 指令,会在该文件夹下生成 .git 文件
注意:.git 文件在目录中默认是隐藏的,将下图所示的多选框勾上即可出现该文件。此外,.git 文件里的东西不能修改。
3、查看本地库状态
git status
首次查看本地库状态:
其中,On branch master 表示:本地库当前在master 上;
No commits yet 表示:当前还未提交过任何东西,说明是一个空的git库;
nothing to commit 表示:当前没有可提交的
新增文件:
例如输入 vim hello.txt :
到下图所示界面:
然后可以输入内容,比如输入 hello Git!,然后点键盘上的 Esc,然后点yy,最后点p,就达到了复制粘贴的效果(其中p是粘贴),最后输入 :wq 保存文件
再次查看本地库状态(检测到未追踪的文件) :
Untracked files 表示:发现了一个未被追踪的文件,hello.txt 是红色的,说明这个文件有了,但是只是存在于工作区,git还未追踪过这个文件。
nothing added to commit but untracked files present (use “git add” to track):提交时未添加任何内容,但存在未跟踪的文件(使用“git add”跟踪)
4、添加暂存区
git add 文件名
git add .
再次查看本地库状态:
这个时候文件名是绿色的,说明已经追踪到该文件。
这个时候如果想删了该文件,可以:
git rm --cached <file>
其中 rm ‘hello.txt’ 表示已删除该文件。不过这里的删除只是暂存区删除,工作区还是有该文件的,在这里删除后可以重新添加到暂存区。
5、提交本地库
将暂存区的文件提交到本地库:
git commit -m "日志信息" 文件名
再次查看工作区状态:
6、修改文件后
手动对文件进行修改后,再次查看工作区状态,
红色表示这次文件的修改还没有被追踪到暂存区,可以进行 添加暂存区 提交本地库等操作。
7、历史版本
(1)查看历史版本
git reflog 查看版本信息
git log 查看版本详细信息
可以通过 git reflog 查看版本信息,其实在提交本地库的时候也有,如粗红框:
git reflog
可以通过 git log 查看更完整的版本信息,比如谁提交的:
git log
其中下图所示的中间那一长串是完整的版本号,之前的只是其头七位。
(2) 版本穿梭
git reset --hard 版本号
git reflog 可以看到当前是 513d21f 这个版本,然后通过 git reset --hard adb6143 ,可以实现将版本穿梭,回到 adb6143 这个版本。
在 .git 文件夹里有以下几个文件,如下图。
其中,在 HEAD 里的是 当前分支,里面内容如下:
其中,refs 文件下的 heads 文件夹里,有个 master 文件,里面是当前版本号,里面内容如下:
六、Git 分支
在版本控制过程中,同时推进多个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。
分支有以下好处:
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
七、Git 分支常用命令
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
1、查看分支
git branch -v
下图所示表示只有一个master分支
2、创建分支
git branch 分支名
如下图所示,创建分支后再查看分支,除master,多了一个分支,是刚创建的新的分支,并将主分支 master 的内容复制了一份。
3、切换分支
git checkout 分支名
如下图所示,切换到了 ccc 分支
4、合并分支
git merge 分支名
5、产生冲突
冲突产生的表现:后面状态为 MERGING
冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
冲突位置:
是通过下面所示这样标志冲突的:
<<<<<<< HEAD //这里是当前分支
//这中间是当前分支的代码
=======
//这里是要合并的代码
>>>>>>> ccc //这里是要合并的分支
6、解决冲突
编辑有冲突的文件,删除特殊符号,决定要使用的内容。
然后添加到暂存区,提交到本地库(注意:此时使用 git commit 命令时不能带文件名)
如下图所示,冲突被解决。
八、远程仓库操作
1、创建远程仓库别名
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
这里放视频里举的例子的图片:
2、推送本地分支到远程仓库
git push 别名 分支
//分支指的是要推送到哪个分支
3、拉取远程库到本地库
git pull 别名 分支
4、克隆远程仓库到本地
git clone 远程仓库地址
九、IDEA 集成 Git
这部分就不总结了,有需要的可以自己去看看,视频里的老师挺逗的,弹幕也挺逗的😄
到此,这篇总结性博客就结束了,get 到了很多从前没注意到的东西,哈哈哈,一直对 git 怀有一种莫名情感的卑微实习生心里踏实了点😸
刚看了一下,发现上一篇博客已经是五月前发布的了,似乎很久没有静下心来总结学到的东西,或者和以前一样写一些所见所感了,说来也挺感慨的。从那之后似乎一直在忙做简历、投简历、笔试面试、实习、期末考试、继续实习,一直到现在也是白天上上班,晚上刷刷抖音、看看剧,偶尔再和老朋友唠唠嗑,哈哈,其实也蛮快乐的😄