git教程(涵盖GitHub\Gitee\Gitlab)

简介:个人整理的b站尚硅谷的git教程,方便查阅之用;

目录

1、Git

1-1、git介绍:

1-1-1、Git概述

1-1-2、为什么需要版本控制:

1-1-3、集中式版本控制和分布式版本控制:

1-1-4、git工作机制:

1-1-5、git和代码托管中心:

1-2、git安装:(安装讲解)

1-3、git命令:(讲解了常用命令)

1-3-1、命令_设置用户签名

1-3-2、git关于本地仓库、版本库、工作区、暂存区、远程仓库、分支详解

1-3-3、命令_初始化本地库

1-3-4、命令_查看本地库状态

1-3-5、命令_添加暂存区

1-3-5、命令_提交本地库

1-3-7、命令_修改文件

1-3-8、命令_版本穿梭

1-4、git分支:

1-4-1、分支操作命令:

1-4-2、查看分支、创建分支、切换分支、提交文件到新分支上操作:

1-4-3、合并分支:

1-4-4、合并分支冲突处理:

1-4-5、分支的push 与 pull操作

1-5、idea集成git

2、GitHub

2-1、创建远程库

2-1-1、注册github网站账号

2-1-2、创建远程库

2-1-3、添加远程库和创建别名

2-2、代码远程推送  push

2-2-1、命令:

2-3、代码拉取  pull

2-3-1、命令:

2-4、代码克隆   clone

2-4-1、命令:

2-4-2、git clone操作做了什么

2-4-3、git clone和git pull和git fetch有什么区别:

2-5、ssh免密登录

2-6、idea 集成github

3、Gitee码云

3-1、gitee创建远程库

3-2、idea集成gitee

3-3、gitee连接github进行代码的复制和迁移

4、GitLab

4-1、gitlab服务器的搭建和部署

4-2、idea集成gitlab


1、Git

1-1、git介绍:

1-1-1、Git概述

是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

1-1-2、为什么需要版本控制:

  • 团队协作开发;
  • 可以记录文件修改的历史记录,方便查看历史版本、版本回退,方便查看版本修改内容;

1-1-3、集中式版本控制和分布式版本控制:

这里讨论集中式版本控制工具svn,和分布式版本控制工具git的区别:

  • git是分布式的,有本地和远程两个版本库,而svn是集中式的,只有一个远程的版本库
  • git有工作区,暂存区,远程仓库,git add将代码提交到暂存区,git commit提交到本地仓库,git push推送到远程版本库;svn是add提交到暂存区,commit是提交到远程版本库;
  • 所以git解决了集中式版本控制的缺点,1、在服务器断网的情况下进行开发(版本控制是在本地进行,);2、每个客户端保存的也是完整的项目(包含历史记录,更加安全)
  • git和svn的命令

git教程(涵盖GitHub\Gitee\Gitlab)_第1张图片

  • git和svn详细区别和优缺点参考博文:git和svn有哪些区别-git-PHP中文网

1-1-4、git工作机制:

git教程(涵盖GitHub\Gitee\Gitlab)_第2张图片协同开发:

团队内协作:

git教程(涵盖GitHub\Gitee\Gitlab)_第3张图片

跨团队协作:

git教程(涵盖GitHub\Gitee\Gitlab)_第4张图片

1-1-5、git和代码托管中心:

代码托管中心是基于网络服务器的远程代码仓库,一般称之为远程库

  • 局域网:GitLab
  • 互联网:GitHub(外网)、Gitee(国内网站)

1-2、git安装:(安装讲解)

详细看自己的博文链接:  git下载安装教程:

[https://blog.csdn.net/weixin_42640280/article/details/127040860

1-3、git命令:(讲解了常用命令)

git教程(涵盖GitHub\Gitee\Gitlab)_第5张图片

1-3-1、命令_设置用户签名

作用:

设置签名的作用是用来区分不同的操作者的身份,用户的签名信息在每一版本的提交信息中能够看到,可以确认该版本是谁提交的;Git首次安装必须设置用户签名,否则无法提交代码;

这里设置的git用户签名是区分提交者的用户名,与github和gitee上面注册的账号没有任何关系;

设置git本机用户签名

1、这里用户签名两种设置方式,一种是设置项目级别的,一种是设置系统用户级别;

2、两种用户签名的优先级是,项目\仓库级别 > 系统级别,如果两个都设置了,取项目\仓库级别的用户签名;

3、不能两种用户签名都没有设置;

4、邮箱地址git不会去验证是否存在,所以可以随意取名;

方式1:项目\仓库级别(仅在本地库范围内有效)

git config user.name 用户名(不能是中文)
git config user.email 邮箱地址

信息保存位置:​./.git/config ​文件

方式2:系统级别(登录当前操作系统的用户,即本机)

git config --global user.name 用户名(不能用中文)
git config --global user.email 邮箱地址

信息保存位置:​~/.gitconfig ​文件

查看设置用户签名是否成功
本机操作:

git教程(涵盖GitHub\Gitee\Gitlab)_第6张图片

 本机配置的是全局的用户签名,查看是否成功,打开路径:C:\Users\ZCQ\.gitconfig文件

全局的git账户签名设置是否成功查看
C:\Users\用户名\.gitconfig文件

直接命令行查看
$ cat ~/.gitconfig
如下:
[user]
        name = zhangchq
        email = [email protected]

1-3-2、git关于本地仓库、版本库、工作区、暂存区、远程仓库、分支详解

https://blog.csdn.net/weixin_42640280/article/details/127074182

1-3-3、命令_初始化本地库

说明:在想要创建本地库目录中执行命令

初始化本地库命令:
git init

初始化之后.git目录下有这些文件

git教程(涵盖GitHub\Gitee\Gitlab)_第7张图片

本机操作:

目录F:\_2_GitSpace\_1_github\git_demo,用来初始化本地库;

 进入想要新建本地库的文件夹目录中,执行命令 git init:

git教程(涵盖GitHub\Gitee\Gitlab)_第8张图片

生成隐藏文件夹.git ,初始化完成;

1-3-4、命令_查看本地库状态

命令

查看本地库命令:
git status

git工作区文件的状态:

git工作区文件都包含未追踪和已追踪两种状态

未追踪:如刚在工作区新建的文件

已追踪:可以是以修改,已提交暂存,已提交本地仓库的状态

文件的状态:

git教程(涵盖GitHub\Gitee\Gitlab)_第9张图片

 解析:

untracked(未追踪 )

unmodified(未修改)

modified(已修改)

staged  (已暂存)

未追踪的状态:

git教程(涵盖GitHub\Gitee\Gitlab)_第10张图片

已修改未提交暂存区:

git教程(涵盖GitHub\Gitee\Gitlab)_第11张图片

提交暂存区:

 git教程(涵盖GitHub\Gitee\Gitlab)_第12张图片

提交到本地仓库:

git教程(涵盖GitHub\Gitee\Gitlab)_第13张图片

-----------------------------

在刚git init初始化本地库之后的git status查看的状态:

git教程(涵盖GitHub\Gitee\Gitlab)_第14张图片

翻译:

On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)

在分支主
还没有提交
无需提交(创建/复制文件并使用“git add”进行跟踪)
  • 提示文件在哪个分支
  • 提示文件在本地仓库状态
  • 提示文件在暂存区状态

为了演示,增加两个文件到本地库中,然后在用命令 git status查看状态:

1、增加两个文件,不git add到暂存区:

git教程(涵盖GitHub\Gitee\Gitlab)_第15张图片

 翻译:

$ git status
On branch master
No commits yet
Untracked files:
  (use "git add ..." to include in what will be committed)
        helloworld.c
        helloworld_2.c
nothing added to commit but untracked files present (use "git add" to track)
----------------
在主分支
还没有提交
未跟踪的文件:
   (使用“git add ...”来包含将要提交的内容)
         helloworld.c
         helloworld_2.c
没有添加到提交但存在未跟踪的文件(使用“git add”来跟踪)

2、将helloworld.c这个文件git add到暂存区,helloworld_2.c不添加到暂存区后的git status:

git教程(涵盖GitHub\Gitee\Gitlab)_第16张图片

翻译:

$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached ..." to unstage)
        new file:   helloworld.c
Untracked files:
  (use "git add ..." to include in what will be committed)
        helloworld_2.c
-------------
在分支主
还没有提交
要提交的更改:
   (使用“git rm --cached ...”取消暂存)
         新文件:helloworld.c
未跟踪的文件:
   (使用“git add ...”来包含将要提交的内容)
         helloworld_2.c

1-3-5、命令_添加暂存区

命令:

添加到暂存区命令:
git add    //添加指定path,这里的path可以是文件,也可以是文件夹
git add .       //添加所有文件
git add -u      //添加新创建的文件,只添加已修改和删除的文件
--------
//如果要撤销提交文件到暂存区,
git rm --cached  //撤销暂存指定文件或文件夹
git restore --staged   //取消暂存文件

本机操作:

warning提示的是换行符CRLF会自动切换LF,不用管,如下操作helloworld.c这个文件提示暂存区状态的红色变成了绿色,并提示新文件,即helloworld已添加到暂存区;

git教程(涵盖GitHub\Gitee\Gitlab)_第17张图片

1-3-5、命令_提交本地库

命令:

git commit -m "版本日志" <文件名> //将暂存区中的文件提交到本地仓库
------
git reflog     //查看提交记录,(可以查看到所有分支的所有操作记录信息,方便方便回退版本)
git log        //查看提交记录(比较详细,完整版本号,提交人等信息)

本机操作:

git教程(涵盖GitHub\Gitee\Gitlab)_第18张图片

查看状态,因为故意弄helloworld_2.c没有提交到暂存区,所以提示有文件没有被追踪

git教程(涵盖GitHub\Gitee\Gitlab)_第19张图片

查看提交信息:

git教程(涵盖GitHub\Gitee\Gitlab)_第20张图片

 注:

1、如图中4e289d2 是版本号,commit后面的数值完整的版本号

2、git log 和 git reflog的最大区别是能不能查询到被删除的 commit 记录和 reset 的操作记录,log不能,而reflog可以;

1-3-7、命令_修改文件

操作:修改工作区的文件--->查看会提示有文件被修改未追踪----》提交该文件到暂存区----》提交暂存区文件到本地库---》再查看提交信息

git教程(涵盖GitHub\Gitee\Gitlab)_第21张图片

git教程(涵盖GitHub\Gitee\Gitlab)_第22张图片

1-3-8、命令_版本穿梭

命令


命令:
git reset --hard  <版本号>  //硬回退
git reset --soft <版本号>   //软回退

具体步骤:
1、git reflog   //查看历史提交信息,选择要回退的版本号
2、git reset 命令回退到指定的版本

总结:
1、git reset --hard 会覆盖到本地工作区的代码,git reset --soft不会覆盖本地工作区代码;

软回退,代码内容没有被覆盖:

git教程(涵盖GitHub\Gitee\Gitlab)_第23张图片

注意:回退完git reflog 可以看到版本库中的回退操作,而git log看不到

git教程(涵盖GitHub\Gitee\Gitlab)_第24张图片

软回退之后重新由暂存区提交到本地仓库操作结果:

git教程(涵盖GitHub\Gitee\Gitlab)_第25张图片

总结:只要提交到本地仓库库(git commit)之后,版本都有记录,用git reflog可看到所有提交,回退的历史记录,不管回退几个版本,都可以自由切换代码的版本;

git教程(涵盖GitHub\Gitee\Gitlab)_第26张图片

1-4、git分支:

1-4-1、分支操作命令:

git branch -v        //查看分支
git branch <分支名>   //创建分支
git checkout <分支名> //切换分支
git merge    <分支名> //把指定的分支合并到当前分支上
-------
git branch (-m/-M)  <旧分支名>  <新分支名>   //重命名分支(新分支名要是重复,用M强制重命名)
git branch (-d/-D)  <分支名>  //删除分支

=========分支的push与pull操作
git branch -a      //查看本地和远程分支
git push <远程库名> <远程分支名>  //推送分支到远程(和推送代码一样命令)
git push <远程库名> :<远程分支名>     //删除远程分支(本地分支保留)(这个要谨慎操作,就差一个冒号)
git checkout -b <本地分支名> <远程库名/远程分支名> //拉取远程指定分支并在本地创建分支

1-4-2、查看分支、创建分支、切换分支、提交文件到新分支上操作:

git教程(涵盖GitHub\Gitee\Gitlab)_第27张图片

一样提交流程:

git教程(涵盖GitHub\Gitee\Gitlab)_第28张图片

1-4-3、合并分支:

如下,leaf01分支中的helloworld.c中的内容被合并到了master分支中的helloworld.c

git教程(涵盖GitHub\Gitee\Gitlab)_第29张图片

 git教程(涵盖GitHub\Gitee\Gitlab)_第30张图片

1-4-4、合并分支冲突处理:

  • 冲突原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。git无法替我们决定用哪一个,必须人为决定

目前修改看到的是本地文件,所以要提交到master分支本地库,然后修改同一个地方不同内容,提交到leaf01分支本地库上面,然后再合并分支,就会出现冲突;

master分支上面helloworld.c中第八行内容:

git教程(涵盖GitHub\Gitee\Gitlab)_第31张图片

leaf01分支中helloworld.c文件中第八行的内容:

git教程(涵盖GitHub\Gitee\Gitlab)_第32张图片

分支合并冲突的提示:

git教程(涵盖GitHub\Gitee\Gitlab)_第33张图片

 合并冲突解决:

按照实际要求修改提示冲突的文件,然后提交到暂存区,本地仓库; 

git教程(涵盖GitHub\Gitee\Gitlab)_第34张图片

注意一个坑:

如下图中所示,(master|MERGING)状态表示在合并分支中,所以修改冲突文件之后提交本地库的命令格式为:git commit -m "版本信息" ,不需要指定文件名,否则出现如下提示,并且提交本地库失败: 

git教程(涵盖GitHub\Gitee\Gitlab)_第35张图片

提交成功,即合并分支leaf01 到 主分支 master成功。

==================================

切换分支的问题:

  • 问题1:在master分支上面已经修改文件并添加本地库之后,在master分支上继续修改文件helloworld.c,这时候不提交到暂存区,想切换到leaf01分支上面提交到leaf01分支版本库上,出现了这个提示:

git教程(涵盖GitHub\Gitee\Gitlab)_第36张图片

这里的解答是,在这个master分支上面修改文件,文件有改动没提交的话,是无法切换分支的;

问题2:在master分支上面修改文件,然后切换分支leaf01分支之后查看文件内容,发现也是和master分支上修改的一样的内容;

解析:

  • 第一个分支修改文件内容,不add,不commit 然后切换到第二分支 会出现

1、提示有文件修改未提交,无法切换分支;

2、可以切换分支,但是第二分支的内容被第一分支的修改覆盖掉了;

  • 第一分支修改内容,add到暂存区,不commit到本地仓库,切换到第二分支,也会出现

1、无法切换分支;

2、第二分支被第一分支覆盖;

  • 第一分支修改,add 和commit之后,再去切换到第二分支,不会出现覆盖的情况

解决办法:

1、要提交到哪个分支的内容就切换到哪个分支上,然后提交暂存区和本地库;

2、如果是当前分支上工作还没做完不能提交本地库,又想去别的分支情况下(如果直接切换其他分支可能出现其他分支的内容被覆盖的情况!)

用  git stash 命令隐藏工作现场;

git stash //隐藏当前分支的修改(在当前分支修改文件之后,不提交本地库也能切换其他分支)
git stash list //查看隐藏起来的分支工作现场
git stash apply //恢复,但是stash内容不删除,要用git stash drop来删除
git stash pop   //恢复同时stash内容删除;
---------
用法:git stash pop stash @{具体序号}

git教程(涵盖GitHub\Gitee\Gitlab)_第37张图片

1-4-5、分支的push 与 pull操作

命令:

=========分支的push与pull操作
git branch -a      //查看本地和远程分支
git push <远程库名> <远程分支名>  //推送分支到远程(和推送代码一样命令)
git push <远程库名> :<远程分支名>     //删除远程分支(本地分支保留)(这个要谨慎操作,就差一个冒号)
git checkout -b <本地分支名> <远程库名/远程分支名> //拉取远程指定分支并在本地创建分支

----
git fetch //用来获取分支最新状态

查看远程分支:

git教程(涵盖GitHub\Gitee\Gitlab)_第38张图片

推送本地分支到远程分支,和推送代码一样的指令,即要在要推送到远程的那个本地分支,执行git push <远程仓库名> <远程分支名> ,这样就推送上去了;

git教程(涵盖GitHub\Gitee\Gitlab)_第39张图片

 拉取远程指定的分支到本地创建:(应用场景:比如说原来电脑上有git项目工作区,原来只有一个master一条主分支,但是现在新开发一个模块,放在远程新分支上(如领导创建的),这就需要把远程分支拉取创建本地原来的git工作区上):

github上面新建一个分支,用来拉取到本地操作实验 

git教程(涵盖GitHub\Gitee\Gitlab)_第40张图片

git fetch获取显示远程新创建了一个分支:

查看所有分支、拉取远程分支并新建到本地、查看所有分支

git教程(涵盖GitHub\Gitee\Gitlab)_第41张图片git教程(涵盖GitHub\Gitee\Gitlab)_第42张图片

1-5、idea集成git

2、GitHub

2-1、创建远程库

2-1-1、注册github网站账号

网站:github官网

注册账号

2-1-2、创建远程库

点击右上角+号

选择New repository

git教程(涵盖GitHub\Gitee\Gitlab)_第43张图片

输入远程库名称、描述、选择私有不公开、下面的添加readme、gitignore文件这里演示而已,不添加

git教程(涵盖GitHub\Gitee\Gitlab)_第44张图片

git教程(涵盖GitHub\Gitee\Gitlab)_第45张图片

2-1-3、添加远程库和创建别名

命令:

git remote -v                                      //查看和本地关联的仓库信息
git remote add <要创建的别名>  <原来远程库名的链接>   //给本地添加远程库链接,且远程库创建别名
git remote rename  <旧远程库名>  <新远程库名>        //重命名远程库
git remote rm <远程库名>                            //删除远程库与本地连接
---------
注:
1、原来的远程库名即为,如github网站上面创建的远程库[https://github.com/buggetout/git_demo.git]
这个链接即为远程名,可以用git remote add 来创建别名;


git remote 命令用来创建、查看和删除本地仓库和远程代码仓库的连接;

本机操作:

如下,创建好了的一个远程库,下面的HTTPS后面[https://github.com/buggetout/git_demo.git]就是远程库的地址,以

git教程(涵盖GitHub\Gitee\Gitlab)_第46张图片

添加远程库并重命名远程库:

 git教程(涵盖GitHub\Gitee\Gitlab)_第47张图片

重命名远程库名和删除远程库操作

git教程(涵盖GitHub\Gitee\Gitlab)_第48张图片

2-2、代码远程推送  push

2-2-1、命令:

git push <远程库名>  <分支名>  //推送到远程库

本机操作:

本地库推送到远程库之后弹出了左边的窗口,

git教程(涵盖GitHub\Gitee\Gitlab)_第49张图片

点击授权:

git教程(涵盖GitHub\Gitee\Gitlab)_第50张图片

提交授权之后,可以在github上面看到新增了项目文件

git教程(涵盖GitHub\Gitee\Gitlab)_第51张图片

git教程(涵盖GitHub\Gitee\Gitlab)_第52张图片

2-3、代码拉取  pull

2-3-1、命令:

git pull <远程库名> <分支名>   // 拉取指定远程库指定分支的代码

本机操作:

如下图,用git pull命令操作 ,第一次出现报错,是github外网的原因拉取失败,重新git pull一次就成功了。

git教程(涵盖GitHub\Gitee\Gitlab)_第53张图片

2-4、代码克隆   clone

将远程仓库复制到本地进行开发,如果要在固定目录下当做工作目录,而且远端仓库如果是领导创建好了,那么就可以直接用git clone 命令直接复制到本地,复制下来是整个版本库,所以不用Git init 初始化;比如说在F:\_2_GitSpace\_1_github\git_demo_clone目录下想git clone一个远程库下来,只需要直接当前目录下右键打开git bash,然后git clone  <远程库url>

2-4-1、命令:

git clone <远程库的url>   //克隆远程库到本地

2-4-2、git clone操作做了什么

1、拉取代码

2、初始化本地库

3、创建别名

本机操作:

github上面创建一个远程库,用来clone到本地操作:

git教程(涵盖GitHub\Gitee\Gitlab)_第54张图片

git教程(涵盖GitHub\Gitee\Gitlab)_第55张图片

git教程(涵盖GitHub\Gitee\Gitlab)_第56张图片

这样复制下来的是整个版本库复制下来;

2-4-3、git clone和git pull和git fetch有什么区别:

[git clone、git pull和git fetch的使用和区别_弓长长白水的博客-CSDN博客]

2-5、ssh免密登录

详细内容看:

[git中HPPTS和SSH协议区别和使用_弓长长白水的博客-CSDN博客]

2-6、idea 集成github

3、Gitee码云

3-1、gitee创建远程库

3-2、idea集成gitee

3-3、gitee连接github进行代码的复制和迁移

4、GitLab

4-1、gitlab服务器的搭建和部署

4-2、idea集成gitlab

你可能感兴趣的:(#,git,github,git,gitlab)