首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一篇文章掌握Git从入门到实战

一篇文章掌握Git从入门到实战

作者头像
逍遥子大表哥
发布2026-05-20 15:23:59
发布2026-05-20 15:23:59
1120
举报
文章被收录于专栏:kali blogkali blog

作为新手而言,如何学习别人优秀的开源代码,如何提交自己的代码到开源社区,如何做到代码的版本控制。而今天通过这篇文章,让我们一起来学习吧!

一、什么是 Git?为什么需要版本控制?

Git 是一个分布式版本控制系统。简单说,它像一个「后悔药 + 时间机器」的组合,核心功能如下:

记录每次修改:谁、什么时候、改了什么。

随时回退:改坏了可以回到上一个正常版本

多人协作:各改各的,最后合并在一起

版本控制 vs 普通文件管理

场景

普通文件管理

Git 版本控制

改坏了

文件已保存,无法恢复

git revert 一键回退

想看看上周改了啥

凭记忆

git log 清清楚楚

想同时尝试两个方案

复制粘贴多个文件夹

git branch 开分支

几台电脑同步代码

U 盘拷来拷去

git push/pull 同步

二、Git 与 Github 的关系

Git 是本地的版本管理工具,可自行安装。而Github是远程代码托管平台(像自己的 GitHub)。说白了一个是本地环境,仅自己看,一个是线上版本,可开源可私有。

总体流程: 你本地写完代码 → Git 管理版本 → 推送到 Gitea 备份和共享

三、Git 的安装与首次配置

3.1 下载安装

Windows: 官网 https://git-scm.com 下载安装包,一路 Next

验证安装:

代码语言:javascript
复制
git --version

3.2 配置用户名和邮箱(初始化)

代码语言:javascript
复制
git config --global user.name "逍遥子大表哥"
git config --global user.email "你的邮箱@example.com"

四、实战 推送你的第一个项目

接下来我们需要将 D:\ADRUINO 中的项目提交到Github。

步骤 1:进入项目目录

代码语言:javascript
复制
cd D:\ADRUINO

步骤 2:初始化仓库

代码语言:javascript
复制
git init

这会在当前目录生成一个 .git 隐藏文件夹,Git 用它来管理版本。

步骤 3:创建主分支

代码语言:javascript
复制
git checkout -b main

🔔 注意: 新版的 Git 默认分支名叫 main,不是以前的 master

步骤 4:添加文件到暂存区

代码语言:javascript
复制
git add README.md          # 只添加 README.md
# 或
git add .                  # 添加当前目录所有文件(除了 .gitignore 忽略的)

步骤 5:提交到本地仓库

代码语言:javascript
复制
git commit -m "first commit"

双引号里写本次改动的描述,清晰明了即可。

步骤 6:关联远程仓库

先去 github 上新建一个空仓库,拿到仓库地址:

代码语言:javascript
复制
https://github.com/xiaoyoazi/Arduino.git

然后关联到本地:

代码语言:javascript
复制
git remote add origin https://github.com/xiaoyoazi/Arduino.git

origin 是远程仓库的默认名字,你可以改成任何名字,但大家都用 origin 所以最好保持一致。

步骤 7:推送到远程

代码语言:javascript
复制
git push -u origin main

-u 表示第一次推送时建立关联,以后可以直接 git push

五、踩坑记录 💥

远程仓库名不是 origin 怎么办?

情景: 推送项目提示错误:

代码语言:javascript
复制
git push origin master
# ❌ fatal: 'origin' does not appear to be a git repository

原因: 你的远程仓库名不是默认的 origin,执行下面命令查看当前仓库名。

代码语言:javascript
复制
git remote -v
# 逍遥子  https://github.com/xiaoyoazi/Arduino.git (fetch)
# 逍遥子  https://github.com/xiaoyoazi/Arduino.git (push)

解决方案: 改名或者用原名推送

代码语言:javascript
复制
# 方案一:用原名推送
git push 逍遥子 master
# 方案二:改成标准名字(推荐)
git remote rename 逍遥子 origin
git push origin master

教训:git remote add 时名字别乱取,用 origin 最省心。

分支错误

情景: 推送项目后,提示下面错:

代码语言:javascript
复制
git push origin master
# ❌ error: src refspec master does not match any

原因: 本地的分支叫 main,不是 master

代码语言:javascript
复制
git branch
# * main

解决方案: 推正确的分支:

代码语言:javascript
复制
git push origin main

或者把本地分支改名推:

代码语言:javascript
复制
git branch -M master    # 把 main 改成 master
git push origin master

教训: 推送前先用 git branch 看看本地到底叫什么分支名。

第一次提交忘记 commit 就 push

情景: 新建了仓库,想直接推送:

代码语言:javascript
复制
git push -u origin main
# ❌ error: failed to push some refs

原因: 还没有任何 commit。Git 推的是提交记录,空仓库没有提交就没有分支。

正确顺序:

代码语言:javascript
复制
git init
git checkout -b main    # 创建 main 分支
git add .               # 添加文件
git commit -m "first commit"  # 先提交
git remote add origin <地址>   # 再关联远程
git push -u origin main       # 最后推送

六、日常开发工作流

6.1 修改代码后提交

代码语言:javascript
复制
# 1. 看看改了什么
git status
# 2. 添加修改
git add .
# 3. 提交
git commit -m "修复:文章页面XSS过滤"
# 4. 推送到Gitea
git push

6.2 建议的提交信息格式

代码语言:javascript
复制
<类型>:<简短描述>
类型:
  feat    - 新功能
  fix     - 修复bug
  docs    - 文档修改
  refactor - 重构代码
  style   - 格式调整(不影响功能)
举例:
  fix: 修复登录页SQL注入漏洞
  feat: 新增MQTT消息队列功能
  docs: 更新README安装说明

七、版本回退(最核心的能力)

这是版本控制最大的价值——改坏了能回去

7.1 先看提交历史

代码语言:javascript
复制
git log --oneline
# abc1234 (HEAD -> main) 修复:文章页面XSS过滤
# def5678 新增:用户登录功能
# ghi9012 初始提交

abc1234 是 commit ID(哈希值),每个提交的唯一标识。

7.2 场景一:刚提交还没推送

代码语言:javascript
复制
# 撤销最近一次提交,但保留代码修改
git reset --soft HEAD~1
# 彻底回到上一版本(丢弃所有修改)
git reset --hard HEAD~1

7.3 场景二:已经推送到 Gitea

✅ 安全方案:git revert

代码语言:javascript
复制
# 撤销最近一次提交,生成一个新的反向提交
git revert HEAD
git push
# 撤销某次指定的提交(比如那个XSS修复)
git revert abc1234
git push

优点: 不修改历史记录,多人协作时不会搞乱别人。

❌ 暴力方案:git reset + force push

代码语言:javascript
复制
git reset --hard HEAD~1
git push origin main --force

⚠️ 慎用! 强制推送会改写远程历史,如果别人已经拉取了你的代码,他们的仓库会出问题。

7.4 revert vs reset 怎么选?

场景

推荐方案

只有你自己在用这个仓库

随便,看心情

多人协作开发

必须用 git revert

刚提交 5 分钟还没推远程

git reset --soft HEAD~1

已经推远程了

用 git revert

就想彻底删除某个提交的所有痕迹

git reset --hard + --force

八、几个实用小技巧

查看某个版本改了啥

代码语言:javascript
复制
git show abc1234

只看文件修改列表

代码语言:javascript
复制
git show --stat abc1234

撤销某个文件的修改(还没 add)

代码语言:javascript
复制
git checkout -- src/main.py

只想撤销某个文件的提交(已经 add)

代码语言:javascript
复制
git reset HEAD src/main.py

九、常用命令速查表

命令

作用

git init

初始化仓库

git status

查看当前状态

git add .

添加所有修改

git commit -m "描述"

提交修改

git push

推送到远程

git pull

拉取远程更新

git log --oneline

查看提交历史

git branch

查看分支

git checkout -b <分支名>

创建并切换分支

git revert HEAD

安全回退最近一次提交

git reset --soft HEAD~1

撤销提交,保留修改

git reset --hard HEAD~1

彻底回到上一版本

git remote -v

查看远程仓库地址

git remote add origin <地址>

关联远程仓库

更多精彩文章 欢迎关注我们

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kali笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是 Git?为什么需要版本控制?
    • 版本控制 vs 普通文件管理
  • 二、Git 与 Github 的关系
  • 三、Git 的安装与首次配置
    • 3.1 下载安装
    • 3.2 配置用户名和邮箱(初始化)
  • 四、实战 推送你的第一个项目
    • 步骤 1:进入项目目录
    • 步骤 2:初始化仓库
    • 步骤 3:创建主分支
    • 步骤 4:添加文件到暂存区
    • 步骤 5:提交到本地仓库
    • 步骤 6:关联远程仓库
    • 步骤 7:推送到远程
  • 五、踩坑记录 💥
    • 远程仓库名不是 origin 怎么办?
    • 分支错误
    • 第一次提交忘记 commit 就 push
  • 六、日常开发工作流
    • 6.1 修改代码后提交
    • 6.2 建议的提交信息格式
  • 七、版本回退(最核心的能力)
    • 7.1 先看提交历史
    • 7.2 场景一:刚提交还没推送
    • 7.3 场景二:已经推送到 Gitea
    • 7.4 revert vs reset 怎么选?
  • 八、几个实用小技巧
    • 查看某个版本改了啥
    • 只看文件修改列表
    • 撤销某个文件的修改(还没 add)
    • 只想撤销某个文件的提交(已经 add)
  • 九、常用命令速查表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档