初学者应该怎么学git-下

简介: 初学者应该怎么学git-下

Git 文件管理

文件四种状态

● 版本控制就是对文件的版本控制,在Git 管理中,文件被统一管理,有四个状态

  1. Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git 库, 不参与版本控制. 通过git add 状态变为Staged
  2. Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种处理方式, 如果它被修改, 变为Modified. 如果使用git rm 移出版本库,则成为Untracked
  3. Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这种文件有两个去处, 通过git add 可进入暂存staged 状态, 使用git checkout 则丢弃修改过, 返回到unmodify 状态,这个git checkout 即从库中取出文件, 覆盖当前修改
  4. 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"文件(默认就有),此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行
  2. 支持Linux 通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示忽略.gitignore 文件所在的目录,不包括其任何子目录中的dir 目录
  5. 如果名称的最后面是一个路径分隔符(/),忽略.gitignore 文件所在的目录和所有子目录的dir 目录
*.java #忽略所有.java 结尾的文件
!wyx.java #wyx.java 除外

还有很多可以去看这一篇博客

(2条消息) .gitignore文件语法和常见写法(就看这篇就行了)_.gitignore 区分大小写_石头wang的博客-CSDN博客

看一个实例

在这里插入图片描述

文件D:\hello_git2\lunar-javascript.gitignore

Gitee 创建代码仓库

创建Gitee 账号

  1. gitee 官网:https://gitee.com/
  2. 注册地址:https://gitee.com/signup
  3. 也可以使用微信、QQ、Github 账号登录…

创建账号-具体操作

  1. 注册地址: https://gitee.com/signup
  2. 查看邮箱,得到验证码
  3. 填写得到的验证码和你的gitee 账号密码
  4. 点击注册, 如果都填写正确,就会注册成功,进入gitee

创建仓库

点击创建仓库

输入仓库的信息, 仓库开源, 需要绑定手机号.

点击创建

设置本机绑定SSH 公钥,实现免密登录

生成SSH 公钥
  1. 进入C:\Users\Administrator.ssh , 没有就手动创建该文件夹
  2. 如果该目录下有相应文件,先删除(第一次操作是没有的)

  1. 执行指令ssh-keygen , 生成文件(说明:直接回车即可), ssh-keygen 指令更多说明:https://blog.csdn.net/weixin_37335761/article/details/120146098
  2. 比如: ssh-keygen -t rsa-C ‘hninhao@qq.com’ -f ~/.ssh/github_id_rsa

我这里就简单一点就是直接 ssh-keygen 但是去公司上班或者合作开发推荐复杂一点 我这是只是学习为主没有什么重要资料

执行完之后就会生成

将公钥信息public key 添加到码云账户
  1. 点击设置

  1. 点击SSH 公钥

  1. 复制生成的id_rsa.pub 内容

  1. 拷贝到如下位置

  1. 提示输入密码验证,然后就成功了

将创建的仓库-克隆到本地

  1. 先找到仓库,并得到仓库地址url

  1. 创建D:\gitee_hello_java
  2. 执行克隆指令

  1. 克隆成功

IDEA 项目使用Git 管理

需求1-说明

将gitee 创建的wyxjava 项目拉取到IDEA,进行管理

需求1-实现步骤

界面操作

  1. 将Gitee 初始化wyxjava,拉取到IDEA

  1. 创建一个crm 模块,进行测试

  1. 创建HI.java, 进行测试

  1. 将HI.java add 到git, 说明:将HI.java 加入到暂存区

  2. 将HI.java commit 到git
    commit 只是将HI.java 提交到本地仓库
    并没有push 到远程仓库(即GitHub/Gitee)

  1. 将HI.java push 到Gitee , 会输入用户名密码验证(是Gitee 的账号).

  1. 观察Gitee 上项目的变化

也可以使用命令行完成

● 操作指令

测试: 创建一个新文件OK.java

看下Gitee 项目的变化,会与新的push 文件

需求2-说明

创建了一个IDEA 项目(没有从Gitee 拉取), 后面又希望和Gitee 的某个代码仓库关联,如何操作?

需求2-实现步骤

界面操作

  1. 在Gitee 创建一个仓库,比如wyx-sns

  1. 创建一个springboot /maven 项目wyx-sns
  2. 克隆gitee 的wyx-sns 到d:/git-wyx-sns

  1. 将克隆下拉的wyx-sns 的文件,拷贝到IDEA 对应项目中

  1. 刷新,或者重启IDEA 项目

  1. 创建文件Hello.java
public class Hello {
public static void main(String[] args) {
    System.out.println("xxx");
  }
}
  1. 完成add, commit , push 一系列操作

  1. 观察gitee 上项目的变化

也可以使用命令行完成

如何查看操作记录

示意图

GIT 分支管理

介绍

一个分支实例

项目地址https://gitee.com/ZhongBangKeJi/CRMEB-Min

分支合并示意图

  1. 分支可以有多个(根据业务需求)
  2. 如果各分支没有交集,始终平行发展,则不需要合并(merge)
  3. 如果两个分支,需要合并,则执行merge 操作

创建IDEA Maven 项目, 和Gitee 的wyx-erp 代码仓库关联

  1. 先在Gitee 创建仓库wyx-erp, 并设置成开源
  2. 在新的目录比如d:/idea_projects 使用idea 创建wyx-erp maven, 并和Gitee 仓库wyx-erp关联, 前面已经讲过了,可以去看看
  3. 创建文件wyxErpApplication.java , 写入一些内容
  4. 将wyxErpApplication.java push 到Gitee 远程仓库, 执行add->commit->push
  5. 观察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 项目创建分支

  1. 创建分支

  1. 把分支同步到Gitee 远程仓库

  1. 查看远程仓库

IDEA 项目切换分支, 进行工作

  1. 切换分支(指令checkout)

  1. 在v2.0 分支下, 我们修改/增加一下文件, 就是针对当前v2.0 的

  2. 把wyxErpApplication.java Add->Commit->Push 到Remote 仓库, 按照老师步骤来.

执行Add

执行Commit

执行Push

  1. 观察Gitee 的远程仓库变化

  1. 观察本地仓库版本切换的变化

IDEA 项目分支合并, 没有冲突的情况

● 在进行分支合并时, 如果没有冲突(比如没有修改同一个文件), 这时会比较顺畅.

  1. 案例演示/需求说明: 将分支v3.0 合并到Master 主分支
  2. 从master 开一个分支v3.0, 在v3.0 增加一些文件, 不在master 和v3.0 修改同一个文件
  3. 将分支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 项目分支合并, 有冲突的情况

接受某一方, 解决冲突

● 如果同一文件在合并分支时都被修改了则会引起冲突, 修改冲突文件后重新提交(说明:这时要决定保留哪个分支代码)

  1. 案例演示/需求说明: 将分支v3.0 合并到Master 主分支
  2. 切换到v3.0, 修改wyxErpApplication.java

  1. 把wyxErpApplication.java 进行Add->Commit->Push 操作(如果已经Add 过, 就不需要Add),
  2. 切换到Master, 也修改一下Master 的wyxErpApplication.java , 同样进行Add->Commit->Push (如果已经Add 过, 就不需要Add) 操作.
  3. 将V3.0 合并到Master

  1. 出现冲突

  1. 观察本地的Master 分支的wyxErpApplication.java , 已经和V3.0 一致了, 但是远程仓库的Master 还是没有变化, (原因Master 分支还没有Push)

  1. 再将Master Push 到Gitee 远程仓库, 就会看到相应的变化(注意在Push 前, 请确认要Push 的文件/文件夹是已经Committed, 否则你看不到变化.)

手动修改,解决冲突 也有一样的

IDEA 项目删除分支

彻底删除某个分支

  1. 如果某个分支不需要了, 可以删除, 一定要慎重

  1. 注意观察远程仓库, 分支V3.0 也没有了

只删除本地分支, 还可以重新获取

注意事项和细节说明
  1. 如果同一文件在合并分支时都被修改了则会引起冲突, 修改冲突文件后重新提交(说明:这时要决定保留哪个分支代码)
  2. Master 主分支应该非常稳定,用来发布新版本,一般情况下不要在上面工作,工作一般在新建的分支(比如dev、v1.0、v2.0)上工作
  3. 分支代码稳定后,可以合并到主分支Master
  4. 在进行分支合并时, 最好是各分支都已经处于Committed 的状态, 这样可以减小处理合并冲突的难度.
  5. Push 操作, 是Push 你已经Committed 的代码, 如果你修改了一个文件, 但是你没有执行Commit ,那么你Push 的其实是上次Committed 的状态
  6. add 、commit 、push 的操作可以针对单个文件, 也可以针对文件夹(可以看一下Idea的git 操作菜单)
  7. 文件要Commit 前需要先Add 到暂存区, 以后文件修改了, 就可以直接Commit
  8. 如果要删除文件, 可以在本地删除该文件, 然后commit 文件所在文件夹即可, 并重新push 该分支, 那么在远程仓库, 也会删除对应分支的文件.


目录
相关文章
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
【4月更文挑战第6天】`ReentrantLock`是Java并发编程中一个强大的同步工具,比`synchronized`提供更丰富功能。它支持可响应性、可中断性、公平性选择及条件变量。通过示例展示了创建、公平性设置、可中断锁定、尝试锁定及条件变量的使用。`ReentrantLock`使线程同步更灵活,适用于高性能应用,但使用需谨慎,理解其原理并恰当使用。
205 2
|
4月前
|
存储 设计模式 缓存
OkHttp源码解析(小白必看,建议收藏)
本文详细解析了OkHttp3的源码及其实现机制,适合初学者学习。文章从Request与Response结构、HTTPS握手过程、响应码含义、Socket概念到责任链模式的应用逐一讲解。重点分析了OkHttp的工作流程:通过Call对象的enqueue()或execute()方法发起请求,核心是getResponseWithInterceptorChain(),利用拦截器链处理请求,包括用户自定义拦截器、重试、桥接、缓存、连接等步骤。最后还探讨了Dispatcher的任务调度机制。
590 71
|
Ubuntu 安全 Linux
Docker的安装和版本详细介绍
Docker的安装和版本详细介绍
2572 0
Docker的安装和版本详细介绍
|
6月前
|
Java 应用服务中间件 API
Servlet开发流程 (里面有Idea项目添加Tomcat依赖详细教程)
本文详细介绍了Servlet的开发流程,包括在IntelliJ IDEA中添加Tomcat依赖的详细教程。通过上述步骤,开发者可以快速搭建并运行一个基本的Servlet应用,理解并掌握Servlet的开发流程对于Java Web开发至关重要。希望本文能够帮助开发者顺利进行Servlet开发,提高工作效率。
521 78
|
10月前
|
Java
SpringBoot构建Bean(RedisConfig + RestTemplateConfig)
SpringBoot构建Bean(RedisConfig + RestTemplateConfig)
121 2
|
开发者 Python
Python 的编码规范和最佳实践: 什么是 PEP 8?为什么要遵循 PEP 8 编码规范?
**PEP 8是Python的代码风格指南,促进代码一致性与可读性。它规定4个空格缩进,每行不超过79字符,变量名用下划线分隔小写,类名驼峰式大写。遵循PEP 8提升代码易读性,增强团队协作效率,支持社区代码质量。**
189 0
|
监控 持续交付 开发者
构建高效微服务架构:策略与实践
【2月更文挑战第22天】 随着现代企业应用向复杂、灵活和快速迭代的方向演进,微服务架构已成为支撑此类需求的重要解决方案。本文将深入探讨构建一个高效微服务架构的关键策略,并通过具体实践案例分析其实现过程。我们将从服务的划分、治理、部署以及监控等方面出发,提供一系列切实可行的建议,并讨论在实施过程中可能遇到的挑战及应对措施。通过阅读本文,读者将获得一套系统的方法论,用于指导和优化自身的微服务架构设计。
83 0
|
JSON 文字识别 API
哈哈,我用Python开发了一个搜题神奇
哈哈,我用Python开发了一个搜题神奇
403 0
|
存储 程序员 数据安全/隐私保护
算数运算符
在 Python 中 `*` 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果。`+`运算符可以让两个字符串相加
149 0