Android Studio-Git的使用指南

一、git的基本使用流程

 

  1. git clone 克隆远程资源到本地目录,作为工作目录;
  2. 然后在本地的克隆目录上添加或修改文件;
  3. 如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;
  4. 本地在修改之后,可以通过git status 查看修改的文件。然后使用git add添加修改的文件暂到缓冲区
  5. 在添加之后,可以使用git commit添加到当前的工作区
  6. 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;
  7. git push将本地的修改推送到远程的git服务器。

二、Git对象实现原理

        在git中以存储键值对(key-value)的方式来存储文件。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。git的kv中value一般有以下几种类型blobtreecommit

1.git add底层原理

        简单说就是:在调用git add后会生成一个blob对象,然后将该对象add放进进index区。

        详细的说:git add命令把工作目录里的修改保存到暂存区(也就是索引)。它会为每个文件生成一个 Blob 对象(存储文件内容的哈希值)或树对象(记录目录结构),并将这些对象存于.git/objects目录。

        暂存区的信息保存在.git/index文件中,该文件会记录文件路径、时间戳和哈希值等。

        每次执行git add,都会覆盖暂存区中对应文件之前的记录,这样就能分多次对同一文件进行部分更新。暂存区的作用是让用户可以把逻辑相关的修改组合在一起,方便后续处理。

2.git commit底层原理

        简单说就是:进行代码提交时,需要根据暂存区的内容,先生成tree对象,再生成commit对象,然后会将记录记录到logs文件夹下。

        详细的说:git commit在底层会依据暂存区的内容生成一个提交对象(Commit Object),该对象包含父提交哈希(用于链接历史提交)、作者 / 提交者信息、提交信息以及指向根树对象(Tree Object)的哈希值。

        树对象记录了文件路径、权限和 Blob 对象(存储文件内容)的引用关系。提交对象以 SHA - 1 哈希值为标识存储在.git/objects目录中。

        提交操作会更新当前分支指针(如master),使其指向新生成的提交哈希,同时 HEAD 指针仍指向当前分支。多次提交会形成一条通过父哈希链接的提交链。

3.git Merge和Rebase的区别使用

1.Merge

创建一个新的「合并提交」(Merge Commit),同时保留两个分支的历史路径。父提交指向两个分支的最新提交,形成一个树形结构。

git checkout main      # 切换到目标分支
git merge feature      # 合并 feature 分支到 main

2.Rebase

将当前分支的提交「复制」到目标分支的末尾,形成一条线性的提交历史。原始提交会被丢弃,生成新的提交对象(哈希值改变)。

git checkout feature   # 切换到待变基的分支
git rebase main        # 将 feature 分支的提交移到 main 分支末尾

        Git 的合并工具有 Merge 和 Rebase 两种核心方式,它们的目标都是整合分支修改,但实现路径不同。

        Merge 通过创建一个新的「合并提交」(Merge Commit)来整合分支,这个提交同时指向两个分支的最新提交,形成树形结构,完整保留分支的创建和合并历史。

        其优点是操作简单、适合团队协作,能清晰展示分支演变过程;缺点是可能使提交历史变得复杂。

        例如,将 feature 分支合并到 main 分支后,会保留两条分支路径及合并节点。Merge 适用于需要保留完整时间线的场景,如多人并行开发时快速集成代码。

        Rebase 则是将当前分支的提交「复制」到目标分支的末尾,通过丢弃原始提交并生成新的提交对象,形成一条线性的提交历史。

        这种方式使提交记录更简洁,适合个人在推送到远程前整理本地分支,但需注意避免对已共享的远程分支执行 rebase,以免导致团队协作冲突。

        例如,将 feature 分支变基到 main 分支后,历史记录会变成一条直线,隐藏分支分叉的过程。Rebase 的优势在于生成清晰的线性历史,便于快速浏览和理解代码演进,但其本质是「历史重写」,操作时需格外谨慎。

4.Reset重置使用

        简单来说:git reset 是 Git 中用于撤销提交或移动分支指针的核心命令,其本质是通过修改分支指针的指向来改变当前工作目录的状态。根据不同的参数,它可以精确控制撤销的范围(仅修改提交历史、重置暂存区或同时回滚工作目录)。

        详细来说:Git 的git reset命令用于撤销提交或移动分支指针,通过修改分支指针的指向来改变工作目录状态,

        其核心参数有三种模式:

        --soft仅移动分支指针,保留暂存区和工作目录,撤销的提交内容仍可直接提交;

        --mixed(默认)移动分支指针并重置暂存区,保留工作目录,需重新git add才能提交;

        --hard则彻底回滚,移动分支指针、重置暂存区并丢弃工作目录的修改,可能导致永久丢失数据。

        此外,--keep模式会在回滚时自动储藏未提交的修改,重置后可恢复。

        git reset适用于本地未推送的错误提交,但需避免对已共享的远程分支使用,以免引发协作冲突。与git revert不同,reset是删除提交记录,而revert是创建新提交来撤销旧提交。

三、Android studio的Git工作区使用

        Git管理代码分为工作区间、暂存区和版本库三个区域,我们在工作区间写代码,写完之后需要将创建的文件或修改的代码添加到暂存区,然后才能提交到版本库,我们不能把工作区间的修改直接提交到版本库。

1.工作区(Working Directory)即项目在磁盘上的实际文件,包括你正在编辑的代码。初始状态下,Git 不会跟踪未添加的新文件。

2.暂存区(Staging Area)也称为索引(Index),是一个中间区域,用于准备提交的内容。可以选择部分文件或文件的部分内容添加到暂存区。

3.本地仓库(Local Repository)存储已经提交的历史版本,包含提交对象和引用。

4.远程仓库(Remote Repository)托管在 GitHub、GitLab 等平台的共享仓库。

在 Android Studio 中使用 Git 工作区

1. 初始化 Git 仓库

  • 操作步骤:VCS → Enable Version Control Integration → 选择 Git

  • 此时项目根目录会生成一个隐藏的.git文件夹

2. 添加文件到暂存区

  • 操作 1:通过 Git 菜单提交

    • 选择需要提交的文件(变更列表中显示)

    • 右键 → Git → Commit File...

    • 在弹出的对话框中,未勾选的文件仅添加到暂存区

# 添加单个文件到暂存区
git add app/src/main/java/com/example/MainActivity.java# 添加所有修改的文件到暂存区
git add .# 添加特定目录下的所有文件
git add app/src/    

3. 提交到本地仓库

  • 操作 2:在 Commit 对话框中

    1. 填写提交信息

    2. 点击 Commit 按钮(仅提交到本地仓库)

    3. 点击 Commit and Push 可直接推送到远程仓库

4. 推送到远程仓库

  • 操作 3:Push 操作

    1. VCS → Git → Push

    2. 选择远程仓库和分支

    3. 点击 Push 按钮

5. 撤销操作

  1. 撤销工作区修改:右键文件 → Git → Revert

  2. 撤销暂存区文件:使用git reset HEAD <file>

  3. 撤销提交:使用git revert <commit>创建一个反向提交

四、Git总结

        Git 是一种分布式版本控制系统,

        其基本使用流程包括:

        首先通过git clone将远程仓库克隆到本地作为工作目录,在本地进行文件的添加或修改;若远程仓库有更新,使用git pull同步内容;

        本地修改后,通过git status查看状态,使用git add将修改添加到暂存区,再用git commit提交到本地仓库,若提交有误可通过git resetgit revert撤回并重新提交,最后使用git push将本地修改推送到远程仓库。

        Git 以键值对方式存储文件,其中值的类型有 blob、tree、commit,git add会生成 blob 对象并存于.git/objects目录,暂存区信息保存在.git/index文件中;git commit会依据暂存区内容生成提交对象和树对象,更新当前分支指针。

        Git 的合并方式有 Merge 和 Rebase,Merge 通过创建新的合并提交整合分支,保留分支历史路径,Rebase 则将当前分支的提交复制到目标分支末尾,形成线性提交历史。

        git reset用于撤销提交,有--soft--mixed--hard等模式。在 Android Studio 中使用 Git,可通过 VCS 菜单启用版本控制、添加文件到暂存区、提交到本地仓库、推送到远程仓库,还能通过右键操作撤销工作区修改、使用命令撤销暂存区文件或提交。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87564.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【github】想fork的项目变为私有副本

在 GitHub 上&#xff0c;所有的 fork 都会继承其上游仓库&#xff08;upstream&#xff09;的可见性&#xff08;visibility&#xff09;设置&#xff1a; 可见性继承 如果你 fork 的原仓库是 public&#xff0c;那么你的 fork 也必须是 public。如果原仓库是 private&#xf…

微软发布新一代存储优化型虚拟机:Azure Laosv4、Lasv4 和 Lsv4 系列

微软宣布&#xff0c;全新一代存储优化型虚拟机——Azure Laosv4、Lasv4 和 Lsv4 系列已正式面世。 与前一代虚拟机系列相比&#xff0c;全新的 L 系列虚拟机实现了重大突破。它支持高达 23TB 的本地 NVMe SSD&#xff0c;在 CPU、网络以及远程存储性能方面均有显著提升。该系…

python调用pybind11导出的pyd,出现UnicodeDecodeError

python调用pybind11导出的pyd&#xff0c;出现UnicodeDecodeError 1. 问题描述 举个例子&#xff0c;当有以下C代码以及Pybind11的绑定代码时&#xff0c;在python访问包含中文的Name和Value会有UnicodeDecodeError的异常&#xff01; class VxUserProp{public:VxUserProp();…

MySQL别名在GROUP BY中的使用规则

-- 设置变量&#xff1a;SET earliest_date ... 用于定义并赋值一个用户变量 earliest_date。 -- 用户定义的变量必须以 符号开头&#xff0c;例如 earliest_date。 -- 符号是MySQL中用户变量的标识符&#xff0c;用于区分系统变量和用户变量。 SET earliest_date (SELECT …

2025.7.4总结

感恩环节:感谢今日工作顺利度过&#xff0c;明天终于能美美的睡个懒觉了。感谢这周有个美好的双休。今日去实验室参观设备&#xff0c;感谢我的一个同事解答了我关于硬件设备与所做软件业务之间的关系&#xff0c;通过控制器控制网元等相关设备&#xff0c;同时&#xff0c;虽然…

Prompt 精通之路(五)- 构建你的“AI 指令系统”:超越简单提问的 CRISPE 与 APE 框架

&#x1f680; Prompt 精通之路&#xff1a;系列文章导航 第一篇&#xff1a;[本文] AI 时代的新语言&#xff1a;到底什么是 Prompt&#xff1f;为什么它如此重要&#xff1f;第二篇&#xff1a;告别废话&#xff01;掌握这 4 个黄金法则&#xff0c;让你的 Prompt 精准有效第…

#NFT艺术品哈希值唯一性与《民法典》“网络虚拟财产”认定的冲突

首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 一、当区块链的「绝对唯一」遇上法律的「弹性空间」 每个NFT艺术品背后的哈希值&#xff0c;都像用数学密码刻在区块链上的指纹——世界上没有任何两个完全相同的编码。这种由0和1构筑的「数字DNA」&#xff0c;被技术信…

【arXiv2025】计算机视觉|即插即用|LBMamba:革新视觉模型效率,性能炸裂

论文地址&#xff1a;https://arxiv.org/pdf/2506.15976 代码地址&#xff1a;https://github.com/CiaoHe/bi-mamba 关注UP CV缝合怪&#xff0c;分享最计算机视觉新即插即用模块&#xff0c;并提供配套的论文资料与代码。 https://space.bilibili.com/473764881 摘要 Mamba…

【狂飙AGI】第7课:AGI-行业大模型(系列1)

目录 &#xff08;一&#xff09;服装史的GPT时刻&#xff08;二&#xff09;AI多学科诊疗系统&#xff08;三&#xff09;医疗大模型&#xff08;四&#xff09;生物医药大模型&#xff08;五&#xff09;教育大模型&#xff08;六&#xff09;心理大模型&#xff08;七&#…

(LeetCode 每日一题) 3307. 找出第 K 个字符 II (位运算、数学)

题目&#xff1a;3307. 找出第 K 个字符 II 思路&#xff1a;位运算&#xff0c;时间复杂度0(logk)。 当2^(i-1) <k 且 2^i>k &#xff0c;说明k在K2^i的右半段 &#xff0c;k和其前半段的某个字符有关系 即当k>K时&#xff0c;k是由k-K位置上的字符变化而来&#xf…

国产MCU学习Day4——CW32F030C8T6:独立看门狗功能全解析

CW32F030C8T6 看门狗功能概述 CW32F030C8T6 是芯源半导体&#xff08;WCH&#xff09;推出的 Cortex-M0 内核微控制器&#xff0c;内置独立看门狗&#xff08;IWDG&#xff09;和窗口看门狗&#xff08;WWDG&#xff09;&#xff0c;用于检测和恢复系统异常状态。 一.独立看门…

SAP升级过程中如何确保数据安全?

目录 升级过程中可能遇到的数据风险 升级前的准备工作 升级过程中的保护措施 升级后的验证工作 在数字化转型浪潮中&#xff0c;SAP系统作为企业核心业务运营的系统&#xff0c;其升级过程不仅关乎技术架构的革新&#xff0c;更直接关系到企业最宝贵的资产——数据安全。一…

Vue 3 + Element Plus 常见开发问题与解决方案手册

&#x1f31f;Vue 3 Element Plus 常见开发问题与解决方案手册 &#x1f9e0; 本文整理了常见但容易混淆的几个 Vue 3 前端开发问题&#xff0c;包括插槽、原型链、响应式数据处理、v-model 报错、样式阴影控制等&#xff0c;建议收藏学习&#xff01; &#x1f4cc;一、动态插…

Spring Boot + 本地部署大模型实现:安全性与可靠性保障

在将大语言模型集成到 Spring Boot 应用中时&#xff0c;安全性和可靠性是两个关键因素。本地部署的大模型虽然提供了强大的功能&#xff0c;但也可能带来一些安全风险&#xff0c;如数据泄露、模型被恶意利用等。本文将介绍如何在 Spring Boot 应用中保障本地部署大模型的安全…

Zookeeper 客户端 .net访问框架 ZookeeperNetEx项目开发编译

一、项目简介 ZooKeeperNetEx 项目是一个针对.NET开发的异步客户端库&#xff0c;旨在为开发者提供高效且可靠的分布式协调服务。‌ 该项目完全基于任务异步编程&#xff0c;兼容.NET 4.61及以上版本&#xff0c;包括.NET Core。ZooKeeperNetEx严格遵循官方Java客户端的逻辑&am…

【学习笔记】因果推理导论第2课

因果推理导论第2课 因果推断假设 前言一、假设1、 Ignorability / Exchangeability2、条件可交换 二、估计 前言 第一节课通过一些例子说明了为什么要做因果推断,以及通过控制混杂因素计算因果效应;这一节课将围绕为何控制混杂因素计算因果效应这一方法成立,讲述其涉及到的一些…

VASP 教程:VASP 机器学习力场微调

机器学习力场&#xff08;Machine-Learned Force Fields, MLFFs&#xff09;作为一种新兴的计算方法&#xff0c;已在第一性原理分子动力学&#xff08;Ab Initio Molecular Dynamics, AIMD&#xff09;模拟中展现出独特优势&#xff08;参见 VASP Wiki&#xff1a;Category:Ma…

Java+Vue开发的仓库管理系统,实时监控库存,精准统筹货物出入与调配

前言&#xff1a; 在当今竞争激烈的商业环境中&#xff0c;高效的仓库管理对于企业的运营和成本控制至关重要。一个完善的仓库管理系统能够帮助企业实现货物的精准存储、快速出入库、实时库存监控以及全面的数据分析&#xff0c;从而提升整体运营效率、降低库存成本、增强客户…

【王阳明代数】热门问答,什么是张量?

【王阳明代数】热门问答&#xff0c;什么是张量&#xff1f; 流形学习基础概念前情提要&#xff0c;张量概念的提出&#xff0c;王船山流形与信息容量的概念回答&#xff1a;什么是张量前&#xff0c;对王船山流形&#xff0c;意气实体的定义再表述&#xff1b;王船山流形分析1…