嘟嘟姥姥 發表於 2025-12-22 21:12:00

实用指南:【Git】Git06:Git 管理 Android 项目教程(含GitHub)

<style>pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !important; line-height: 1.6 !important; padding: 16px !important; margin: 16px 0 !important; background-color: rgba(248, 248, 248, 1) !important; border: 1px solid rgba(225, 228, 232, 1) !important; border-radius: 6px !important; tab-size: 4 !important; -moz-tab-size: 4 !important; max-width: 100% !important; box-sizing: border-box !important }
code { font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow-wrap: normal !important; display: inline !important; background: rgba(0, 0, 0, 0) !important; border: none !important; padding: 0 !important; margin: 0 !important; line-height: inherit !important }
pre code { background: rgba(0, 0, 0, 0) !important; border: 0 !important; border-radius: 0 !important; display: block !important; line-height: 1.6 !important; margin: 0 !important; max-width: none !important; overflow: visible !important; padding: 0 !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; color: inherit !important }
.token.comment, .token.prolog, .token.doctype, .token.cdata { color: rgba(112, 128, 144, 1) !important; font-style: italic !important }
.token.punctuation { color: rgba(153, 153, 153, 1) !important }
.token.atrule, .token.attr-value, .token.keyword { color: rgba(0, 119, 170, 1) !important; font-weight: bold !important }
.token.function, .token.class-name { color: rgba(221, 74, 104, 1) !important; font-weight: bold !important }
.token.selector, .token.attr-name, .token.string, .token.char, .token.builtin, .token.inserted { color: rgba(102, 153, 0, 1) !important }
.token.property, .token.tag, .token.boolean, .token.number, .token.constant, .token.symbol, .token.deleted { color: rgba(153, 0, 85, 1) !important }
.cnblogs-markdown pre, .cnblogs-post-body pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; background-color: rgba(248, 248, 248, 1) !important; border: 1px solid rgba(225, 228, 232, 1) !important; border-radius: 6px !important; padding: 16px !important; margin: 16px 0 !important }
pre, pre, pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important }</style>
      <div class="htmledit_views tomorrow-night" id="content_views"><h2>(一):前置准备 + 本地仓库初始化</h2><p>对于 Android 小白来说,用 Git 管理项目的核心是「结合 Android Studio(AS)可视化操作 + 基础 Git 命令」,既不用死记硬背命令,又能保证版本管理规范。本教程全程贴合 Android 开发实际场景(如忽略编译文件、AS 集成操作),分步骤带你上手。</p><h3>一、前置准备(必做)</h3><h4>1. 确认 Git 已安装并配置</h4><p>之前已经学过 Git 安装和基础配置,这里快速验证:</p><ul><li>打开 Android Studio → 底部菜单栏「Terminal」(AS 内置终端,等同于 Git Bash);</li><li>执行命令验证:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git --version# 输出 git version 2.51.1.windows.1 即成功
git config --list# 确认 user.name 和 user.email 已配置(没有则补配置)</code></pre>
</li><li>若未配置用户身份,在 Terminal 中执行(替换为你的信息):
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git config --global user.name "你的名字"
git config --global user.email "你的邮箱"</code></pre>
</li></ul><h4>2. Android Studio 配置 Git 路径(自动识别为主,手动补全为辅)</h4><p>AS 一般会自动识别 Git 安装路径,若未识别需手动配置:</p><ol><li>打开 AS → 顶部菜单栏「File」→「Settings」(Windows)/「Preferences」(Mac);</li><li>左侧找到「Version Control」→「Git」;</li><li>右侧「Path to Git executable」选择 Git 安装目录下的&nbsp;<code>bin/git.exe</code>(默认路径:<code>C:\Program Files\Git\bin\git.exe</code>);</li><li>点击「Test」,弹出「Git executed successfully」即配置成功。</li></ol><h4>3. 创建 / 打开 Android 项目</h4><ul><li>新建项目:AS →「Start a new Android Studio project」→ 选模板(如 Empty Views Activity)→ 填写项目名(如&nbsp;<code>GitAndroidDemo</code>)、保存路径 → 完成;</li><li>打开已有项目:「File」→「Open」→ 选择项目目录。</li></ul><h3>二、核心第一步:配置 .gitignore 文件(Android 项目专属)</h3><p>Android 项目编译会生成大量临时文件(如&nbsp;<code>build</code>、<code>.idea</code>),这些文件无需纳入版本控制(占空间、易冲突),必须通过&nbsp;<code>.gitignore</code>&nbsp;告诉 Git 忽略它们。</p><h4>1. 创建 .gitignore 文件</h4><ul><li>方法 1(AS 可视化):
<ol><li>选中项目根目录(如&nbsp;<code>GitAndroidDemo</code>)→ 右键 →「New」→「File」;</li><li>文件名输入&nbsp;<code>.gitignore</code>(注意开头有小数点,无后缀)→「OK」。</li></ol></li><li>方法 2(终端命令):在 AS Terminal 中执行:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>cd 你的项目路径# 若已在项目根目录则跳过(AS Terminal 默认在项目根目录)
touch .gitignore</code></pre>
</li></ul><h4>2. 粘贴 Android 项目专用 .gitignore 模板(直接复制用,无需修改)</h4><p>打开&nbsp;<code>.gitignore</code>&nbsp;文件,粘贴以下内容(覆盖 Android 项目所有需忽略的文件):</p><p>plaintext</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code># 编译产物
/build/
/app/build/
/*/build/
*.apk
*.ap_
*.aab
*.dex
*.class
*.so
/.gradle/
gradle/wrapper/gradle-wrapper.jar
!gradle/wrapper/gradle-wrapper.properties
# IDE 配置文件
.idea/
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches
*.iml
*.iws
*.ipr
.DS_Store# Mac 系统临时文件
Thumbs.db# Windows 系统临时文件
# 本地配置文件
local.properties
.env
.env.local
.env.dev
.env.prod
# 日志和缓存
*.log
*.tmp
.cache/
.navigation/
captures/
output.json
# 其他无用文件
*.bak
*.tmp
*.swp</code></pre>
<ul><li>保存文件(Ctrl+S / Command+S),Git 会自动识别该文件并生效。</li></ul><h4>3. 验证 .gitignore 效果(后续提交时会体现)</h4><p>配置后,<code>build</code>、<code>.idea</code>&nbsp;等文件夹在 AS 中会显示「灰色」,表示已被 Git 忽略,不会纳入暂存和提交。</p><h3>三、初始化本地仓库(两种方式,小白选 AS 可视化)</h3><h4>方式 1:Android Studio 可视化操作(推荐,无需记命令)</h4><ol><li>选中项目根目录 → 顶部菜单栏「VCS」→「Import into Version Control」→「Create Git Repository...」;</li><li>弹出窗口默认选中项目根目录(无需修改)→ 点击「OK」;</li><li>此时项目根目录会生成隐藏的&nbsp;<code>.git</code>&nbsp;文件夹(本地仓库核心),AS 底部菜单栏会出现「Git」选项卡,说明初始化成功。</li></ol><h4>方式 2:终端命令操作(巩固之前学的命令)</h4><p>在 AS Terminal 中执行:</p><p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code># 确保当前目录是项目根目录(AS Terminal 默认已在)
git init</code></pre>
<ul><li>输出&nbsp;<code>Initialized empty Git repository in ...</code>&nbsp;即成功,效果和可视化操作一致。</li></ul><h3>四、首次提交:将 Android 项目代码纳入 Git 管理</h3><p>提交流程:「工作区 → 暂存区 → 版本库」,AS 操作更直观,同时附上对应命令。</p><h4>1. 暂存文件(选择要提交的文件)</h4><ul><li>AS 可视化:
<ol><li>选中项目根目录 → 右键 →「Git」→「Add」;</li><li>此时文件图标会变成「绿色对勾」,表示已加入暂存区(仅暂存未被&nbsp;<code>.gitignore</code>&nbsp;忽略的文件,如&nbsp;<code>app/src</code>、<code>build.gradle</code>&nbsp;等核心文件)。</li></ol></li><li>终端命令(对应操作):
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git add .# 暂存所有未被忽略的文件(. 表示当前目录)</code></pre>
</li></ul><h4>2. 提交到版本库(记录版本)</h4><ul><li>AS 可视化:
<ol><li>顶部菜单栏「VCS」→「Git」→「Commit...」(或快捷键 Ctrl+K / Command+K);</li><li>弹出提交窗口:
<ul><li>左侧:勾选要提交的文件(默认已勾选暂存的文件,无需修改);</li><li>右侧「Commit Message」:必须填写清晰的提交说明(如「首次提交:初始化 Android 项目,创建空活动」);</li><li>点击底部「Commit」(若弹出「Commit Successful」提示,说明提交成功)。</li></ul></li></ol></li><li>终端命令(对应操作):
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git commit -m "首次提交:初始化 Android 项目,创建空活动"</code></pre>
</li></ul><h4>3. 查看提交历史(验证提交结果)</h4><ul><li>AS 可视化:
<ol><li>顶部菜单栏「VCS」→「Git」→「Show History」;</li><li>弹出窗口会显示所有提交记录,包括提交者、时间、提交信息,点击某条记录可查看该版本的文件变更。</li></ol></li><li>终端命令(对应操作):
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git log# 查看详细提交历史
git log --oneline# 查看简洁版提交历史(哈希值+提交信息)</code></pre>
</li></ul><h3>五、日常开发:修改代码后的提交流程(重复操作)</h3><p>Android 开发中,每次完成一个小功能(如布局编写、逻辑实现)都要提交版本,养成「小步提交」的习惯。</p><h4>示例:修改布局文件后提交</h4><ol><li>打开&nbsp;<code>app/src/main/res/layout/activity_main.xml</code>,添加一个按钮:

<p>xml</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code></code><button android:id="@+id/btn_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试按钮" app:layout_constraintbottom_tobottomof="parent" app:layout_constraintend_toendof="parent" app:layout_constraintstart_tostartof="parent" app:layout_constrainttop_totopof="parent"><code></code></button></pre>
</li><li>保存文件(Ctrl+S),此时文件图标会变成「蓝色问号」(表示已修改但未暂存);</li><li>暂存:右键文件 →「Git」→「Add」(图标变绿色对勾);</li><li>提交:Ctrl+K → 提交信息写「添加测试按钮布局」→「Commit」。</li></ol><h3>六、小白避坑要点</h3><ol><li><strong>绝对不要提交 .gitignore 中列出的文件</strong>:若发现&nbsp;<code>build</code>、<code>.idea</code>&nbsp;等文件被暂存(图标不是灰色),先检查&nbsp;<code>.gitignore</code>&nbsp;文件是否创建正确、路径是否在项目根目录;</li><li><strong>提交信息要清晰</strong>:不要写「修改代码」「更新文件」这种模糊描述,要具体(如「修复登录按钮点击无响应 bug」「新增用户注册功能布局」);</li><li><strong>小步提交</strong>:不要积累大量修改后一次性提交,建议每完成一个独立功能 / 修复一个 bug 就提交一次,后续回退或协作更方便;</li><li><strong>AS 中 Git 图标含义</strong>(快速识别文件状态):
<ul><li>绿色对勾:已暂存;</li><li>蓝色问号:已修改未暂存;</li><li>红色感叹号:未跟踪(未被 Git 管理,且不在 .gitignore 中);</li><li>灰色:已被 .gitignore 忽略。</li></ul></li></ol><h2>(二):分支管理实战(功能开发 + Bug 修复)</h2><p>上一讲我们完成了 Android 项目的本地仓库初始化和首次提交,这一讲聚焦&nbsp;<strong>Android 开发核心场景的分支管理</strong>—— 用分支隔离不同开发任务(新功能、Bug 修复),避免代码混乱。全程结合 Android Studio 可视化操作(小白友好)+ 对应 Git 命令,兼顾实操性和知识点巩固。</p><h3>一、Android 项目分支规范(小白直接套用)</h3><p>在 Android 开发中,分支命名和用途有固定规范,避免团队协作时混乱,新手直接按以下规则命名:</p><table><thead><tr><th>分支类型</th><th>命名格式</th><th>用途示例</th></tr></thead><tbody><tr><td>主分支</td><td><code>main</code>(或&nbsp;<code>master</code>)</td><td>存放可上线的稳定代码,禁止直接开发和推送</td></tr><tr><td>功能分支</td><td><code>feature/功能名称</code></td><td>开发新功能(如&nbsp;<code>feature/login</code>&nbsp;开发登录功能)</td></tr><tr><td>Bug 修复分支</td><td><code>bugfix/问题描述</code></td><td>修复开发中的 Bug(如&nbsp;<code>bugfix/btn-crash</code>&nbsp;修复按钮崩溃)</td></tr><tr><td>紧急修复分支</td><td><code>hotfix/问题描述</code></td><td>修复线上紧急 Bug(基于&nbsp;<code>main</code>&nbsp;分支创建)</td></tr></tbody></table><p>本讲重点讲解&nbsp;<strong>功能分支</strong>&nbsp;和&nbsp;<strong>Bug 修复分支</strong>&nbsp;的完整流程。</p><h3>二、场景 1:功能分支开发(如开发登录功能)</h3><p>核心流程:<code>切换到 main 分支 → 创建 feature 分支 → 开发功能 → 提交代码 → 合并回 main 分支 → 删除功能分支</code></p><h4>步骤 1:切换到 main 分支(确保基于最新稳定代码创建)</h4><ul><li>Android Studio 可视化:
<ol><li>底部菜单栏找到「Git」选项卡 → 点击分支名称(如当前已在&nbsp;<code>main</code>,直接下一步);</li><li>若不在&nbsp;<code>main</code>,点击「Switch to Branch...」→ 选择「main」→ 点击「Switch」。</li></ol></li><li>终端命令(AS Terminal 中执行):
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git switch main# 切换到 main 分支</code></pre>
</li></ul><h4>步骤 2:创建并切换到功能分支(<code>feature/login</code>)</h4><ul><li>AS 可视化(推荐):
<ol><li>顶部菜单栏「VCS」→「Git」→「Branch...」(或快捷键 Ctrl+Shift+B / Command+Shift+B);</li><li>弹出窗口:
<ul><li>「Branch name」输入&nbsp;<code>feature/login</code>;</li><li>「Checkout branch」勾选(创建后直接切换);</li><li>点击「Create」,底部状态栏会显示「Switched to branch 'feature/login'」,切换成功。</li></ul></li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git switch -c feature/login# 创建并切换到 feature/login 分支</code></pre>
</li></ul><h4>步骤 3:在功能分支开发登录功能(实际编码)</h4><p>这一步是 Android 开发核心,我们做简单示例(创建登录布局 + 逻辑):</p><ol><li>右键&nbsp;<code>app/src/main/res/layout</code>&nbsp;→「New」→「Layout resource file」→ 文件名&nbsp;<code>activity_login.xml</code>&nbsp;→ 点击「OK」;</li><li>粘贴登录布局代码(简单示例):
<p>xml</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:padding="20dp">
    <edittext android:id="@+id/et_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名">
    <edittext android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码" android:inputtype="textPassword" android:layout_margintop="10dp">
    </edittext></edittext></linearlayout></code><button android:id="@+id/btn_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" android:layout_margintop="20dp"><code>
</code></button></pre>
</li><li>右键&nbsp;<code>app/src/main/java/你的包名</code>&nbsp;→「New」→「Activity」→「Empty Views Activity」→ 活动名&nbsp;<code>LoginActivity</code>&nbsp;→ 勾选「Generate Layout File」(布局文件选已创建的&nbsp;<code>activity_login.xml</code>)→「Finish」;</li><li>在&nbsp;<code>LoginActivity.kt</code>(或 Java)中添加简单点击逻辑:
<p>kotlin</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>class LoginActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_login)
      val btnLogin = findViewById</code><button><code>(R.id.btn_login)
      btnLogin.setOnClickListener {
            Toast.makeText(this, "登录按钮点击", Toast.LENGTH_SHORT).show()
      }
    }
}</code></button></pre>
</li></ol><h4>步骤 4:提交功能分支的代码(小步提交)</h4><p>开发完核心逻辑后,提交版本(遵循「小步提交」原则):</p><ul><li>AS 可视化:
<ol><li>选中项目根目录 → 右键 →「Git」→「Add」(暂存所有修改文件,图标变绿色对勾);</li><li>顶部菜单栏「VCS」→「Git」→「Commit...」(Ctrl+K);</li><li>提交信息写清晰:<code>feature/login:完成登录页面布局和按钮点击逻辑</code>;</li><li>点击「Commit」,提交成功。</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git add .# 暂存所有修改
git commit -m "feature/login:完成登录页面布局和按钮点击逻辑"# 提交</code></pre>
</li></ul><h4>步骤 5:将功能分支合并回 main 分支(功能开发完成)</h4><p>功能测试通过后,将&nbsp;<code>feature/login</code>&nbsp;合并到&nbsp;<code>main</code>&nbsp;分支(稳定分支):</p><ol><li>先切换回&nbsp;<code>main</code>&nbsp;分支:

<ul><li>可视化:底部「Git」→「Switch to Branch...」→ 选择「main」→「Switch」;</li><li>命令:<code>git switch main</code>。</li></ul></li><li>合并&nbsp;<code>feature/login</code>&nbsp;分支:
<ul><li>AS 可视化:
<ol><li>顶部菜单栏「VCS」→「Git」→「Merge Changes...」(或快捷键 Ctrl+Shift+M);</li><li>弹出窗口:「Branch to merge」选择&nbsp;<code>feature/login</code>&nbsp;→ 点击「Merge」;</li><li>若提示「Merge successful」,说明无冲突,合并完成。</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git merge feature/login# 将 feature/login 合并到当前 main 分支</code></pre>
</li></ul></li></ol><h4>步骤 6:删除功能分支(合并后无用,清理环境)</h4><ul><li>AS 可视化:
<ol><li>底部「Git」→「Branch...」→ 选中&nbsp;<code>feature/login</code>&nbsp;→ 点击「Delete」;</li><li>弹出确认窗口 → 点击「Delete」(已合并的分支会直接删除)。</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git branch -d feature/login# 安全删除已合并的功能分支</code></pre>
</li></ul><h3>三、场景 2:Bug 修复分支开发(如修复登录按钮崩溃 Bug)</h3><p>核心流程:<code>切换到 main 分支 → 创建 bugfix 分支 → 修复Bug → 提交代码 → 合并回 main 分支 → 删除修复分支</code></p><h4>步骤 1:切换到 main 分支,创建 bugfix 分支</h4><p>假设&nbsp;<code>main</code>&nbsp;分支的登录功能存在 Bug(点击按钮崩溃,原因是未判空用户名),需要修复:</p><ul><li>切换到&nbsp;<code>main</code>&nbsp;分支(同场景 1 步骤 1);</li><li>创建并切换到&nbsp;<code>bugfix/login-btn-crash</code>&nbsp;分支:
<ul><li>可视化:「VCS」→「Git」→「Branch...」→ 名称&nbsp;<code>bugfix/login-btn-crash</code>&nbsp;→ 勾选「Checkout」→「Create」;</li><li>命令:<code>git switch -c bugfix/login-btn-crash</code>。</li></ul></li></ul><h4>步骤 2:修复 Bug 并提交</h4><ol><li>打开&nbsp;<code>LoginActivity.kt</code>,修改点击逻辑(添加判空):

<p>kotlin</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>btnLogin.setOnClickListener {
    val username = findViewById<edittext>(R.id.et_username).text.toString()
    if (username.isEmpty()) {
      Toast.makeText(this, "用户名不能为空", Toast.LENGTH_SHORT).show()
      return@setOnClickListener
    }
    Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show()
}</edittext></code></pre>
</li><li>提交修复代码:
<ul><li>可视化:右键项目→「Git」→「Add」→「Commit...」→ 提交信息&nbsp;<code>bugfix/login-btn-crash:修复登录按钮崩溃,添加用户名判空</code>&nbsp;→「Commit」;</li><li>命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git add .
git commit -m "bugfix/login-btn-crash:修复登录按钮崩溃,添加用户名判空"</code></pre>
</li></ul></li></ol><h4>步骤 3:合并回 main 分支并删除 bugfix 分支</h4><ul><li>切换回&nbsp;<code>main</code>&nbsp;分支:<code>git switch main</code>(可视化同前);</li><li>合并 bugfix 分支:<code>git merge bugfix/login-btn-crash</code>(可视化同前);</li><li>删除 bugfix 分支:<code>git branch -d bugfix/login-btn-crash</code>(可视化同前)。</li></ul><h3>四、关键:Android 项目中的冲突解决(小白必看)</h3><p>分支合并时最容易遇到「冲突」—— 比如两人同时修改了&nbsp;<code>activity_login.xml</code>&nbsp;的同一部分(如按钮文本),Git 无法自动合并,需要手动解决。</p><h4>冲突场景示例</h4><ol><li>你在&nbsp;<code>feature/login</code>&nbsp;分支将登录按钮文本改为「登录账号」;</li><li>同事在&nbsp;<code>main</code>&nbsp;分支将同一按钮文本改为「立即登录」;</li><li>你合并&nbsp;<code>feature/login</code>&nbsp;到&nbsp;<code>main</code>&nbsp;时,触发冲突。</li></ol><h4>冲突解决步骤(AS 可视化操作,超简单)</h4><ol><li>合并时弹出「Conflicts detected」提示,点击「Show Conflicts」查看冲突文件;</li><li>冲突文件会显示红色标记,打开&nbsp;<code>activity_login.xml</code>,冲突部分如下(Git 自动标记):
<p>xml</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD// main 分支的代码(同事修改)
android:text="立即登录"
=======// feature/login 分支的代码(你的修改)
android:text="登录账号"
&gt;&gt;&gt;&gt;&gt;&gt;&gt; feature/login</code></pre>
</li><li>手动修改冲突内容:保留需要的文本(或合并),删除冲突标记(<code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code>、<code>=======</code>、<code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code>),示例修改为:
<p>xml</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>android:text="登录账号"// 保留你的修改,或改为「立即登录」,按需调整</code></pre>
</li><li>保存文件(Ctrl+S),右键冲突文件 →「Git」→「Add」(标记为已解决冲突);</li><li>点击 AS 顶部「Commit」按钮,提交冲突解决后的代码,完成合并。</li></ol><h4>冲突解决避坑</h4><ul><li>冲突只修改「冲突标记内的内容」,不要误删其他布局 / 代码;</li><li>解决后一定要运行项目测试,确保功能正常(避免解决冲突时误改逻辑);</li><li>多人协作时,尽量避免同时修改同一文件的同一部分(可分工负责不同模块)。</li></ul><h3>五、Android 项目分支管理小白避坑要点</h3><ol><li><strong>绝对不要在 main 分支直接开发</strong>:main 是稳定分支,所有开发都在 feature/bugfix 分支进行,合并后再更新 main;</li><li><strong>分支命名要规范</strong>:按「类型 / 功能」命名,比如&nbsp;<code>feature/register</code>(注册功能)、<code>bugfix/et-null</code>(输入框判空 Bug),后续查历史能快速识别;</li><li><strong>小步提交代码</strong>:开发功能时,每完成一个小模块(如布局、单一逻辑)就提交一次,避免冲突时丢失大量代码;</li><li><strong>切换分支前提交本地修改</strong>:若在 feature 分支开发到一半需要切换到 main 分支,先提交当前修改(或用&nbsp;<code>git stash</code>&nbsp;暂存),否则修改会被带到目标分支;</li><li><strong>合并前拉取最新代码</strong>:多人协作时,合并分支前先拉取远程 main 分支的最新代码(后续讲远程协作时详细说),避免冲突。</li></ol><h2>(三):远程仓库协作(GitHub/GitLab 实战)</h2><p>上一讲我们完成了 Android 项目的本地分支管理(功能开发、Bug 修复),这一讲聚焦&nbsp;<strong>远程协作核心场景</strong>—— 把本地代码推送到 GitHub/GitLab 备份、多人协作同步代码、通过 PR/MR 合并远程分支,全程贴合 Android 开发团队实际工作流,小白可直接套用。</p><h3>一、前置准备(必做)</h3><ol><li><strong>已注册 GitHub/GitLab 账号</strong>,并创建了「空远程仓库」(仓库名建议和本地 Android 项目一致,如&nbsp;<code>GitAndroidDemo</code>,创建时不要勾选 README,避免冲突);</li><li><strong>确认本地 Git 已配置连接方式</strong>(二选一):
<ul><li>SSH 方式(免密码,推荐):已配置 SSH 密钥到 GitHub/GitLab(之前远程协作教程讲过,验证&nbsp;<code>ssh -T git@github.com</code>&nbsp;成功);</li><li>HTTPS 方式(新手友好):GitHub 需准备「个人访问令牌(PAT)」,GitLab 用账号密码;</li></ul></li><li><strong>本地 Android 项目已完成初始化</strong>(有&nbsp;<code>.gitignore</code>&nbsp;文件,本地仓库已创建,有&nbsp;<code>main</code>&nbsp;分支和提交记录)。</li></ol><h3>二、核心场景 1:本地 Android 项目推送到远程仓库(首次关联)</h3><p>适合:本地已开发完部分功能,想把代码上传到远程备份,或开启团队协作。</p><h4>步骤 1:本地仓库关联远程仓库(Android Studio 可视化)</h4><ol><li>打开 Android Studio → 顶部菜单栏「VCS」→「Git」→「Remotes...」;</li><li>弹出窗口点击「+」→「Add Remote」;</li><li>「Name」填&nbsp;<code>origin</code>(远程仓库默认别名),「URL」粘贴远程仓库地址(HTTPS/SSH 二选一)→ 点击「OK」;</li><li>再次点击「OK」关闭窗口,关联完成。</li></ol><ul><li>终端命令(对应操作,可选):
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code># 确保在项目根目录(AS Terminal 默认已在)
git remote add origin https://github.com/你的用户名/GitAndroidDemo.git
# 验证关联:输出远程仓库 fetch/push 地址即成功
git remote -v</code></pre>
</li></ul><h4>步骤 2:推送本地&nbsp;<code>main</code>&nbsp;分支到远程</h4><p><code>main</code>&nbsp;是稳定分支,首次推送需绑定本地与远程分支的跟踪关系:</p><ul><li><p>AS 可视化(推荐):</p><ol><li>顶部菜单栏「VCS」→「Git」→「Push...」(或快捷键 Ctrl+Shift+K / Command+Shift+K);</li><li>弹出推送窗口:
<ul><li>左侧「Branch」选择「main」(本地分支);</li><li>右侧「Remote Branch」自动填充「main」(远程分支名,与本地一致);</li><li>勾选「Set upstream」(绑定跟踪关系,后续可直接&nbsp;<code>git push</code>);</li><li>点击「Push」;</li></ul></li><li>若用 HTTPS 方式:弹出登录窗口,GitHub 输入「账号 + PAT」,GitLab 输入「账号 + 密码」;若用 SSH 方式:无需登录,直接推送成功;</li><li>提示「Push successful」即完成。</li></ol></li><li><p>终端命令(对应操作):</p><p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code># 首次推送 main 分支,-u 绑定跟踪关系
git push -u origin main</code></pre>
</li></ul><h4>步骤 3:推送本地&nbsp;<code>feature</code>&nbsp;分支到远程(多人协作开发)</h4><p>若你在本地&nbsp;<code>feature/register</code>&nbsp;分支开发注册功能,需把分支推到远程,让同事协作审核:</p><ul><li>AS 可视化:
<ol><li>先切换到&nbsp;<code>feature/register</code>&nbsp;分支(底部「Git」→「Switch to Branch...」→ 选择分支);</li><li>「VCS」→「Git」→「Push...」;</li><li>左侧选择「feature/register」,右侧远程分支名自动填充「feature/register」→ 点击「Push」;</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git switch feature/register# 切换到功能分支
git push -u origin feature/register# 推送并绑定远程分支</code></pre>
</li></ul><h4>步骤 4:验证推送结果</h4><p>打开 GitHub/GitLab 远程仓库页面,刷新后可看到:</p><ul><li>「main」分支下有 Android 项目核心文件(<code>app/src</code>、<code>build.gradle</code>&nbsp;等),无&nbsp;<code>build</code>、<code>.idea</code>&nbsp;等忽略文件;</li><li>「Branches」页面可看到推送的&nbsp;<code>feature/register</code>&nbsp;分支。</li></ul><h3>三、核心场景 2:多人协作流程(拉取同事代码 + 推送自己的代码)</h3><p>假设你和同事协作开发 Android 项目,同事已推送&nbsp;<code>feature/pay</code>&nbsp;分支(支付功能),你需要拉取他的分支参考,同时推送自己的&nbsp;<code>feature/register</code>&nbsp;分支,流程如下:</p><h4>步骤 1:拉取远程最新分支信息(同步同事的分支)</h4><ul><li>AS 可视化:
<ol><li>顶部菜单栏「VCS」→「Git」→「Fetch」;</li><li>弹出窗口选择「origin」(远程仓库别名)→ 点击「Fetch」;</li><li>完成后,底部「Git」→「Branches」中可看到远程分支&nbsp;<code>origin/feature/pay</code>。</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git fetch origin# 同步远程所有分支信息(不合并代码)</code></pre>
</li></ul><h4>步骤 2:拉取同事的&nbsp;<code>feature/pay</code>&nbsp;分支到本地(查看 / 复用代码)</h4><ul><li>AS 可视化:
<ol><li>底部「Git」→「Switch to Branch...」;</li><li>左侧选择「Remote Branches」→ 找到「origin/feature/pay」→ 点击「Checkout As...」;</li><li>「Branch name」默认&nbsp;<code>feature/pay</code>&nbsp;→ 点击「OK」,本地会创建&nbsp;<code>feature/pay</code>&nbsp;分支并切换过去;</li><li>此时可查看同事的支付功能代码(如&nbsp;<code>PayActivity.kt</code>、<code>activity_pay.xml</code>),甚至复用逻辑。</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code># 创建并切换到本地 feature/pay 分支,同步远程 origin/feature/pay 的代码
git switch -c feature/pay origin/feature/pay</code></pre>
</li></ul><h4>步骤 3:基于远程&nbsp;<code>main</code>&nbsp;分支开发自己的功能(避免落后)</h4><p>多人协作时,本地&nbsp;<code>main</code>&nbsp;分支可能落后于远程,需先拉取远程&nbsp;<code>main</code>&nbsp;最新代码,再创建分支开发:</p><ul><li>AS 可视化:
<ol><li>切换到本地&nbsp;<code>main</code>&nbsp;分支:底部「Git」→「Switch to Branch...」→ 选择「main」→「Switch」;</li><li>拉取远程&nbsp;<code>main</code>&nbsp;最新代码:「VCS」→「Git」→「Pull...」→ 选择「origin/main」→ 点击「Pull」;</li><li>创建自己的功能分支:「VCS」→「Git」→「Branch...」→ 输入&nbsp;<code>feature/register</code>&nbsp;→「Create」。</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git switch main# 切换到 main 分支
git pull origin main# 拉取远程 main 最新代码(合并)
# 或用 rebase 保持历史整洁:git pull --rebase origin main
git switch -c feature/register# 创建功能分支</code></pre>
</li></ul><h4>步骤 4:推送自己的功能分支到远程,发起 PR/MR(合并到 main)</h4><p>开发完成后,需通过「Pull Request(GitHub)」/「Merge Request(GitLab)」让团队审核代码,审核通过后合并到远程&nbsp;<code>main</code>&nbsp;分支(保护分支,禁止直接推送):</p><ol><li>推送本地&nbsp;<code>feature/register</code>&nbsp;分支到远程(同场景 1 步骤 3);</li><li>发起 PR/MR(平台操作,Android 项目协作核心):
<ul><li>GitHub 操作:
<ol><li>打开远程仓库页面 → 点击「Pull requests」→「New pull request」;</li><li>「base」选择&nbsp;<code>main</code>(目标分支),「compare」选择&nbsp;<code>feature/register</code>(你的分支);</li><li>填写 PR 标题(如「新增注册功能:布局 + 逻辑」)和描述(如「完成注册页面、输入校验、接口调用」);</li><li>点击「Create pull request」,通知同事审核。</li></ol></li><li>GitLab 操作:
<ol><li>打开远程项目页面 → 点击「Merge requests」→「New merge request」;</li><li>「Source branch」选择&nbsp;<code>feature/register</code>,「Target branch」选择&nbsp;<code>main</code>;</li><li>填写 MR 标题和描述 → 点击「Create merge request」。</li></ol></li></ul></li><li>审核与合并:
<ul><li>同事查看代码(如&nbsp;<code>RegisterActivity.kt</code>、布局文件),提出修改意见;</li><li>若需修改:在本地&nbsp;<code>feature/register</code>&nbsp;分支继续开发、提交,推送后 PR/MR 会自动更新;</li><li>审核通过后,由管理员点击「Merge pull request」(GitHub)/「Merge」(GitLab),合并到远程&nbsp;<code>main</code>&nbsp;分支。</li></ul></li></ol><h4>步骤 5:拉取合并后的远程&nbsp;<code>main</code>&nbsp;分支(同步最新代码)</h4><p>PR/MR 合并后,本地&nbsp;<code>main</code>&nbsp;分支需同步远程最新代码:</p><ul><li>AS 可视化:
<ol><li>切换到本地&nbsp;<code>main</code>&nbsp;分支;</li><li>「VCS」→「Git」→「Pull...」→ 选择「origin/main」→「Pull」;</li></ol></li><li>终端命令:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git switch main
git pull origin main</code></pre>
</li></ul><h3>四、Android 项目远程协作小白避坑要点</h3><ol><li><strong>绝对不要直接推送远程&nbsp;<code>main</code>&nbsp;分支</strong>:团队协作中,<code>main</code>&nbsp;是保护分支,需通过 PR/MR 审核合并,直接推送会被拒绝(平台可设置权限);</li><li><strong>推送前先拉取最新代码</strong>:每次推送自己的分支前,先拉取远程目标分支(如&nbsp;<code>origin/main</code>)的最新代码(<code>git pull --rebase origin main</code>),避免因本地代码落后导致冲突;</li><li><strong>确保&nbsp;<code>.gitignore</code>&nbsp;生效</strong>:推送后若在远程仓库看到&nbsp;<code>build</code>、<code>.idea</code>&nbsp;等文件,说明&nbsp;<code>.gitignore</code>&nbsp;未生效,需检查:
<ul><li>文件是否在项目根目录(不是 app 目录);</li><li>文件名是否正确(<code>.gitignore</code>,无后缀);</li><li>若已误提交,执行命令删除远程的忽略文件:
<p>bash</p>
<pre style="white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important"><code>git rm -r --cached build/ .idea/# 移除已暂存的忽略文件
git commit -m "移除误提交的 build/.idea 文件"
git push origin main</code></pre>
</li></ul></li><li><strong>HTTPS 推送失败(GitHub)</strong>:提示「密码认证被禁用」,需用「个人访问令牌(PAT)」替代密码,PAT 生成路径:GitHub 头像 → Settings → Developer settings → Personal access tokens → 勾选&nbsp;<code>repo</code>&nbsp;权限 → 生成后复制,推送时密码填 PAT;</li><li><strong>SSH 连接失败</strong>:提示「Permission denied (publickey)」,重新配置 SSH 密钥(本地生成 → 复制公钥 → 粘贴到 GitHub/GitLab 的 SSH 配置页),验证&nbsp;<code>ssh -T git@github.com</code>&nbsp;成功后再推送;</li><li><strong>远程冲突解决</strong>:拉取代码时提示冲突(如同事修改了&nbsp;<code>activity_main.xml</code>,你也修改了同一部分),解决步骤和本地冲突一致:
<ul><li>打开冲突文件,删除 Git 标记(<code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code>、<code>=======</code>、<code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code>);</li><li>手动合并代码(保留需要的逻辑);</li><li>右键文件 →「Git」→「Add」(标记已解决);</li><li>提交代码(<code>git commit -m "解决远程合并冲突"</code>)→ 重新拉取 / 推送。</li></ul></li></ol><h3>五、Android Studio 远程操作快捷入口总结</h3><table><thead><tr><th>操作目的</th><th>Android Studio 操作路径</th><th>对应终端命令</th></tr></thead><tbody><tr><td>关联远程仓库</td><td>VCS → Git → Remotes → Add Remote</td><td>git remote add origin &lt;远程地址&gt;</td></tr><tr><td>推送本地分支到远程</td><td>VCS → Git → Push(Ctrl+Shift+K)</td><td>git push -u origin &lt;分支名&gt;</td></tr><tr><td>拉取远程分支到本地</td><td>VCS → Git → Pull(Ctrl+T)</td><td>git pull origin &lt;分支名&gt;</td></tr><tr><td>同步远程分支信息(不合并)</td><td>VCS → Git → Fetch</td><td>git fetch origin</td></tr><tr><td>查看远程分支</td><td>底部 Git → Branches → Remote Branches</td><td>git branch -r</td></tr><tr><td>切换远程分支到本地</td><td>底部 Git → Switch to Branch → 选择远程分支 → Checkout As</td><td>git switch -c &lt;本地分支名&gt; origin/&lt; 远程分支名 &gt;</td></tr></tbody></table></div><br><br>
来源:https://www.cnblogs.com/clnchanpin/p/19384373
頁: [1]
查看完整版本: 实用指南:【Git】Git06:Git 管理 Android 项目教程(含GitHub)