Git学习笔记
Git
尚硅谷
1.概述
- 分布式版本控制工具
- github以,gitee(码云)以及gitlab使用
- idea集成
2.分布式vs集中式
- 这里老师没有讲的太清楚,个人理解如下:
- 集中式只是在中央服务器有完整的版本信息,进行版本控制,每个人想操作要接力(像同步)
- 分布式是每个人的电脑都有完整的版本信息,可以进行版本控制,再向中央仓库推送(像并行)
3.工作机制
- 工作区:写代码,代码磁盘位置
- 暂存区:临时存储,代码提交之前放到暂存区
- 本地库:储存历史版本
- 远程库
4.代码托管中心
- 也就是远程库,本地库可以推送远程库
- 局域网:gitlab
- 互联网:gitee,github
5.安装
- csdn大把教程,略过
6.Git常用命令
黑色的是设置用户签名,不是太重要。安装时设置一次即可,否则使用git时会报错。(在博客网站已经设置)
用户签名的作用是区分不同操作者的身份
签名只是在本地和登陆的github客户端没有任何关系
git大多数命令和linux通用。
6.1 初始化本地仓库
- 在项目文件夹右键git bash here
- 执行
git init
命令—>会自动创建.git隐藏目录,就算初始化完成
6.2 查看本地库状态
git status
,查看本地库状态,输出日志- 第一行:告诉你当前所在分支,也在
这里显示。
- 第二行:还没有提交过任何东西
- 第三行:没有任何东西可以用来提交(本地为空)
- 第一行:告诉你当前所在分支,也在
当添加过了东西,第二行变为,没有被追踪过的文件:因为没有提交过。第三行:除了没有被追踪过的文件没有可以提交的
6.3 添加文件到暂存区
git add 文件名
- 此时可以看到
git status
有了记录,并且提示git rm --cached <文件名>
即可从暂存区删除,但是不会删除本地的。 cat 文件名
查看的是工作区中的文件(也就是本地的文件)
6.4 提交本地库
将文件提交至本地库来形成历史版本
git commit-m "日志信息" 文件名
-m的意思就是输入一个日志信息,如果不写的话也会提示你。此时git状态如此提示,working tree clean说工作树是干净的,表示此时没有任何东西需要提交。
git reflog
:查看版本信息日志,版本号是git log
命令的前七位精简版。git log
:查看详细日志有提交人和时间。
ctrl+l
:可以给git清屏修改后状态会改变,需要重新add,commit,并且日志会提示给你修改了啥(但是只能显示和 行 有关的信息)。
查看日志
7.版本穿梭
git reflog
和git log
查看版本信息git reset --hard 精简版本号
,会穿越到历史版本(本地的会变)可以在此查看当前的版本号
- 不仅可以往前穿越,还可以往后穿越。
- 原理:master指针指向存在内存中的谁
8.Git分支操作
流程:
分支:代码开发同时推进多个任务,为每个任务创建一个分支,不会影响主线(开发坏了没事),底层也是指针引用。
分支更新:
优点:
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
8.1 查看&创建&切换
分支操作:四大步
查看分支并创建分支:
- 查看当前分支,创建hot-fix分支,再次查看分支,能看见新增分支
- checkout命令切换分支,再次查看分支,能看见hot-fix分支名字变绿和蓝色小括号更改,说明切换到了hot-fix分支
- 在hot-fix分支修改txt文件,查看状态
- 提交至暂存区然后上传至工作区,cat查看发现是我们改好后的
- 总结:创建的新分支在旧分支的基础上更改,还不影响旧分支。
- 底层逻辑还是指针
8.2 分支合并(正常合并)
git merge 分支名
:指这里的分支名和当前蓝色括号里面的分支进行合并。如果原分支没有修改(比如例子这里的master分支没有修改),将修改了的现分支(比如这个hot-fix)合并到原分支上就相当于修改了原分支的内容。
这叫做正常合并。
8.4 分支合并(冲突合并)
冲突产生的原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。查看状态(检测到有文件有两处修改)。
强行合并:
会说自动合并失败
此时git查看状态蓝括号是合并中
并且报错说都修改了
此时vim编辑这个文件,git会告诉你哪儿有问题
<<<<<head下的内容是当前分支,>>>>>>>hot-fix上,=====下的内容是要合并的分支。并且了问题所在
删掉报错做最终修改
然后重新添加,上传
再看,就是没事了,当前分支的这个文件就是修改之后的了。
底层原理也是指针
9.Git的团队协作机制
9.1团队内协作
- 左边本地库是管理员,需要给右边本地库一定权限,并且右边成员在团队内。
9.2跨团队协作
- fork:叉子,在这里是作为新分支插在东方不败的远程库。
10.Github
10.1 基本操作
创建远程仓库
可以把链接地址复制到本地
常用操作:
创建别名:链接太长,创建别名,操作时可以用别名,别名最好和库名保持一致。
为什么有两个别名?->可以推送和拉取,都用这个别名。
git remote remove 别名
可以删除别名推送代码:
git push 别名 分支
拉取代码:
git clone 远程地址
拉取之后查看状态,正常。说明拉取之后会自动提交到本地库,然后查看文件内容,和修改之后的一样。
克隆远程库到本地:
git-clone 远程链接
克隆代码是不需要账号的。
克隆下来的代码会自动取别名
团队协作:
添加成员,授予权限
成员点开邀请函链接然后接受,然后就能成功push了
团队内的其他人也可以pull成员push好的代码(同一分支),这就是团队协作的大致流程。
跨团队协作:
点开需要帮忙操作的别人的仓库地址,点击fork,会发现自己的仓库也有这个项目了。
然后修改完毕,需要创建一个pull request
被pull请求的人可以点击合并申请,然后点击缺定
可以把别人改好的代码合并到自己的这里来
此时再查看代码就是别人改好了的,团队其他成员也可以看到。
ssh免密登录:
生成ssh:
ssh-keygen -t rsa -c 邮箱地址
,然后敲三次回车然后电脑家目录就有.ssh文件,里面有公钥和私钥
上面是私钥下面是公钥,把公钥拿下来
github,设置,ssh,新建公钥,复制粘贴,生成成功
此时远程库的这个项目就有ssh地址了,通过这个ssh链接,可以进行pull,push等操作。
github token使用:https://blog.csdn.net/chengwenyang/article/details/120060010
10.2 idea集成git
配置git忽略掉文件:
忽略掉ide的配置文件或者秘密文件
创建git.ignore,模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# Compiled class file
*.class
# Log file
*.10g
# BlueJ files
*ctxt
# Mobile Tools for Java (J2ME)
.mtj tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml在项目的
.gitconfig
文件下配置一下1
2[core]
excludesfile = C:/Users/asuis/git.ignore 注意要把反斜线改为正斜线(windows默认反斜线)
idea定位Git程序:idea搜索git(或者version control里面找),然后再找到git\bin\git.exe,点一下test,看到git版本信息,就配置成功了。
项目git初始化:idea上方工具栏vcs,import into version control—>creat git repository,默认会选择该项目的根目录,点击ok,然后发现出现.git目录,idea中也有红色文件(说明未被追踪)。
如何添加项目到暂存区?:直接在idea右键项目(可以是文件可以是整个项目,若是整个项目有忽略文件,idea会问,选否就好),Git->add,就好,会变绿,说明已经添加到暂存区但是还没提交,此时新加文件idea会提问你是否add。
如何提交?:右键commit,此时会弹出框框看见暂存区的文件,还可以写提交信息,提交成功后文件就变成以前的颜色(黑色)。注意追踪过一次,idea中就不用再追踪了,直接提交就好(或者看文件颜色行事)。
如何切换版本?:idea左下角version control->log,可以看到历史版本和当前版本,有黄(当前版本)绿(当前分支)两个指针的图片。右键checkout即可切换版本。右下角还有详细信息。
idea分支操作:
创建&切换:
右键项目->git->repository->Branches->new branch。还可以点击右下角这个
也会有new branch
点左边第一个勾勾不仅创建还切换过去。右下角可以显示分支名字并且切换分支(点击分支->checkout)。
正常合并:创建分支修改(概念之前有详细讲解),merge into current:合并到当前
冲突合并:新分支与旧分支修改的不一样了(概念之前有详细讲解)
这样的分支合并过来必定会发生代码冲突,idea也会提示
点击手动合并,出现合并工具,分别是:master分支修改后的代码,未修改(要手动合并)的代码,hot-fix分支的代码。
分别点
就会将代码添加
点击apply,手动合并成功。并且显示很清晰:
10.3 idea集成github
设置github
- 设置搜索github,没有的话插件商店安装一下。
- 设置github账号,可以token登录
分享项目到github
可以省略创建远程库
有库名(一般和项目名一致),别名(一般和项目名一致),是否私有(一般公有),和项目描述(可填可不填)
静待idea自动push即可,idea分享操作相当于:创库+push
推送代码到github:
右键git:
add提交到暂存库
commit提交到本地库
push默认选中别名,建议ssh push(因为默认https上传,和网络关系很大):先复制ssh链接
然后点击别名,点击自定别名,起个别名(前面加个ssh- 就好),然后填入url就好,之后点击push就好。
相当于是把命令图形界面化了
拉取远程库:
注意:push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push的操作是会被拒绝的。也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
注意:pull是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
选一下合并就好(此时的远程库是最新的)
克隆代码到本地
idea初始化页面就可以选一下
然后选择
再填入url即可
11.Gitee
使用和github相似,注册登录使用就完事,还是中文版的
idea也可以整合gitee,操作相似,先安插件。码云推荐https链接,因为是国内的。
码云复制github项目:
创建仓库时往下找,导入已有仓库。
选择github的https链接,检测,创建,就能迁移过来。
可以同步代码,点击刷新按钮就好
12.GitLab
- 安装:centos7系统
- 关闭防火墙,配置好ip,可以上网
- 暂时用不到,看视频配置。