Git
Posted yufenchi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git相关的知识,希望对你有一定的参考价值。
第1章 Git的概述
1.1 什么是git
Git是一个分布式的版本控制软件
相当于QQ,office等需要安装到电脑上才可以使用的工具
版本控制:类似于毕业论文,写文案等,需要反复修改和保留历史的数据
1.2 为什么要做版本控制
要保留之前的数据,方便回滚和修改
1.3 Git的安装
https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
第2章 Git的安装(Linux)
2.1 安装步骤如下
#安装Git
yum install git -y
#配置git使用用户
git config --global user.name "yfc"
#配置git使用邮箱
git config --global user.email "12345678@qq.com"
#语法高亮显示
git config --global color.ui true
#查看有哪些用户
git config --list
#查看设置的用户
cat .gitconfig
第3章 Git初始化
想要对目录进行版本控制,需要如下步骤
3.1 进入要管理的文件夹,执行初始化命令
mkdir /data
cd /data
git init
3.2 隐藏文件的介绍
[root@git data]# ll .git
total 12
drwxr-xr-x 2 root root 6 Mar 23 21:14 branches #分支目录
-rw-r--r-- 1 root root 92 Mar 23 21:14 config #定义项目特有的配置选项
-rw-r--r-- 1 root root 73 Mar 23 21:14 description #仅供git web程序使用
-rw-r--r-- 1 root root 23 Mar 23 21:14 HEAD #指示当前的分支
drwxr-xr-x 2 root root 242 Mar 23 21:14 hooks #包含git钩子文件
drwxr-xr-x 2 root root 21 Mar 23 21:14 info #包含一个全局排除文件(exclude文件)
drwxr-xr-x 4 root root 30 Mar 23 21:14 objects #存放所有数据内容,有info和pack两个子文件夹
drwxr-xr-x 4 root root 31 Mar 23 21:14 refs #存放指向数据(分支)的提交对象的指针
第4章 Git的常规使用
4.1 Git的三个区域
4.2 git如何提交目录文件到本地仓库
4.2.1 第一个里程: 创建几个文件
cd /data
touch file{1,2,3}
4.2.2 第二个里程: 提交文件到暂存区
git add .
4.2.3 第三个里程:提交文件至本地仓库
git commit -m "新增3个文件"
4.2 查看git的状态
git status
4.3 修改文件的名称
git mv file1 file4
git commit -m "修改file1为file4"
4.4 如何进行文件比对
4.4.1 工作目录和暂存区进行比对
1. 此时git的三个区域都有file2文件,往file2文件写入内容
echo 123 > file2
2. 进行文件比对
git diff file2
4.4.2 本地仓库和暂存区进行比对
1. 把工作区的文件提交到暂存区
[root@gitlab data]# git add .
2. 进行文件比对
git diff --cached file2
3. 提交后在比对则暂存区和本地仓库(内容相同)
git commit -m "file2"
git diff --cached file2
4.5 git commit
4.5.1 作用
相当于虚拟机的镜像、任何操作都被做了一次快照,可恢复到任意一个位置
4.5.2 查看历史的git commit快照操作
[root@gitlab data]# git log
commit 97f0c9afe1af1fb7251ed93f5283475fb7ca9620
Author: yfc <yfc@qq.com>
Date: Mon Mar 23 22:15:24 2020 +0800
file2
commit b236e2fe006fc8d7428da6fa920ab2a40c2985da
Author: yfc <yfc@qq.com>
Date: Mon Mar 23 21:54:43 2020 +0800
修改file1为file4
commit 89f5a806cf57c10ebc97c7ed70078ec174695f4f
Author: yfc <yfc@qq.com>
Date: Mon Mar 23 21:30:13 2020 +0800
新增3个文件
4.5.3 简单的显示
git log --oneline
#就是把上面的信息,以一行显示出来且把每次对应的hash值,取前7位!结果如下
[root@git data]# git log --oneline
0a819ad file2
28bc994 修改file1为file4
65154df 新增3个文件
4.6 git如何实现回退
4.6.1 第一种情况:本地目录误操作
[root@git data]# cat file2
123
[root@git data]# >file2
思路
用暂存区的目录覆盖本地目录
命令如下
[root@gitlab data]# git checkout file2
[root@gitlab data]# cat file2
123
4.6.2 第二种情况:本地目录误操作且提交至暂存区
[root@git data]# cat file2
123
[root@git data]# >file2
[root@git data]# git add .
思路
先用本地仓库的目录覆盖暂存区的,在用暂存区的覆盖本地目录
命令如下
1. 先覆盖暂存区
[root@git data]# git reset HEAD file2
2. 再覆盖本地目录
[root@git data]# git checkout -- file2
3. 检查file2文件
[root@git data]# cat file2
123
4.6.3第三种情况:如果提交多次至本地仓库,怎么回退
[root@git data]# echo yfc >> file2
[root@git data]# cat file2
123
yfc
[root@git data]# git add .
[root@git data]# git commit -m "file2文件新增内容yfc"
[root@git data]# echo yfc.com >> file2
[root@git data]# cat file2
123
yfc
yfc.com
[root@git data]# git add .
[root@git data]# git commit -m "file2文件新增内容yfc.com"
需求1:回退到file2文件最初始的状态
[root@git data]# git log --oneline
61f27d6 file2文件新增yfc.com
79da77b file2文件新增yfc
97f0c9a file2
b236e2f 修改file1为file4
89f5a80 新增file1-3
[root@git data]# git reset --hard 97f0c9a
[root@git data]# cat file2
123
需求2:回退到file2文件中有yfc内容时的状态
[root@git data]# git reflog
97f0c9a HEAD@{0}: reset: moving to 97f0c9a
61f27d6 HEAD@{1}: commit: file2文件新增yfc.com
79da77b HEAD@{2}: commit: file2文件新增yfc
97f0c9a HEAD@{3}: commit: file2
b236e2f HEAD@{4}: commit: 修改file1为file4
89f5a80 HEAD@{5}: commit (initial): 新增file1-3
[root@gitlab data]# git reset --hard 79da77b
HEAD is now at 79da77b file2文件新增yfc
[root@gitlab data]# cat file2
123
yfc
第5章 Git分支
5.1 什么是分支
5.2 分支的作用
分支可以给使用者提供与主干隔离的环境,以免影响到主干,在分支上开发完新功能测试好以后,可以合并到主干,这样即不影响主干也不会耽误开发的进度
5.3 分支的有关命令
5.3.1 查看分支
git branch
5.3.2 创建分支
git branch 分支名称
#例如
git branch dev
5.3.3 切换分支
git checkout dev
5.3.4 删除dev分支
git branch -d 分支名称
#例如
git branch -d dev
注意:删除分支一定要在主干上去删除分支
5.4 如何合并分支
5.4.1 第一个里程: 在dev分支上创建新的文件,并提交(如果不提交,切换到master会看到在dev分支上创建的文件)
git branch dev
touch file{6,7}
git add .
git commit -m "新增文件file5和file6"
5.4.2 第二个里程: 在master上创建新文件(因为master上可能有别的人员提交的代码,这里就是模仿)
git checkout master
touch file{9,10}
git add .
git commit -m "新增文件file9和file10"
5.4.3 第三个里程: dev分支合并master上的内容
#因为此时可能有别的人员提交了代码到master上,所以我们要先把自己master上的内容合并到master上
记得切换分支在合并
例如,想要把master的内容合并到dev上,要先切换到dev上,在合并
git checkout dev
git megre master -m "dev合并master内容"
5.4.4 第四个里程: 切换到master上,再把dev上的内容合并到master上
[root@git data]# git branch
* dev
master
[root@gitlab data]# git checkout master
Switched to branch ‘master‘
[root@gitlab data]# ls
file2 file3 file4 file7 file8
[root@gitlab data]# git merge dev
Updating 697395f..15cde5e
Fast-forward
file5 | 0
file6 | 0
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file5
create mode 100644 file6
[root@gitlab data]# ls
file2 file3 file4 file5 file6 file7 file8
#可以看到现在master有全部的文件了
5.5 如何解决冲突合并
5.5.1 模拟环境
[root@git data]# git branch dev
[root@git data]# git branch
dev
* master
[root@git data]# ls
file2 file3 file4 file5 file6 file7 file8
[root@gitlab data]# cat file2
123
yfc
[root@git data]# echo 111 >> file2
[root@git data]# git add .
[root@git data]# git commit -m "修改file2文件"
[root@git data]# git checkout dev
[root@git data]# echo 111 >> file2
[root@git data]# git add .
[root@git data]# git commit -m "修改file2文件"
5.5.2 dev分支合并master的内容
[root@git data]# git checkout dev
[root@git data]# git merge master
Auto-merging file2
CONFLICT (content): Merge conflict in file2
Automatic merge failed; fix conflicts and then commit the result.
[root@gitlab data]# git merge master
error: ‘merge‘ is not possible because you have unmerged files.
hint: Fix them up in the work tree,
hint: and then use ‘git add/rm <file>‘ as
hint: appropriate to mark resolution and make a commit,
hint: or use ‘git commit -a‘.
fatal: Exiting because of an unresolved conflict.
#此时会报错
5.5.3 解决报错
修改文件
[root@git data]# cat file2
123
yfc
<<<<<<< HEAD
222
=======
111
>>>>>>> master
[root@git data]# vim file2
123
yfc
222
111
[root@git data]# git add .
[root@git data]# git commit -m "megre 合并"
5.5.5 切换到master上合并dev的内容
[root@git data]# git checkout master
Switched to branch ‘master‘
[root@gitlab data]# git merge dev
Updating 179bd1c..f5bb452
Fast-forward
file2 | 1 +
1 file changed, 1 insertion(+)
第6章 Git标签
6.1 作用
标签也是指向了一次commit提交,是一个里程碑式的标签,回滚打标签直接加标签号,不需要加唯一字符串不好记
6.2 标签的相关命令
6.2.1 创建标签
#格式
git tag -a "标签名字" -m "描述信息"
[root@gitlab data]# git tag -a "v1.0" -m "第一版本"
6.2.2 查看有哪些标签
git tag
6.2.3 查看标签的的具体信息
git show 标签名字
#例如
git show v1.0
6.2.4 删除标签
git tag -d 标签名字
#例如
git tag -d v2.0
第7章 GIT配合远程仓库
7.1 注册github或者公司自己搭建gitlab,把代码推送上去
此处步骤略
7.2 初次在公司下载代码
1. 克隆远程仓库代码
git clone 远程仓库地址
2. 切换分支进行开发
git checkout dev
3. 开发完毕,提交代码
git add .
git commit -m ‘xx‘
git push origin dev
7.3 回家以后,继续开发
1. 切换到
git checkout dev
2. 拉取最新代码
git pull origin dev
3. 进行开发
4. 提交代码
git add .
git commit -m ‘xx‘
git push origin dev
以上是关于Git的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段