目录
一、Git分布式版本控制。
(1)Git简介。
(2)Git工作流程图。
(3)Git安装。
(4)Git基本配置。
(4.1)用户信息配置(不一定是真实的信息) 。
(4.2)指令别名配置。
(4.3)解决GitBash乱码问题(我没使用过)。
${git_home}:指的是git所在目录。
(5)初始化(创建)本地仓库。
(6)工作区、暂存区、仓库。
工作区:修改后、或新创建的文件,还未执行git add指令。
暂存区:工作区执行git add指令后,还未执行git commit指令。
仓库(本地仓库):暂存区的文件执行git commit指令后。
注意:工作区与暂存区的文件:属于所有分支(只有提交的,才是私有)
(7)Git常用指令。
(7.1)查看修改状态(status)。
git status: 暂存区与工作区有变动的信息(如新建、修改)。
(7.2)添加工作区到暂存区(add)。
(7.3)提交暂存区到本地仓库(commit)。
不需要注释:则 git commit 就行
(7.4)查看提交日志(log)。
注意:参数位置不固定,即参数之间没有前后顺序。
(7.5)版本回退、查看已删除提交记录。
(7.6)添加文件至忽略列表(不需被git管理的文件)。
(7.7)练习:基础操作。
(8)分支。
(8.1)分支的概念。
理解:
1、 HEAD指向当前使用的分支,括号()中的就是分支的名字。
2、(分支名)出现的位置代表的是该分支最近一次的提交信息,然后往下看以往的提交。
3、线条就是指向该分支的提交信息。
(8.2)查看本地分支。
git branch
(8.3)创建本地分支(需注意)。
笔记:创建分支在哪个分支下创建,就包含该分支的提交(相当于把该分支仓库复制一份给创建分支),之后的就是互不干扰了(使用哪个分支创建分支提交等,都不会影响其他分支)。(创建分支(复制)包含了 那个分支的(提交)仓库)
注意:工作区与暂存区的文件:属于所有分支(只有提交的,才是私有) 。
所以理论上相当于包含了该分支的(提交)仓库、暂存区、工作区。
git branch 分支名 —— 例如:git branch dev01
(8.4)切换分支。
注意:对已提交文件进行修改后,必须要重新提交才能切换其他分支,否则切换失败。
第一种:切换分支:
z第一种:git checkout 分支名 —— 例如:git checkout dev01
第二种:切换到一个不存在的分支(创建并切换) :
第二种:git checkout -b 分支名 —— 例如:git checkout -b dev01
(8.5)合并分支(合并的是——提交)。
注意:使用的是哪个分支,就把被合并分支 合并到 哪个分支。
注意:工作区与暂存区的文件:属于所有分支(只有提交的,才是私有) 。
git merge 要合并的分支名称 —— git merge dev01
(8.6 )删除分支。
注意:不能删除当前分支,只能删除其他分支。
第一种(已经被合并了的分支可删):删除分支时,需要做各种检查。
git branch -d 分支名 —— 例如:git branch -d dev01
第二种(还未被合并的分支,需强制删除):不做任何检测,强制删除。
git branch -D 分支名 —— 例如:git branch -D dev01
(8.7)合并冲突。
出现冲突:如果两个分支都对同一个文件同一行进行了修改,那么就会出现合并冲突(不知道要哪一个分支的修改);如果只有一个分支进行了修改(另外一个分支没有修改),则合并的时候就要修改过的那个数据。
(8.8)开发中分支使用原则与流程。
(8.9)分支练习。
二、Git远程仓库(gitee码云)。
(1)注册码云账户、新建远程仓库。
(2)配置SSH公钥。
1.生成公钥。
2.查看公钥。
3. 验证是否配置成功。
如果使用 HTTPS 协议来访问 Git 远程仓库,则相较于 SSH 协议有以下区别:
访问方式不同:SSH 协议通过密钥认证登录 Git 服务器,而 HTTPS 协议则需要在每次访问时输入用户名和密码进行身份认证才能登录。
安全性不同:SSH 协议的加密强度更高。
速度不同:由于 HTTPS 协议需要在每次访问时进行身份认证,所以通常比 SSH 协议的连接速度慢,尤其是在大量的代码下载或上传时,速度差距更加明显。
综上所述,使用 SSH 协议访问 Git 仓库通常比使用 HTTPS 协议更加安全和快捷,尤其是在需要频繁进行代码操作的情况下。但是,如果您无法使用 SSH 协议,则可以选择使用 HTTPS 协议来访问 Git 仓库,但需要注意身份认证和数据安全等问题。
(3)操作远程仓库——指令。
(3.1)添加远程仓库。
git remote add 别名 远程仓库地址(使用SSH协议)
例如:git remote add origin git@gitee.com:czbk_zhang_meng/git_test.git
git@gitee.com:czbk_zhang_meng/git_test.git
是Git远程代码仓库的地址;origin是远程仓库地址的一个别名。
(3.2)查看远程仓库。
git remote
(3.3)推送到远程仓库。
完整指令:git push [-f] [--set-upstream] [别名 [本地分支名][:远端分支名] ]
常用:
git push origin master
git push origin master:master
git push --set-upstream origin master:master
git push(必须有上面那个关联,才能用这个)
参数讲解:
-f 表示强制覆盖
-set-upstream推送到远端的同时并且建立起和远端分支的关联关系。(作用:则可以省略远程仓库别名、分支名、远程仓库分支名)
第一次的时候:git push --set-upstream origin master(进行关联)
第二次的时候:git push(将某分支推送到已关联的远端分支。)
(3.4)查看本地分支与远程分支的关联关系。
关联关系理解:本地分支与远程仓库分支有一条映射(对应)关系。
如:关联(a -》b):a的指向就是b。
git branch -vv
(3.5)把远程仓库克隆到本地。
注意:克隆的仓库目录默认在命令行的当前目录下(不写目录名称,则默认远程仓库名称)。
git clone 远程仓库地址 [本地目录]
例如:git clone git@gitee.com:czbk_zhang_meng/git_test.git test_git(目录名称可省)
(3.6)从远程仓库中抓取与拉取。
1.抓取:git fetch 远程仓库别名 远程仓库分支名。
1.
git fetch
会获取远程仓库上的所有分支的最新代码,并在本地更新远程跟踪分支(例如,origin/master
分支)。2.git merge origin/master:将origin/master远程分支合并到当前分支。(origin/master是远程仓库分支名)
2.拉取:git pull 远程仓库别名 远程仓库分支名。
git pull
会获取远程仓库上当前分支的最新代码,(例如,origin/master
分支),并将远程跟踪分支与本地当前分支进行合并。
(3.7)解决合并冲突(远程)。
如果有A、B两个用户:
1、B在a.txt文件的第一行上写了“你好”,然后推到git远程仓库。
2、然后A也对a.txt文件第一行写了“我很好”,然后A如果想要推到git远程仓库,那么就会产出冲突(不知道保留“你好”还是保留“我很好”),则A用户需要先拉取到本地合并,解决冲突后(删除不要的内容),将修改的文件重新提交到仓库,然后才能推到git远程仓库。
(3.8)练习远程仓库指令。
(3.9)远程git项目出现文件夹后面跟@+数字。
解决:删除该文件夹,然后进入该本地目录,删除里面的.git文件,然后重新添加、提交、推送就好了。
(3.10)上传大文件到gitee。
1.在git-lfs官网上下载lfs安装包,双击安装程序按提示安装即可。
2.开启lfs功能。
git lfs install #开启lfs功能
3.在 Git 仓库中启用 LFS 跟踪,对哪些文件进行跟踪(管理)。
git lfs track "*.zip"
4.添加、提交、推送。(这几个跟原来的是一模一样,不需要变)。
git add 文件
git commit -m "提示信息"
git push origin master
5.使用以下命令下载已推送的大型二进制文件(我还未使用过)。
git lfs pull
6.禁止使用lfs。
git lfs uninstall
异常处理:
第一个异常:WARNING: Authentication error: Authentication required: LFS only supported repository in paid enterprise.
batch response: LFS only supported repository in paid enterprise.
git config lfs.https://gitee.com/tan-dream-yiyi-xi/1.learn-code-and-software.git/info/lfs.locksverify false
注意:
https://gitee.com/tan-dream-yiyi-xi/1.learn-code-and-software.git是远程仓库https地址。
使用SSH地址:
git config lfs.ssh://<ssh-url-for-your-repo>/info/lfs.locksverify false
在上述命令中,将
<ssh-url-for-your-repo>
替换为您从Gitee上复制的 SSH URL
第二个异常:error: failed to push some refs to 'gitee.com:tan-dream-yiyi-xi/1.learn-code-and-software.git'
解决方法:删除.git/hooks/pre-push文件
(3.11)使用lfs依旧失败的原因。
git commit --hard
版本号:不仅仅会重置索引区和工作目录,还会清除所有历史记录,也就是说,以前的提交都将永久消失。
git reset --hard
版本号:只会将HEAD指向新的提交,旧的提交历史仍然存在。
失败提示:使用lfs出现 文件171.25 MB, exceeds 100.00 MB.
失败原因:文件没有被跟踪,所以上传只会是失败。(刚开始没有被跟踪)。
解决方法:是因为文件一开始没有被跟踪,需要reset重置版本,重新提交推送。
举例:返回到提交大文件版本之前。
git reset --hard 80a2b45
git add .
git commit -m "重新提交"
git push origin master
三、在Idea中使用Git。
(1)在IDEA中配置Git。
(2)创建项目远程仓库。
(3)初始化本地仓库。
(4)提交、推送、克隆、更新拉取、git-log等操作。
(5)分支:创建、切换、合并等操作。
(6)解决推送冲突(推送时合并冲突)。
解决方法:修改有冲突的文件。