简介:个人整理的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
是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
这里讨论集中式版本控制工具svn,和分布式版本控制工具git的区别:
团队内协作:
跨团队协作:
代码托管中心是基于网络服务器的远程代码仓库,一般称之为远程库
详细看自己的博文链接: git下载安装教程:
[https://blog.csdn.net/weixin_42640280/article/details/127040860]
作用:
设置签名的作用是用来区分不同的操作者的身份,用户的签名信息在每一版本的提交信息中能够看到,可以确认该版本是谁提交的;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 文件
查看设置用户签名是否成功
本机操作:
本机配置的是全局的用户签名,查看是否成功,打开路径:C:\Users\ZCQ\.gitconfig文件
全局的git账户签名设置是否成功查看
C:\Users\用户名\.gitconfig文件
直接命令行查看
$ cat ~/.gitconfig
如下:
[user]
name = zhangchq
email = [email protected]
https://blog.csdn.net/weixin_42640280/article/details/127074182
说明:在想要创建本地库目录中执行命令
初始化本地库命令:
git init
初始化之后.git目录下有这些文件
本机操作:
目录F:\_2_GitSpace\_1_github\git_demo,用来初始化本地库;
进入想要新建本地库的文件夹目录中,执行命令 git init:
生成隐藏文件夹.git ,初始化完成;
命令
查看本地库命令:
git status
git工作区文件的状态:
git工作区文件都包含未追踪和已追踪两种状态
未追踪:如刚在工作区新建的文件
已追踪:可以是以修改,已提交暂存,已提交本地仓库的状态
文件的状态:
解析:
untracked(未追踪 )
unmodified(未修改)
modified(已修改)
staged (已暂存)
未追踪的状态:
已修改未提交暂存区:
提交暂存区:
提交到本地仓库:
-----------------------------
在刚git init初始化本地库之后的git status查看的状态:
翻译:
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 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 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
命令:
添加到暂存区命令:
git add //添加指定path,这里的path可以是文件,也可以是文件夹
git add . //添加所有文件
git add -u //添加新创建的文件,只添加已修改和删除的文件
--------
//如果要撤销提交文件到暂存区,
git rm --cached //撤销暂存指定文件或文件夹
git restore --staged //取消暂存文件
本机操作:
warning提示的是换行符CRLF会自动切换LF,不用管,如下操作helloworld.c这个文件提示暂存区状态的红色变成了绿色,并提示新文件,即helloworld已添加到暂存区;
命令:
git commit -m "版本日志" <文件名> //将暂存区中的文件提交到本地仓库
------
git reflog //查看提交记录,(可以查看到所有分支的所有操作记录信息,方便方便回退版本)
git log //查看提交记录(比较详细,完整版本号,提交人等信息)
本机操作:
查看状态,因为故意弄helloworld_2.c没有提交到暂存区,所以提示有文件没有被追踪
查看提交信息:
注:
1、如图中4e289d2 是版本号,commit后面的数值完整的版本号
2、git log 和 git reflog的最大区别是能不能查询到被删除的 commit 记录和 reset 的操作记录,log不能,而reflog可以;
操作:修改工作区的文件--->查看会提示有文件被修改未追踪----》提交该文件到暂存区----》提交暂存区文件到本地库---》再查看提交信息
命令
命令:
git reset --hard <版本号> //硬回退
git reset --soft <版本号> //软回退
具体步骤:
1、git reflog //查看历史提交信息,选择要回退的版本号
2、git reset 命令回退到指定的版本
总结:
1、git reset --hard 会覆盖到本地工作区的代码,git reset --soft不会覆盖本地工作区代码;
软回退,代码内容没有被覆盖:
注意:回退完git reflog 可以看到版本库中的回退操作,而git log看不到
软回退之后重新由暂存区提交到本地仓库操作结果:
总结:只要提交到本地仓库库(git commit)之后,版本都有记录,用git reflog可看到所有提交,回退的历史记录,不管回退几个版本,都可以自由切换代码的版本;
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 <本地分支名> <远程库名/远程分支名> //拉取远程指定分支并在本地创建分支
一样提交流程:
如下,leaf01分支中的helloworld.c中的内容被合并到了master分支中的helloworld.c
目前修改看到的是本地文件,所以要提交到master分支本地库,然后修改同一个地方不同内容,提交到leaf01分支本地库上面,然后再合并分支,就会出现冲突;
master分支上面helloworld.c中第八行内容:
leaf01分支中helloworld.c文件中第八行的内容:
分支合并冲突的提示:
合并冲突解决:
按照实际要求修改提示冲突的文件,然后提交到暂存区,本地仓库;
注意一个坑:
如下图中所示,(master|MERGING)状态表示在合并分支中,所以修改冲突文件之后提交本地库的命令格式为:git commit -m "版本信息" ,不需要指定文件名,否则出现如下提示,并且提交本地库失败:
提交成功,即合并分支leaf01 到 主分支 master成功。
==================================
切换分支的问题:
这里的解答是,在这个master分支上面修改文件,文件有改动没提交的话,是无法切换分支的;
问题2:在master分支上面修改文件,然后切换分支leaf01分支之后查看文件内容,发现也是和master分支上修改的一样的内容;
解析:
1、提示有文件修改未提交,无法切换分支;
2、可以切换分支,但是第二分支的内容被第一分支的修改覆盖掉了;
1、无法切换分支;
2、第二分支被第一分支覆盖;
解决办法:
1、要提交到哪个分支的内容就切换到哪个分支上,然后提交暂存区和本地库;
2、如果是当前分支上工作还没做完不能提交本地库,又想去别的分支情况下(如果直接切换其他分支可能出现其他分支的内容被覆盖的情况!):
用 git stash 命令隐藏工作现场;
git stash //隐藏当前分支的修改(在当前分支修改文件之后,不提交本地库也能切换其他分支)
git stash list //查看隐藏起来的分支工作现场
git stash apply //恢复,但是stash内容不删除,要用git stash drop来删除
git stash pop //恢复同时stash内容删除;
---------
用法:git stash pop stash @{具体序号}
命令:
=========分支的push与pull操作
git branch -a //查看本地和远程分支
git push <远程库名> <远程分支名> //推送分支到远程(和推送代码一样命令)
git push <远程库名> :<远程分支名> //删除远程分支(本地分支保留)(这个要谨慎操作,就差一个冒号)
git checkout -b <本地分支名> <远程库名/远程分支名> //拉取远程指定分支并在本地创建分支
----
git fetch //用来获取分支最新状态
查看远程分支:
推送本地分支到远程分支,和推送代码一样的指令,即要在要推送到远程的那个本地分支,执行git push <远程仓库名> <远程分支名> ,这样就推送上去了;
拉取远程指定的分支到本地创建:(应用场景:比如说原来电脑上有git项目工作区,原来只有一个master一条主分支,但是现在新开发一个模块,放在远程新分支上(如领导创建的),这就需要把远程分支拉取创建本地原来的git工作区上):
github上面新建一个分支,用来拉取到本地操作实验
git fetch获取显示远程新创建了一个分支:
查看所有分支、拉取远程分支并新建到本地、查看所有分支
网站:github官网
注册账号
点击右上角+号
选择New repository
输入远程库名称、描述、选择私有不公开、下面的添加readme、gitignore文件这里演示而已,不添加
命令:
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 push <远程库名> <分支名> //推送到远程库
本机操作:
本地库推送到远程库之后弹出了左边的窗口,
点击授权:
提交授权之后,可以在github上面看到新增了项目文件
git pull <远程库名> <分支名> // 拉取指定远程库指定分支的代码
本机操作:
如下图,用git pull命令操作 ,第一次出现报错,是github外网的原因拉取失败,重新git pull一次就成功了。
将远程仓库复制到本地进行开发,如果要在固定目录下当做工作目录,而且远端仓库如果是领导创建好了,那么就可以直接用git clone 命令直接复制到本地,复制下来是整个版本库,所以不用Git init 初始化;比如说在F:\_2_GitSpace\_1_github\git_demo_clone目录下想git clone一个远程库下来,只需要直接当前目录下右键打开git bash,然后git clone <远程库url>
git clone <远程库的url> //克隆远程库到本地
1、拉取代码
2、初始化本地库
3、创建别名
本机操作:
github上面创建一个远程库,用来clone到本地操作:
这样复制下来的是整个版本库复制下来;
[git clone、git pull和git fetch的使用和区别_弓长长白水的博客-CSDN博客]
详细内容看:
[git中HPPTS和SSH协议区别和使用_弓长长白水的博客-CSDN博客]