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命令操作一个完整流程

如何管理在每个 git 版本中添加私有代码片段?

使用 Git 来管理 Xcode 中的代码片段

markdown Git代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段