文章目录

    • 目标
    • 一、快速上手
      • 1. Windows 安装 Git
      • 2. 初始化 / 克隆
    • 二、核心概念速览
    • 三、常用命令清单
      • 1) 查看状态与差异
      • 2) 添加与提交
      • 3) 历史与回溯
      • 4) 撤销与恢复(Git 2.23+ 推荐新命令)
      • 5) 忽略文件
    • 四、分支与合并(Branch & Merge)
      • 1) 创建与切换
      • 2) 更新主干与合并
      • 3) 推送与合并回主干
      • 4) 解决冲突
      • 5) 常见工作流
    • 五、远程协作(Remote)
      • 1) 添加与管理远程
      • 2) 获取与推送
      • 3) 追踪分支(上游)
    • 六、Gitee(码云)使用
      • 1) 创建仓库
      • 2) 使用账号密码或个人访问令牌(推荐)
      • 3) 绑定远程并推送(以 HTTPS 为例)
      • 4) 从 GitHub 迁移到 Gitee(镜像)
    • 七、进阶:变基、挑拣、暂存与标签
      • 1) 交互式变基(整理提交历史)
      • 2) 挑拣(把某提交拷到当前分支)
      • 3) 暂存(临时搁置工作)
      • 4) 标签(发布打标)
    • 八、常见问题速查
    • 九、实战练习:20 步从零到协作

目标

  • 掌握 Git 基础概念与常用命令:仓库、提交、暂存区、分支
  • 熟悉常见工作流:创建/切换分支、合并、变基、解决冲突
  • 了解远程协作:添加远程、推送/拉取、使用 Gitee(码云)

提示:Windows 可使用 Git Bash 或 PowerShell(需先安装 Git for Windows)。


原文链接:https://blog.ybyq.wang/archives/1095.html


一、快速上手

1. Windows 安装 Git

  • 下载与安装
    • 前往 Git for Windows 官网 或 Gitee 镜像站下载安装包
    • 双击安装包,按向导进行安装
  • 验证与基础配置
git --version
which bash
# 基本配置(签名和默认分支)
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global color.ui auto
# Windows:换行符自动转换(跨平台推荐)
git config --global core.autocrlf true
# 可选:将 VS Code 设为默认编辑器
git config --global core.editor "code --wait"
  • 账号与 Gitee 绑定(推荐使用个人访问令牌)
# 方式一:账号密码(不推荐)
# 推送时按提示输入 Gitee 用户名和密码# 方式二:个人访问令牌(推荐,更安全)
# 1. 登录 Gitee → 个人设置 → 私人令牌
# 2. 创建令牌并勾选需要的权限(如 projects)
# 3. 推送时用户名填 Gitee 用户名,密码填该令牌

2. 初始化 / 克隆

# 初始化本地仓库(在当前目录创建 .git)
git init# 克隆远程仓库
git clone <repo-url>

二、核心概念速览

  • 工作区(Working Directory):你看到的文件
  • 暂存区(Staging Area):下次提交的快照
  • 本地仓库(Local Repository):提交历史(HEAD 指向的分支)
  • 远程仓库(Remote):如 origin(GitHub/Gitee 等)

三、常用命令清单

1) 查看状态与差异

git status                  # 当前状态
git diff                    # 工作区 vs 暂存区
git diff --staged           # 暂存区 vs 最近一次提交

2) 添加与提交

git add <file>              # 添加到暂存区
git add .                   # 添加所有修改
git commit -m "feat: add user api"  # 提交# 修改上一条提交信息(未推送时)
git commit --amend -m "fix: correct message"

3) 历史与回溯

git log --oneline --graph --decorate --all# 查看某次提交内容
git show <commit>

4) 撤销与恢复(Git 2.23+ 推荐新命令)

# 丢弃工作区更改(小心使用)
git restore <file># 从暂存区移除(保留工作区修改)
git restore --staged <file># 还原一个提交(生成反向提交)
git revert <commit># 重置分支到某提交(危险,谨慎)
# --soft: 仅移动 HEAD;--mixed: 重置暂存区;--hard: 丢弃工作区
git reset --mixed <commit>

5) 忽略文件

创建 .gitignore

# Java/IDE 示例
/target/
*.class
*.log
.idea/
*.iml
.DS_Store

四、分支与合并(Branch & Merge)

1) 创建与切换

# 创建并切换到新分支
git switch -c feature/login
# 在已有分支间切换
git switch main

2) 更新主干与合并

# 将 feature/login 合并到 main
git switch main
git merge feature/login# 同步主干最新(需先配置远程)
git fetch origin
git switch main
git pull --rebase origin main# 回到功能分支并合并主干变更
git switch feature/login
# 策略 1:合并提交(保留分叉历史)
git merge main --no-ff -m "merge main into feature/login"
# 策略 2:变基(历史更线性)
# 说明:将当前分支的提交“挪到” main 最新之后,减少合并提交
git rebase main

3) 推送与合并回主干

# 首次推送功能分支并建立上游
git push -u origin feature/login# 发起合并(建议 PR/MR 流程),或本地合并:
git switch main
git merge --no-ff feature/login -m "feat(login): implement basic login"
git push origin main

4) 解决冲突

# 冲突后,编辑冲突文件并标记已解决
git add <conflicted-files>
# 若在 rebase 流程:
git rebase --continue
# 若放弃 rebase:
git rebase --abort

5) 常见工作流

  • Git Flow:main + develop + feature/release/hotfix(适合版本节奏固定)
  • Trunk-Based:main + 短分支 + 小步快跑 + CI(多数团队推荐)

五、远程协作(Remote)

1) 添加与管理远程

git remote -v
# 添加远程别名 origin
git remote add origin <url>
# 修改远程地址
git remote set-url origin <new-url>

2) 获取与推送

git fetch origin                  # 仅拉取,不更新本地分支
git pull --rebase origin main     # 拉取并变基(历史更干净)
git push origin main              # 推送

3) 追踪分支(上游)

# 建立本地分支与远程上游的关联(首次)
git push -u origin feature/x
# 之后即可:
# git push
# git pull --rebase
# 如有冲突:
# git add .
# git rebase --continue 或 git merge --continue

六、Gitee(码云)使用

1) 创建仓库

  • 登录 Gitee,新建仓库,获取 HTTPS 或 SSH 地址

2) 使用账号密码或个人访问令牌(推荐)

# 方式一:账号密码(推送时按提示输入)
# 方式二:个人访问令牌(推荐)
#   1) Gitee 个人设置 → 私人令牌
#   2) 创建令牌并勾选权限(如 projects)
#   3) 推送时用户名=Gitee 用户名,密码=个人令牌

3) 绑定远程并推送(以 HTTPS 为例)

# 在已有本地仓库中添加 origin(Gitee)
git remote add origin https://gitee.com/<your-namespace>/<repo>.git
# 首次推送(设置上游)
git push -u origin main

4) 从 GitHub 迁移到 Gitee(镜像)

  • 方案 A:在 Gitee 仓库设置中使用“从 GitHub 导入仓库”
  • 方案 B:本地设置两个远程,手动推送
git remote add github git@github.com:<ns>/<repo>.git
git remote add gitee  https://gitee.com/<ns>/<repo>.git
# 推送全部分支与标签
git push gitee --all
git push gitee --tags

七、进阶:变基、挑拣、暂存与标签

1) 交互式变基(整理提交历史)

git rebase -i HEAD~5  # squash / fixup / reword / reorder

2) 挑拣(把某提交拷到当前分支)

git cherry-pick <commit>

3) 暂存(临时搁置工作)

git stash push -m "wip: refactor"
git stash list
git stash apply  # 或 pop

4) 标签(发布打标)

git tag v1.0.0
git tag -a v1.0.1 -m "hotfix"
git push origin --tags

八、常见问题速查

  • push 被拒绝:先 git fetch,再 git rebase origin/main 或开分支提 PR
  • Detached HEAD:git switch <branch> 回到分支;需要保存可新建分支 git switch -c temp
  • 误删文件:从最近提交恢复 git restore --source=HEAD -- <file>
  • 大文件入库:考虑 Git LFS;或加入 .gitignore 并清理历史
  • 行尾换行混乱:检查 core.autocrlf 设置;跨平台建议 true

九、实战练习:20 步从零到协作

场景:在本地新建项目 → 管理变更 → 分支开发 → 合并与解决冲突 → 连接远程并推送 → 打标签与回滚。命令可在 PowerShell 或 Git Bash 中执行。要求:提交信息使用中文,示例代码使用 Java。

  1. 新建目录并初始化仓库
mkdir demo-git && cd demo-git
git init
  1. 配置用户名邮箱(仅首次或需要覆盖时)
git config user.name "学生"
git config user.email "student@example.com"
  1. 创建 README 并首次提交(中文提交信息)
echo "# Demo Git 项目" > README.md
git add README.md
git commit -m "初始化仓库并添加 README"
  1. 新建 .gitignore 并提交(中文提交信息)
echo -e "/dist/\n*.log" > .gitignore
git add .gitignore
git commit -m ".gitignore:忽略构建产物和日志"
  1. 创建 Java 主类并提交(App v1)
mkdir src
# 写入 src/App.java(v1)
echo "public class App {" > src/App.java
echo "  public static void main(String[] args) {" >> src/App.java
echo "    System.out.println(\"v1\");" >> src/App.java
echo "  }" >> src/App.java
echo "}" >> src/App.javagit add src/App.java
git commit -m "新增 Java 主类 App(v1)"
  1. 创建功能分支并切换
git switch -c feature/login
  1. 在功能分支新增登录功能类(提交 1)
# 写入 src/AuthService.java(仅 login)
echo "public class AuthService {" > src/AuthService.java
echo "  public boolean login() { return true; }" >> src/AuthService.java
echo "}" >> src/AuthService.javagit add src/AuthService.java
git commit -m "登录功能:新增 AuthService,包含 login 方法"
  1. 在功能分支完善登出功能(提交 2)
# 覆盖写入,新增 logout 方法
echo "public class AuthService {" > src/AuthService.java
echo "  public boolean login() { return true; }" >> src/AuthService.java
echo "  public boolean logout() { return true; }" >> src/AuthService.java
echo "}" >> src/AuthService.javagit add src/AuthService.java
git commit -m "登录功能:补充 logout 方法"
  1. 切回主分支并做一次修复(覆盖重写 App.java)
git switch main
# 将 App.java 覆盖为含 HOTFIX 的版本
echo "public class App {" > src/App.java
echo "  public static void main(String[] args) {" >> src/App.java
echo "    System.out.println(\"v1\");" >> src/App.java
echo "    System.out.println(\"HOTFIX\");" >> src/App.java
echo "  }" >> src/App.java
echo "}" >> src/App.javagit add src/App.java
git commit -m "主分支修复:修正启动日志(HOTFIX)"
  1. 将主干变更同步到功能分支(rebase,更线性)
git switch feature/login
git rebase main
  1. 若出现冲突则解决并继续(无冲突可跳过)
# 编辑有冲突的文件,确认内容后:
git add .
git rebase --continue
  1. 将功能分支合并回主干(无快进,保留记录)
git switch main
git merge --no-ff feature/login -m "合并 feature/login:登录功能完成"
  1. 查看提交历史图
git log --oneline --graph --decorate --all
  1. 创建发布标签(v1.0.0)
git tag -a v1.0.0 -m "首次发布版本"
  1. 添加远程并首次推送(以 Gitee 为例,替换为你的仓库)
git remote add origin https://gitee.com/<your-namespace>/<repo>.git
git push -u origin main
  1. 推送功能分支与标签
git push -u origin feature/login
git push origin --tags
  1. 创建新分支新增 Banner 类,并将提交挑拣到 main
git switch -c feature/banner
# 写入 src/Banner.java
echo "public class Banner {" > src/Banner.java
echo "  public static void show() { System.out.println(\"BANNER\"); }" >> src/Banner.java
echo "}" >> src/Banner.javagit add src/Banner.java
git commit -m "新增 Banner 类:打印横幅"
# 回到 main,通过分支名挑拣该提交(取分支 tip 提交)
git switch main
git cherry-pick feature/banner
  1. 制造一个误提交并回退工作区/暂存区
echo "wrong" > tmp.txt
git add tmp.txt
# 发现误加:从暂存区移除,保留工作区
git restore --staged tmp.txt
# 丢弃工作区更改(小心)
git restore tmp.txt
  1. 修改最近一次提交的提交信息(未推送前),并升级 App 到 v2
# 覆盖写入 App.java(v2)
echo "public class App {" > src/App.java
echo "  public static void main(String[] args) {" >> src/App.java
echo "    System.out.println(\"v1\");" >> src/App.java
echo "    System.out.println(\"v2\");" >> src/App.java
echo "  }" >> src/App.java
echo "}" >> src/App.javagit add src/App.java
git commit -m "升级主程序至 v2"
# 发现提交信息需要更准确:
git commit --amend -m "App 升级:输出 v1 与 v2"
  1. 回滚某次已推送的功能(生成反向提交,安全)
# 假设要回滚上一步提交:
git revert HEAD
# 推送到远程:
git push origin main

提示:

  • 如遇推送被拒绝,先执行 git fetchgit pull --rebase origin main 同步。
  • 在多人协作中,建议使用 Pull Request/Merge Request 进行代码评审与合并。

作者:xuan
个人博客:https://blog.ybyq.wang
欢迎访问我的博客,获取更多技术文章和教程。

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

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

相关文章

css`min()` 、`max()`、 `clamp()`

min() 用来计算多个数值中最小的那个&#xff0c;非常适合做自适应。 width: min(50vw, 500px) 50vw 表示 视口宽度的 50% 500px 表示 500px min(50vw, 500px) 表示会取两者中 最小的那个 作为最终的宽度&#xff0c;。 使用场景 限制某个元素宽度不超过某个值&#xff1b; 响…

【WRF-VPRM 预处理器】HEG 安装(服务器)-MRT工具替代

目录 HEG 安装 验证 HEG 安装与否 设置环境变量(建议) 命令行接口(Command Line Interface) hegtool 工具 hegtool 用法 Header File 格式 功能1:`gdtif` 工具 – MISR 数据处理 `gdtif` 使用方式 参数文件格式(Parameter File Format) 功能2:`resample` 工具 – 重采样…

PyTorch 神经网络

神经网络是一种模仿人脑神经元链接的计算模型&#xff0c; 由多层节点组成&#xff0c; 用于学习数据之间的复杂模式和关系。神经网络通过调整神经元之间的连接权重来优化预测结果&#xff0c;这个过程可以涉及到向前传播&#xff0c;损失计算&#xff0c;反向传播和参数更新。…

详细解析苹果iOS应用上架到App Store的完整步骤与指南

&#x1f4f1;苹果商店上架全流程详解 &#x1f469;‍&#x1f4bb;想要将你的App上架到苹果商店&#xff1f;跟随这份指南&#xff0c;一步步操作吧&#xff01; 1️⃣ 申请开发者账号&#xff1a;访问苹果开发者网站&#xff0c;注册并支付99美元年费&#xff0c;获取开发者…

三维GIS开发实战!Cesium + CZML 实现火箭飞行与分离的 3D 动态模拟

CZML是一种基于JSON的数据格式&#xff0c;专门用于在Cesium中描述3D场景和时间动态数据。本文将详细介绍了CZML的特点&#xff08;JSON格式、时间动态性、层次结构等&#xff09;和基本组件&#xff0c;并给出了一个火箭发射的实例。通过搭建Cesium开发环境&#xff08;使用vi…

Spring Boot 深入剖析:BootstrapRegistry 与 BeanDefinitionRegistry 的对比

在 Spring Boot 的启动过程中&#xff0c;BootstrapRegistry 和 BeanDefinitionRegistry 是两个名为“Registry”却扮演着截然不同角色的核心接口。理解它们的差异是深入掌握 Spring Boot 启动机制和进行高级定制开发的关键。BootstrapRegistry public static ConfigurableAppl…

贪心算法应用:速率单调调度(RMS)问题详解

Java中的贪心算法应用&#xff1a;速率单调调度(RMS)问题详解 1. 速率单调调度(RMS)概述 速率单调调度(Rate Monotonic Scheduling, RMS)是一种广泛应用于实时系统中的静态优先级调度算法&#xff0c;属于贪心算法在任务调度领域的经典应用。 1.1 基本概念 RMS基于以下原则&…

Cesium4--地形(OSGB到3DTiles)

1 OSBG OSGB&#xff08;OpenSceneGraph Binary&#xff09;是基于 OpenSceneGraph&#xff08;OSG&#xff09; 三维渲染引擎的二进制三维场景数据格式&#xff0c;广泛用于存储和传输倾斜摄影测量、BIM、点云等大规模三维模型&#xff0c;尤其在国产地理信息与智慧城市项目中…

多语言共享贩卖机投资理财共享售卖机投资理财系统

多语言共享贩卖机投资理财/共享售卖机分红/充电宝/充电桩投资理财系统 采用thinkphp内核开发&#xff0c;支持注册赠金、多级分销&#xff0c;功能很基础 修复后台用户列表管理 可自定义理财商品 多种语言还可以添加任意语言 源码开源 多级分销 注册赠金等

[Windows] PDF 专业压缩工具 v3.0

[Windows] PDF 专业压缩工具 v3.0 链接&#xff1a;https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 压缩工具 3.0 新版功能特点 - 不受页数限制&#xff01; 一、核心压缩功能 1.多模式智能压缩 支持 4 种压缩模式&#xff1a;平衡模式&#xff08…

SHEIN 希音 2026 校招 内推 查进度

SHEIN 希音 2026 校招 内推 查进度 &#x1f3e2;公司名称&#xff1a;SHEIN 希音 &#x1f4bb;招聘岗位&#xff1a;前端、后端、测试、产品、安全、运维、APP 研发、数据分析、设计师、买手、企划、招商、管培生 &#x1f31f;内推码&#xff1a;NTA2SdK &#x1f4b0;福利待…

ARM (6) - I.MX6ULL 汇编点灯迁移至 C 语言 + SDK 移植与 BSP 工程搭建

回顾一、核心关键字&#xff1a;volatile1.1 作用告诉编译器&#xff1a;被修饰的变量会被 “意外修改”&#xff08;如硬件寄存器的值可能被外设自动更新&#xff09;&#xff0c;禁止编译器对该变量进行优化&#xff08;如缓存到寄存器、删除未显式修改的代码&#xff09;。本…

Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案

Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案 在Vue单页应用中&#xff0c;路由切换时组件默认会经历完整的销毁-重建流程&#xff0c;这会导致两个典型问题&#xff1a;从搜索页跳转到列表页需要重新加载数据&#xff0c;而从详情页返回列表页又希望保留滚动位置…

Visual Studio Code 安装与更新故障排除:从“拒绝访问”到成功恢复

Visual Studio Code 安装与更新故障排除&#xff1a;从“拒绝访问”到成功恢复的实践分析 摘要&#xff1a; 本文旨在探讨 Visual Studio Code (VS Code) 在安装与更新过程中常见的故障&#xff0c;特别是涉及“拒绝访问”错误、文件缺失以及快捷方式和任务栏图标异常等问题。…

简单UDP网络程序

目录 UDP网络程序服务端 封装 UdpSocket 服务端创建套接字 服务端绑定 运行服务器 UDP网络程序客户端 客户端创建套接字 客户端绑定 运行客户端 通过上篇文章的学习&#xff0c;我们已经对网络套接字有了一定的了解。在本篇文章中&#xff0c;我们将基于之前掌握的知识…

如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘requests’ 问题

Python系列Bug修复PyCharm控制台pip install报错&#xff1a;如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘requests’ 问题 摘要 在日常Python开发过程中&#xff0c;pip install 是我们最常用的依赖安装命令之一。然而很多开发者在 PyCharm 控制台…

解释 ICT, Web2.0, Web3.0 这些术语的中文含义

要理解“ICT Web2.0”术语的中文含义&#xff0c;需先拆解为 ICT 和 Web2.0 两个核心概念分别解析&#xff0c;再结合二者的关联明确整体指向&#xff1a; 1. 核心术语拆解&#xff1a;中文含义与核心定义 &#xff08;1&#xff09;ICT&#xff1a;信息与通信技术 中文全称&am…

IDEA版本控制管理之使用Gitee

使用Gitee如果之前没用过Gitee&#xff0c;那么IDEA中应该长这样&#xff08;第一次使用&#xff09;如果之前使用过Gitee&#xff0c;那么IDEA中应该长这样这种情况&#xff0c;可以先退出Gitee&#xff0c;再拉取Gitee&#xff0c;退出Gitee方法见文章底部好&#xff0c;那么…

NLP(自然语言处理, Natural Language Processing)

让计算机能够理解、解释、操纵和生成人类语言&#xff0c;从而执行有价值的任务。 关注社区&#xff1a;Hugging Face、Papers With Code、GitHub 是现代NLP学习不可或缺的资源。许多最新模型和代码都在这里开源。 ①、安装库 pip install numpy pandas matplotlib nltk scikit…

后端json数据反序列化枚举类型不匹配的错误

后端json数据反序列化枚举类型不匹配的错误后端返回的json格式在前端反序列化报错System.Text.Json.JsonException:“The JSON value could not be converted to TodoReminderApp.Models.Priorityen. Path: $.Data.Items.$values[0].Priority | LineNumber: 0 | BytePositionIn…