Git 文件管理
文件四种状态
● 版本控制就是对文件的版本控制,在Git 管理中,文件被统一管理,有四个状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git 库, 不参与版本控制. 通过git add 状态变为Staged
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种处理方式, 如果它被修改, 变为Modified. 如果使用git rm 移出版本库,则成为Untracked
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这种文件有两个去处, 通过git add 可进入暂存staged 状态, 使用git checkout 则丢弃修改过, 返回到unmodify 状态,这个git checkout 即从库中取出文件, 覆盖当前修改
- Staged: 暂存状态. 执行git commit 则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify 状态. 执行git reset HEAD filename 取消暂存, 文件状态为Modified
文件操作指令
查看指定文件状态
git status [filename]
先在D:\hellogit2\lunar-javascript , 创建一个测试文件ABC.txt 对应的是Untracked未跟踪 可以使用git add 入库
查看所有文件状态
git status
在这里插入图片描述
添加所有文件到暂存区
git add .
提交暂存区中的内容到本地仓库
git commit -m “消息内容”
忽略文件
实际需求:我们不想把某些文件纳入版本控制中, 如何处理?
忽略文件处理方式
● 不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等, 在主目录下建立".gitignore"文件(默认就有),此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行
- 支持Linux 通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示忽略.gitignore 文件所在的目录,不包括其任何子目录中的dir 目录
- 如果名称的最后面是一个路径分隔符(/),忽略.gitignore 文件所在的目录和所有子目录的dir 目录
*.java #忽略所有.java 结尾的文件 !wyx.java #wyx.java 除外
还有很多可以去看这一篇博客
(2条消息) .gitignore文件语法和常见写法(就看这篇就行了)_.gitignore 区分大小写_石头wang的博客-CSDN博客
看一个实例
在这里插入图片描述
文件D:\hello_git2\lunar-javascript.gitignore
Gitee 创建代码仓库
创建Gitee 账号
- gitee 官网:https://gitee.com/
- 注册地址:https://gitee.com/signup
- 也可以使用微信、QQ、Github 账号登录…
创建账号-具体操作
- 注册地址: https://gitee.com/signup
- 查看邮箱,得到验证码
- 填写得到的验证码和你的gitee 账号密码
- 点击注册, 如果都填写正确,就会注册成功,进入gitee
创建仓库
点击创建仓库
输入仓库的信息, 仓库开源, 需要绑定手机号.
点击创建
设置本机绑定SSH 公钥,实现免密登录
生成SSH 公钥
- 进入C:\Users\Administrator.ssh , 没有就手动创建该文件夹
- 如果该目录下有相应文件,先删除(第一次操作是没有的)
- 执行指令ssh-keygen , 生成文件(说明:直接回车即可), ssh-keygen 指令更多说明:https://blog.csdn.net/weixin_37335761/article/details/120146098
- 比如: ssh-keygen -t rsa-C ‘hninhao@qq.com’ -f ~/.ssh/github_id_rsa
我这里就简单一点就是直接 ssh-keygen 但是去公司上班或者合作开发推荐复杂一点 我这是只是学习为主没有什么重要资料
执行完之后就会生成
将公钥信息public key 添加到码云账户
- 点击设置
- 点击SSH 公钥
- 复制生成的id_rsa.pub 内容
- 拷贝到如下位置
- 提示输入密码验证,然后就成功了
将创建的仓库-克隆到本地
- 先找到仓库,并得到仓库地址url
- 创建D:\gitee_hello_java
- 执行克隆指令
- 克隆成功
IDEA 项目使用Git 管理
需求1-说明
将gitee 创建的wyxjava 项目拉取到IDEA,进行管理
需求1-实现步骤
界面操作
- 将Gitee 初始化wyxjava,拉取到IDEA
- 创建一个crm 模块,进行测试
- 创建HI.java, 进行测试
- 将HI.java add 到git, 说明:将HI.java 加入到暂存区
- 将HI.java commit 到git
commit 只是将HI.java 提交到本地仓库
并没有push 到远程仓库(即GitHub/Gitee)
- 将HI.java push 到Gitee , 会输入用户名密码验证(是Gitee 的账号).
- 观察Gitee 上项目的变化
也可以使用命令行完成
● 操作指令
测试: 创建一个新文件OK.java
看下Gitee 项目的变化,会与新的push 文件
需求2-说明
创建了一个IDEA 项目(没有从Gitee 拉取), 后面又希望和Gitee 的某个代码仓库关联,如何操作?
需求2-实现步骤
界面操作
- 在Gitee 创建一个仓库,比如wyx-sns
- 创建一个springboot /maven 项目wyx-sns
- 克隆gitee 的wyx-sns 到d:/git-wyx-sns
- 将克隆下拉的wyx-sns 的文件,拷贝到IDEA 对应项目中
- 刷新,或者重启IDEA 项目
- 创建文件Hello.java
public class Hello { public static void main(String[] args) { System.out.println("xxx"); } }
- 完成add, commit , push 一系列操作
- 观察gitee 上项目的变化
也可以使用命令行完成
如何查看操作记录
示意图
GIT 分支管理
介绍
一个分支实例
项目地址https://gitee.com/ZhongBangKeJi/CRMEB-Min
分支合并示意图
- 分支可以有多个(根据业务需求)
- 如果各分支没有交集,始终平行发展,则不需要合并(merge)
- 如果两个分支,需要合并,则执行merge 操作
创建IDEA Maven 项目, 和Gitee 的wyx-erp 代码仓库关联
- 先在Gitee 创建仓库wyx-erp, 并设置成开源
- 在新的目录比如d:/idea_projects 使用idea 创建wyx-erp maven, 并和Gitee 仓库wyx-erp关联, 前面已经讲过了,可以去看看
- 创建文件wyxErpApplication.java , 写入一些内容
- 将wyxErpApplication.java push 到Gitee 远程仓库, 执行add->commit->push
- 观察Gitee 远程仓库是否已经push 成功
git 分支指令
地址: https://gitee.com/all-about-git
指令一览
# 列出所有本地分支 $ git branch # 列出所有远程分支 $ git branch -r # 列出所有本地分支和远程分支 $ git branch -a # 新建一个分支,但依然停留在当前分支 $ git branch [branch-name] # 新建一个分支,并切换到该分支 $ git checkout -b [branch] # 新建一个分支,指向指定commit $ git branch [branch] [commit] # 新建一个分支,与指定的远程分支建立追踪关系 $ git branch --track [branch] [remote-branch] # 切换到指定分支,并更新工作区 $ git checkout [branch-name] # 切换到上一个分支 $ git checkout - # 建立追踪关系,在现有分支与指定的远程分支之间 $ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到当前分支 $ git merge [branch] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit] # 删除分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
应用实例
需求:克隆wyx-erp 仓库, 创建分支v1.0, 并提交到远程仓库
指令操作演示
IDEA 项目创建分支
- 创建分支
- 把分支同步到Gitee 远程仓库
- 查看远程仓库
IDEA 项目切换分支, 进行工作
- 切换分支(指令checkout)
- 在v2.0 分支下, 我们修改/增加一下文件, 就是针对当前v2.0 的
- 把wyxErpApplication.java Add->Commit->Push 到Remote 仓库, 按照老师步骤来.
执行Add
执行Commit
执行Push
- 观察Gitee 的远程仓库变化
- 观察本地仓库版本切换的变化
IDEA 项目分支合并, 没有冲突的情况
● 在进行分支合并时, 如果没有冲突(比如没有修改同一个文件), 这时会比较顺畅.
- 案例演示/需求说明: 将分支v3.0 合并到Master 主分支
- 从master 开一个分支v3.0, 在v3.0 增加一些文件, 不在master 和v3.0 修改同一个文件
- 将分支v3.0, 同步到Gitee 远程仓库, 操作步骤和前面一样开v2.0 一样.
切换到v3.0, 并增加一个文件Hi.java, 并Add->Commit->Push 到远程仓库
注意看Master 主分支,在本地仓库和远程仓库, 都没有Hi.java
将v3.0 合并到Master 分支, 注意当前是Master 主分支(看图标)
注意看Master 主分支,这时在本地仓库, 有Hi.java , 但是远程仓库还没有
将本地的Master 分支, Push 到远程仓库, 这时观察远程仓库Master 下也有HI.java 了
IDEA 项目分支合并, 有冲突的情况
接受某一方, 解决冲突
● 如果同一文件在合并分支时都被修改了则会引起冲突, 修改冲突文件后重新提交(说明:这时要决定保留哪个分支代码)
- 案例演示/需求说明: 将分支v3.0 合并到Master 主分支
- 切换到v3.0, 修改wyxErpApplication.java
- 把wyxErpApplication.java 进行Add->Commit->Push 操作(如果已经Add 过, 就不需要Add),
- 切换到Master, 也修改一下Master 的wyxErpApplication.java , 同样进行Add->Commit->Push (如果已经Add 过, 就不需要Add) 操作.
- 将V3.0 合并到Master
- 出现冲突
- 观察本地的Master 分支的wyxErpApplication.java , 已经和V3.0 一致了, 但是远程仓库的Master 还是没有变化, (原因Master 分支还没有Push)
- 再将Master Push 到Gitee 远程仓库, 就会看到相应的变化(注意在Push 前, 请确认要Push 的文件/文件夹是已经Committed, 否则你看不到变化.)
手动修改,解决冲突 也有一样的
IDEA 项目删除分支
彻底删除某个分支
- 如果某个分支不需要了, 可以删除, 一定要慎重
- 注意观察远程仓库, 分支V3.0 也没有了
只删除本地分支, 还可以重新获取
注意事项和细节说明
- 如果同一文件在合并分支时都被修改了则会引起冲突, 修改冲突文件后重新提交(说明:这时要决定保留哪个分支代码)
- Master 主分支应该非常稳定,用来发布新版本,一般情况下不要在上面工作,工作一般在新建的分支(比如dev、v1.0、v2.0)上工作
- 分支代码稳定后,可以合并到主分支Master
- 在进行分支合并时, 最好是各分支都已经处于Committed 的状态, 这样可以减小处理合并冲突的难度.
- Push 操作, 是Push 你已经Committed 的代码, 如果你修改了一个文件, 但是你没有执行Commit ,那么你Push 的其实是上次Committed 的状态
- add 、commit 、push 的操作可以针对单个文件, 也可以针对文件夹(可以看一下Idea的git 操作菜单)
- 文件要Commit 前需要先Add 到暂存区, 以后文件修改了, 就可以直接Commit
- 如果要删除文件, 可以在本地删除该文件, 然后commit 文件所在文件夹即可, 并重新push 该分支, 那么在远程仓库, 也会删除对应分支的文件.