git 入门到入土

git 入门到入土

常用命令(本地)

命令建议粗略过一遍配合概念食用

  • add

    将文件添加到暂存区

  • commit -m <提交描述信息>

    提交文件到 git 仓库

对于一个 git 仓库中的文件按照存在位置,主要分为三个

在这里插入图片描述
工作区:开发者实际操作的文件夹

暂存区:从工作区提交到 git 仓库中间过程,文件暂时存放的地方,对应 .git 文件夹下的 index 文件

git 仓库:git 实际进行版本控制的地方,对应 .git 文件夹下的 objects 文件夹,只有提交后对应文件才归 git 进行版本控制

暂存区有什么作用?

一下看过去暂存区好像并没有什么作用,但是在实际流程中暂存区有不可替代的作用。

在这里插入图片描述
git 仓库中并不会存储真正的文件,而是按照每一次提交的文件快照串联成一棵树,而暂存区所在的 index 文件保存着文件对应的索引,提交后可以转化为 git 仓库上的树节点。

如果你想对一系列复杂的业务代码进行提交,如果没有缓存区可能会多次提交。但是加上缓存区后可以避免多次提交。

  • status

    查看文件状态

    git 中文件存在几种状态

在这里插入图片描述

  • untracked:未跟踪,即这个文件不由 git 进行管理

  • unmodified:未修改,由 git 管理,但是与上一次的快照一样即未被更新

  • modified:修改,与上一次快照不一样文件已经被修改过

  • staged:已经被放入暂存区的

  • branch

    分支相关操作

    git branch <branchName> #创建分支
    
  • checkout

    切换分支

    git checkout <branchName> #切换到指定分支
    git checkout -b <branchName> #创建并切换到指定分支
    
  • merge

    分支合并

    git merge <branchName> #将当前分支与指定分支合并
    
  • rebase

    转基

    git base <branchName> #将指定分支作为当前分支的基础
    
  • log

    查看提交记录

  • reflog

    查看提交记录

  • reset

    返回之前的某一步操作

概念

  • 在 git 中实际上是按照每一次提交的文件快照串联成一个树结构例如

    在这里插入图片描述

  • 每一次提交(commit)就会在对应分支上添加一个新的节点
    在这里插入图片描述

  • 但是显而易见一棵树不能仅有一条主干(main),例如一个项目初始化后需要三个程序员(a,b,c)相互合作那么就需要为三个程序员每人建立一个分支 git branch <branchName>,使他们可以在自己的分支上工作
    在这里插入图片描述

  • 如果到了某一天需要进行项目上线,那么肯定需要将三个人的工作成果合并到主分支上

在这里插入图片描述

  • 使用merge 将三个分支合并到 main分支上,依次合并 a,b,c
    在这里插入图片描述

  • 使用 rebase 将三个分支合并,依次合并 a,b,c
    在这里插入图片描述
    merge 是直接将两个分支的头节点合并到一块,

    rebase 是将操作的分支作为当前以公共祖先节点开始将操作的节点作为当前节点的根基

    实际工作中应根据业务具体选择合并方案。

  • 如果在操作中我突然反悔了,想回到之前的某一步怎么办?

    git reset <commitId> 可以根据之前提交的 id 返回到你想返回的任意一步,例如上图中的 c1,c2… 实际工作中 commitId 会是一串随机字符串

    可以通过 git log 查看之前提交版本的所有 commitIds
    在这里插入图片描述
    git reset c1
    在这里插入图片描述

  • 但是我突然又感觉 c3 版本好一点,如上所述,git log 可以查看当前 commitId 之前的所有 commitIds ,但是无法查看它之后的 commitId ,此时通过 git reflog 进行查看

本地仓库实践

  1. 从新建一个 git 仓库说起

    本地初始化一个仓库 git init
    在这里插入图片描述
    生成 .git 文件夹

    代表此时 myRepository 文件夹归 git 管理,

  2. 添加文件 vim hello
    在这里插入图片描述

  3. 将文件添加到暂存区 git add hello

  4. 提交文件 git commit -m <提交的描述信息>
    在这里插入图片描述

  5. 假设此时有两个工作者 a b ,创建两个分支 branch-a,branch-b
    在这里插入图片描述

  6. a 工作者将 hello 中的内容修改为 a
    在这里插入图片描述
    在这里插入图片描述

  7. 提交 a 的工作并将分支 branch-a 与主分支 master 合并
    在这里插入图片描述

  8. b 工作者将 branch-b 中的 hello 修改为 b,并且与主分支合并
    在这里插入图片描述
    在这里插入图片描述

  9. 合并 branch-b 时可以看到 Automatic merge failed :自动合并失败

    查看 hello 中的内容

    <<<<<<< HEAD
    a
    =======
    b
    >>>>>>> branch-b
    

    此时产生了合并冲突,所以 git 不能自动合并,需要手动就行合并选择保存的内容然后重新提交。

远程仓库实践

  1. 创建远程仓库(使用 gitee 码云)
    在这里插入图片描述

  2. 本地 clone 远程仓库
    在这里插入图片描述

  3. 尝试推送文件,如果之前未录入账号密码需要录入 gitee 账号密码
    在这里插入图片描述

  4. 截止目前为止远程仓库的创建和本地仓库的推送都为同一账号,该账号为仓库的所有者,但是在团队开发中如果有其他的程序员需要共同操作这个仓库该怎么办?

  5. 模拟其他开发者

    1. 如果是在一台机器上操作,需要将计算机上保存的 git 账号删除,修改为其他开发者的账号:win 10 左下角搜索凭证=>进入凭证管理器=>删除 gitee 相关凭证

    2. git clone 仓库

    3. 创建新文件并且尝试推送到远程仓库

      在这里插入图片描述

    4. 查看到没有 push 的权限,这是因为仓库的所有者没有对当前开发者开放权限

    5. gitee 登录仓库所有者账号邀请开发者
      在这里插入图片描述
      在这里插入图片描述

    6. 开发者复制链接地址,将地址输入到浏览器地址栏即可加入仓库成为开发者

    7. 开发者重新尝试提交新文件到远程仓库
      在这里插入图片描述

    8. 但是此时会产生新的问题,仓库所有者的本地仓库只能看到 hello 文件而看不到 newFile 文件。

      使用 git pull 进行下载远程仓库文件并且合并到本地仓库分支

      git pull 相当于 git fetch (下载远程库文件)git merge (合并)的结合

    9. 团队协作可能会产生例如上述合并冲突的问题,采用同样的方法解决即可

整合 idea

  1. idea 关于 git 的配置
    在这里插入图片描述
    在这里插入图片描述

  2. clone 远程仓库
    在这里插入图片描述
    在这里插入图片描述

  3. 添加新文件测试提交到远程仓库
    在这里插入图片描述
    在这里插入图片描述

  4. idea 解决合并冲突

    1. 仓库所有者修改 hello 文件提交并推送

    2. 开发者使用 idea 也修改并推送

    3. 此时爆有冲突需要先合并远程分支,点 Merge

      在这里插入图片描述

    4. 解决冲突的三种策略,此时选择 Merge

      在这里插入图片描述

    5. 见下图
      在这里插入图片描述

    6. 重新 push 即可

扩展

.ignore 文件

在有些场合下我们不需要将本地工作区的所有文件全部归 git 管理可以在 .ignore 文件中进行忽略

  1. 工作目录下新建文件 .gitignore

  2. 通配符

    • #:注释
    • *:零个或多个任意字符
    • ?:匹配一个任意字符
    • [abc]:匹配 a b c 中任意一个
    • [0-9]:匹配所有 0-9 之间的数组
    • !:取反,忽略指定模式之外的文件/目录
    • /:匹配文件夹
  3. 实例

    *.log #忽略所有 log 结尾日志
    !main.log #但 main.log 除外
    dependencies/ #忽略 dependencies 文件夹下的所有文件
    
reset 的三个参数

采用 hard 修改所有即可

–hard:不保留变更

–soft:保留变更且变更内容处于 Staged

–mixed:保留变更且变更内容处于 Modified

参考资料

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值