Git 从零到一:以 Gitee 为例的实战与可视化指南

news/2025/9/23 22:03:39/文章来源:https://www.cnblogs.com/1314520xh/p/19108235

这是一篇"开箱即用"的 Git 入门到进阶实战文。你将从安装、配置、SSH、创建远端仓库与本地初始化开始,
迅速掌握个人开发与团队协作的两种主流程;并结合真实案例(项目 IOT_LLM 与分支 masterheshuangxinzxj),
学会如何在他人已合入主干后安全地推送自己的改动。文末附可视化演示与速查表,拿来就能用。


📋 目录导航

🚀 基础入门

  • 0. Git 与 Gitee:三句话
  • 1. 安装 Git(macOS / Windows / Linux)
  • 2. 配置用户与生成 SSH Key,绑定 Gitee
  • 3. 创建仓库与本地初始化(两条路径)

🔄 核心协作流程

  • 4. 分支与协作两种"黄金流程"
    • 场景 1:不并入主干(只推分支,平台上发 MR)
    • 场景 2:先并入主干(本地合并/变基后再推)

📚 实战案例

  • 5. IOT_LLM 真实案例(包含 masterheshuangxinzxj
    • IOT_LLM · 案例 · 场景 1(不并入主干,只推分支)
    • IOT_LLM · 案例 · 场景 2(需要并入主干,再推)

🛠️ 问题解决

  • 6. 冲突处理与撤销恢复(你一定会用到)
  • 7. 🧨 常见错误与处理方法
  • 8. 🛡️ 防踩坑建议

⚡ 效率提升

  • 9. 🚀 自动化脚本:gitdev.sh
  • 10. 🐍 防止提交 .pyc 文件

🔧 进阶技巧

  • 11. 进阶:钩子、LFS、稀疏检出
  • 12. 架构原理图(Mermaid)
  • 13. 一页速查表(收藏)

0. Git 与 Gitee:三句话

  • Git 是分布式版本控制系统;Gitee 是国内常用的代码托管平台(类似 GitHub)。
  • 常见对象:本地仓库、远端仓库(origin)、分支(master/mainfeature/*)。
  • 核心流:工作区 -> 暂存区(git add)-> 本地提交(git commit)-> 推送到远端(git push)。

1. 安装 Git(macOS / Windows / Linux)

  • macOS:
    brew install git
    git --version
    
  • Windows:到 https://git-scm.com 下载 Git for Windows(带 Git Bash),安装后在终端执行 git --version
  • Linux(Debian/Ubuntu):
    sudo apt update && sudo apt install -y git
    git --version
    

2. 配置用户与生成 SSH Key,绑定 Gitee

  1. 基本信息(全局一次即可)
git config --global user.name "你的名字"
git config --global user.email "you@example.com"
git config --global init.defaultBranch master   # 或 main
  1. 生成 SSH 密钥(建议留空直接回车)
ssh-keygen -t ed25519 -C "you@example.com"
# 生成于 ~/.ssh/id_ed25519 与 ~/.ssh/id_ed25519.pub
  1. 到 Gitee 个人设置 → SSH 公钥,粘贴 id_ed25519.pub 内容,标题任意。

  2. 验证连接

ssh -T git@gitee.com
# 首次连接会提示是否继续,输入 yes;若看到用户名问候即成功

3. 创建仓库与本地初始化(两条路径)

路径 A:先在 Gitee 新建仓库,再 clone

  1. 在 Gitee 新建仓库(设为私有/公开均可),复制 SSH 地址 git@gitee.com:<owner>/<repo>.git

  2. 克隆到本地

git clone git@gitee.com:<owner>/<repo>.git MyProject
cd MyProject
  1. 首次提交
echo "# MyProject" > README.md
git add -A && git commit -m "chore: init project"
git push -u origin master

路径 B:本地先 init,再推到 Gitee 空仓库

mkdir MyProject && cd MyProject
git init
echo "# MyProject" > README.md
git add -A && git commit -m "chore: init project"
git remote add origin git@gitee.com:<owner>/<repo>.git
git push -u origin master

小贴士:把 .envnode_modules/dist/ 等加入 .gitignore,避免把隐私或构建产物推上去。

下面是 7 个常用 Git 命令的作用 + 何时用 + 常见用法(超简明小抄):

命令 作用是什么 什么时候用 常见用法/备注
fetch 从远端拉“更新信息”到本地(远端分支、标签、提交),不改动你当前工作区/分支 想先看远端最新但不合并;在 rebase/merge 前的准备 git fetch origin;只抓某分支:git fetch origin master
rebase 把你这条分支的提交“搬到”新的基底(如最新 master)并重放,历史更线性(会改写提交哈希) 合并前整理历史;跟上最新主干 git rebase origin/master;遇冲突 → 解决→git addgit rebase --continue;放弃:git rebase --abort
switch 切换/创建分支(新语法,替代部分 checkout 在分支间切换;从主干开新分支 切换:git switch heshuangxin;新建并切换:git switch -c feature/login
pull 抓取并合并到当前分支(= fetch + merge,默认) 一步把远端更新合到当前分支 git pull;想线性历史:git pull --rebase
push 把本地提交推到远端 同步你的分支/标签到远端仓库 初次推送并建立跟踪:git push -u origin feature;改写历史后推:git push --force-with-lease
add 把改动放进暂存区(准备被提交) 选择要进本次 commit 的文件/片段 全部:git add -A;单文件:git add app.py;交互选择:git add -p
commit 把暂存区的改动生成一个提交(记录快照) 完成一个逻辑单元的修改 git commit -m "feat: 支持导出PDF";修改最近一次信息:git commit --amend

一条常见工作流(安全做法)

git switch feature
git add -A
git commit -m "feat: 我的改动"git fetch origin
git rebase origin/master      # 或:git pull --rebase
# 解决冲突 -> git add 冲突文件 -> git rebase --continuegit push -u origin feature    # 若做过 rebase:git push --force-with-lease

小提示

  • 公共分支慎用 rebase;若用了,推送请用 --force-with-lease(更安全)。
  • fetch 不会动你当前分支,很适合“先看看再决定怎么合”。
  • 养成“小步提交、清晰信息、按功能点提交”的习惯,回退/审查都更轻松。

4. 分支与协作两种“黄金流程”

当你在个人分支开发并提交后,推到远端并发起 Merge Request(MR)是最佳实践。是否需要把主干 master 的最新改动合入你的分支,决定了两套流程。

场景 1:不并入主干(只推分支,平台上发 MR)

适用于:你只需提交自己的改动,不需要把 master 的更新拉到你分支。

# 一次性切分支(若远端已有,可直接切换)
git switch -c heshuangxin || git switch heshuangxin || git switch -c heshuangxin origin/heshuangxin# 开发与提交
git add -A
git commit -m "feat: 我的修改"# 若远端该分支别人也推过,先衔接避免 non-fast-forward
git pull --rebase origin heshuangxin || true# 推送并建立 upstream
git push -u origin heshuangxin# 到 Gitee 发 MR:heshuangxin -> master

场景 2:先并入主干(本地合并/变基后再推)

适用于:你要先解决与 master 的差异,让 MR 更干净,提前发现冲突。

做法 A:rebase(推荐,历史更线性)

git fetch origin
git switch heshuangxin
git add -A && git commit -m "feat: 我的修改"  # 或 git stash -u
git rebase origin/master
# 冲突 -> 编辑解决 -> git add <file> -> git rebase --continue
# 放弃此次变基 -> git rebase --abort
git push -u origin heshuangxin --force-with-lease
# 发 MR:heshuangxin -> master

做法 B:merge(最稳,保留分叉)

git fetch origin
git switch heshuangxin
git add -A && git commit -m "feat: 我的修改"
git merge origin/master
git push -u origin heshuangxin
# 发 MR:heshuangxin -> master

5. IOT_LLM 真实案例(包含 masterheshuangxinzxj

前提:

  • 你第一次是从 master 下载代码,切到 heshuangxin 开发;
  • 同时团队成员 zxj 已经把自己的改动合并进了 master

如何推送你的代码?两种做法如下。

IOT_LLM · 案例 · 场景 1(不并入主干,只推分支)

git clone git@gitee.com:<owner>/IOT_LLM.git && cd IOT_LLM
git switch -c heshuangxin || git switch heshuangxin || git switch -c heshuangxin origin/heshuangxin
git add -A && git commit -m "feat(IOT_LLM): 我的修改"
git pull --rebase origin heshuangxin || true
git push -u origin heshuangxin
# 在 Gitee 发起 MR:heshuangxin -> master

IOT_LLM · 案例 · 场景 2(需要并入主干,再推)

A) rebase(推荐)

git fetch origin
git switch heshuangxin
git add -A && git commit -m "feat(IOT_LLM): 我的修改"
git rebase origin/master
# 冲突 -> 解决 -> git add <file> -> git rebase --continue | --abort
git push -u origin heshuangxin --force-with-lease
# 在 Gitee 发起 MR:heshuangxin -> master

B) merge(最稳)

git fetch origin
git switch heshuangxin
git add -A && git commit -m "feat(IOT_LLM): 我的修改"
git merge origin/master
git push -u origin heshuangxin
# 在 Gitee 发起 MR:heshuangxin -> master

6. 冲突处理与撤销恢复(你一定会用到)

处理冲突(以 rebase 为例)

git rebase origin/master
# 文件出现 <<<<<<< / ======= / >>>>>>> 标记
# 手工合并 -> git add <file> -> git rebase --continue
# 放弃这次变基:git rebase --abort

撤销与恢复常用命令

git restore <file>               # 丢弃工作区改动
git restore --staged <file>      # 取消暂存
git reset --soft <sha>           # 仅移动 HEAD
git reset --mixed <sha>          # 默认,保留工作区
git reset --hard <sha>           # 回到指定提交(危险)
git revert <sha>                 # 生成反向提交,安全撤销
git reflog                       # 找回历史指针

7. 🧨 常见错误与处理方法

以下是多人开发 Git 流程中经常遇到的错误及处理方法合集,适合每人维护独立开发分支(如 heshuangxin)的团队使用。

❌ 1. fatal: 'origin/xxx' does not appear to be a git repository

原因:错误地把远程分支当成仓库地址使用了。

# 错误 ❌
git pull origin/xxx# 正确 ✅
git pull origin xxx

❌ 2. Your branch is behind 'origin/xxx'

原因:本地分支落后于远程,需要同步。

处理

git pull origin xxx  # 合并方式
# 或(推荐使用 rebase 保持历史整洁)
git pull --rebase origin xxx

❌ 3. You have unstaged changes. 无法提交

原因:改了文件但没有 git add,无法 commit。

处理

git add .
git commit -m "说明"

❌ 4. Merge conflict in xxx (合并冲突)

原因:你改的文件和远程改动冲突。

处理流程

# 查看冲突文件
git status# 手动修改冲突文件,保存后:
git add <已解决的文件>
git commit     # 合并后补交一次 commit

❌ 5. fatal: Could not read from remote repository.

原因

  • 没有权限(尤其是用 SSH 时)
  • SSH key 未配置
  • 仓库地址写错

处理

# 检查 SSH key 是否添加到 Gitee / GitHub
ssh -T git@gitee.com# 也可改用 HTTPS 拉代码:
git remote set-url origin https://gitee.com/your/repo.git

❌ 6. 忘了切换到自己的分支就在 master 上开发

处理方式

# 将改动转移到自己的分支
git checkout -b heshuangxin    # 创建并切换
# 或:
git stash                 # 临时保存改动
git checkout heshuangxin
git stash pop             # 恢复改动到正确分支

❌ 7. push 报错:rejected - failed to push some refs

原因:远程有更新,推送冲突。

处理

# 先同步远程
git pull --rebase origin heshuangxin
# 再推送
git push origin heshuangxin

❌ 8. 误删了文件或改错了内容

处理

git checkout -- <filename>     # 恢复单个文件
git reset --hard HEAD          # 全部恢复为上次提交状态(慎用)

❌ 9. 其他常见错误

! [rejected] (non-fast-forward)  -> 先衔接:git pull --rebase origin <branch>
pre-receive hook declined        -> 受保护分支,推个人分支走 MR
detached HEAD                    -> git switch <branch> 回到分支
It seems there is already a rebase-merge -> 正在 rebase:--continue 或 --abort

8. 🛡️ 防踩坑建议

  • 提交前检查git status 确认文件状态,避免提交临时文件
  • 小步提交:一次提交解决一个问题,便于回滚和 code review
  • 先 fetch 再操作git fetch origin 成为肌肉记忆
  • 分支命名规范feature/功能名fix/问题描述hotfix/紧急修复
  • 提交信息规范<type>: <subject>(如 feat:fix:chore:

9. 🚀 自动化脚本:gitdev.sh

创建一个自动化脚本,一键完成同步 master 并推送当前分支:

#!/bin/bash
echo "🔄 同步 master 分支代码并推送当前分支(heshuangxin)"git checkout heshuangxin
git fetch origin
git rebase origin/mastergit status
echo "✅ 请确认文件无误后,输入 commit 信息:"
read -p "📝 commit message: " msggit add .
git commit -m "$msg"
git push origin heshuangxinecho "🚀 推送完成!"

使用方法

chmod +x gitdev.sh
./gitdev.sh

10. 🐍 防止提交 .pyc 文件

在 Git 提交时忽略 .pyc 文件有几种做法:

1. 在项目里加 .gitignore

在你的项目根目录(.git 所在目录)新建或编辑 .gitignore 文件,加入:

# Python 编译文件
__pycache__/
*.pyc
*.pyo
*.pyd

这样 Git 在后续的提交中会自动忽略 .pyc 文件。

2. 如果之前已经提交过 .pyc 文件

仅仅加 .gitignore 不会把仓库里已有的 .pyc 删除。需要先移除:

# 删除缓存的 .pyc 文件(保留本地文件)
git rm --cached -r *.pyc __pycache__/
git commit -m "Remove pyc files from repository"

以后这些文件就不会再被追踪。

3. 全局忽略(对你所有仓库生效)

如果你不想每个项目都写 .gitignore,可以设置全局规则:

git config --global core.excludesfile ~/.gitignore_global

然后在 ~/.gitignore_global 文件里写上:

*.pyc
__pycache__/

4. IDE 也能帮忙

如果你用 PyCharm / VSCode,通常也有内置的 .gitignore 模板,直接一键生成(比如 PyCharm 右键项目 → "Git → .gitignore")。

✅ 推荐:项目根目录建 .gitignore,保证团队协作时大家都不会提交 .pyc


11. 进阶:钩子、LFS、稀疏检出

  • 本地钩子 .git/hooks/pre-commit(示例)
    npm run lint && npm test || exit 1
    
  • Git LFS(大文件)
    git lfs install
    git lfs track "*.bin"
    git add .gitattributes && git commit -m "chore: lfs"
    
  • 稀疏检出(只要子目录)
    git clone --filter=blob:none --no-checkout git@gitee.com:<owner>/<repo>.git
    cd <repo>
    git sparse-checkout init --cone
    git sparse-checkout set packages/app-web
    git checkout master
    

12. 架构原理图(Mermaid)

flowchart LRsubgraph Local[本地]WD[Working Directory\n工作区]IDX[Index / Staging\n暂存区]REPO[(Local Repository\n本地仓库)]endsubgraph Remote[远端]ORIGIN[(origin / remote)]endWD -->|git add| IDXIDX -->|git commit| REPOREPO -->|git push| ORIGINORIGIN -->|git fetch| REPOREPO -->|git pull = fetch + merge/rebase| WDREPO -->|git switch/checkout| WDclassDef s fill:#fef3c7,stroke:#f59e0b,color:#78350f;class WD,IDX s

可在本仓库打开可视化演示页面:visual-demo/index.html,支持在线操作与场景一键播放。


13. 一页速查表(收藏)

# 身份 & SSH
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
ssh-keygen -t ed25519 -C "you@example.com"
ssh -T git@gitee.com# 新建 / 克隆
git init | git clone git@gitee.com:<owner>/<repo>.git# 日常提交
git status
git add -A
git commit -m "<type>: <subject>"# 推送 / 拉取
git push -u origin <branch>
git pull --rebase# 分支
git switch -c feature/x | git switch feature/x
git merge origin/master | git rebase origin/master# 撤销与恢复
git restore <file> | git revert <sha> | git reflog

f1f8834a4b796618df7a24954bbb84df

2bedc06806abf10a24d9342cbc5ad6d2

4f499d49cef16f909ddeea57572b57a9

到此为止,你已经能在 Gitee 上完成从 0 到 1 的全流程,并掌握团队协作时最常用、也最高效的两种分支同步策略。记住:先 fetch,再与 master 同步(按需选择 merge 或 rebase),最后 push并发起 MR。

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

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

相关文章

金华网站建设方案咨询wordpress非法关键词

CloudCompare是一款功能强大的点云后处理软件,本文讲解CloudCompare中文版下载与安装方法。 文章目录 一、CloudCompare下载地址二、CloudCompare安装教程三、CloudCompare中文设置一、CloudCompare下载地址 官方下载地址:http://www.danielgm.net/cc/release/ 二、CloudComp…

代码随想录算法训练营第七天 |第454题.四数相加II、383. 赎金信、第15题. 三数之和

第454题.四数相加II 思路:因为是统计次数,不用考虑坐标和去重复,那我就可以把value值给想成该target出现的次数。先用两个数组构造哈希表,然后再用一个O(n*n)的双重循环,遍历剩下两个数组,用count统计出现次数。…

2018年公司做网站注意事项达人室内设计网注册

光伏电站 简介 每一篇文章开篇我都会写一个内容简介&#xff0c;一来梳理自己的写作思路&#xff0c;二来方便读者整体了解文章写作意图和脉络。本篇是新能源方面的开篇之作&#xff0c;我选取了介绍光伏电站基础知识&#xff0c;首先我们要了解光伏电站基础分类&#xff0c;然…

佛山做网站那家好佛山网约车驾驶员资格证网上报名

一、本文介绍 本文给大家带来的改进机制是2024-1月的最新成果DCNv4,其是DCNv3的升级版本,效果可以说是在目前的卷积中名列前茅了,同时该卷积具有轻量化的效果!一个DCNv4参数量下降越15Wparameters左右,。它主要通过两个方面对前一版本DCNv3进行改进:首先,它移除了空间聚…

fullpage做的网站php网站开发环境

本文软件由网友 zxc 推荐&#xff1b; 什么是 Cyber​​Chef ? Cyber​​Chef 是一款简单、直观的网络应用程序&#xff0c;用于在网络浏览器中执行各种“网络”操作。这些操作包括 XOR 和 Base64 等简单编码、AES、DES 和 Blowfish 等更复杂的加密、创建二进制和十六进制转储…

app 微网站php 网站部署后乱码

来自&#xff1a;Java and Python君Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很多开源免费的后台控制面板可以给开发者使用&#xff0c;那么有哪些优秀的开源免费的控制面板呢&#xff1f;我在 Github 上…

做社区网站怎么做app制作平台下载

给定两个由英文字母组成的字符串 String 和 Pattern&#xff0c;要求找到 Pattern 在 String 中第一次出现的位置&#xff0c;并将此位置后的 String 的子串输出。如果找不到&#xff0c;则输出“Not Found”。 本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试…

什么网站可以买世界杯阿里云服务器免费试用

在编辑VS工程包含路径和库路径时&#xff0c;有时需要添加第三方包的路径&#xff0c;比如c boost库&#xff0c; 为了协作的方便&#xff0c;不合适直接把本地绝对路径添加入工程设置&#xff0c;此时可以添加自定义路径宏&#xff0c; 然后参与协作的每个开发人员&#xff0c…

如何做产品网站推广餐馆网站怎么做

在一次活动中&#xff0c;监控发现某个微服务中心服务的负载较高&#xff0c;数据库写入速度变慢&#xff0c;排查问题。 主要可从以下几个方面排查 1、生产日志级别 日志级别有 DEBUG、INFO、WARING、ERROR&#xff0c;检查生产环境的日志级别&#xff0c;日志打印多&#x…

前沿速览:TrafficVLM、DeepSeek-Terminus、Qwen3-Omni、蚂蚁百灵、Wan2.2-Animate、Qianfan-VL

前沿速览:TrafficVLM、DeepSeek-Terminus、Qwen3-Omni、蚂蚁百灵、Wan2.2-Animate、Qianfan-VLAI Compass前沿速览:TrafficVLM、DeepSeek-Terminus、Qwen3-Omni、蚂蚁百灵、Wan2.2-Animate、Qianfan-VL AI-Compass 致…

代码随想录算法训练营第七天 | leetcode 454 383 15 18

第454题.四数相加II(二刷) 解题:没有任何的正确思路,完全看题解 代码如下: class Solution { public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) { int res = 0; Map&…

etcd压测造成数据目录过大恢复 - 指南

etcd压测造成数据目录过大恢复 - 指南2025-09-23 21:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…

创新的南昌网站制作怎么做免费的产品图片网站

使得本系统的设计实现具有可使用的价。做出一个实用性好的国漫推荐系统&#xff0c;使其能满足用户的需求&#xff0c;并可以让用户更方便快捷地国漫推荐。这个系统的设计主要包括系统页面的设计和方便用户互动的后端数据库&#xff0c;在开发后需要良好的数据处理能力、友好的…

丰台网站开发联系电话企业建网站费用

概述 稳定性大于一切&#xff0c;因此我们需要有更有效的方式避免线上故障。在发生故障不可避免的假设下&#xff0c;我们需要能够快速修复&#xff0c;减少线上影响。基于以上这些想法&#xff0c;我们提出了 1-5-10 的快恢目标&#xff0c;所谓 1-5-10 的目标就是是要我们对…

中国国际空间站拒绝十个国家网页设计师常逛网站

所以..你好&#xff0c;世界&#xff01; 我们的英语网站终于可以正常使用了&#xff0c;现在每个人都可以下载该平台&#xff0c;并可以以前所未有的速度更快地创建业务应用程序。 在我们决定与国际Java社区共享足够好之前&#xff0c;我们花了六年的永久发展和偶尔的革命&…

职高门户网站建设标准电子商务网站建设与规划教案

是的&#xff0c;微调&#xff08;Fine-Tuning&#xff09;可以被视为一种迁移学习&#xff08;Transfer Learning&#xff09;的形式。迁移学习是一种机器学习方法&#xff0c;其核心思想是利用在一个任务上学到的知识来改进另一个相关任务的性能。微调正是通过在预训练模型的…

网站关键词分布冷色网站

课程背景&#xff1a; 很多政府存在以下问题&#xff1a; 不知道如何理解数据治理标准化建设模式&#xff1f; 不清楚如何有效掌握政府数据治理落地技术&#xff1f; 不清楚如何有效学习标杆政府数据治理案例&#xff1f; 学员收获: 深入理解数据治理标准化建设模式。…

无限空间网站做网站推广收入好吗

写在前面 本文内容 在VsCode上开发PCL、Open3D相关代码&#xff0c;代码自动补全 Open3D、PCL的安装使用见各个版本的Open3D、PCL的编译、使用教程 平台/环境 windows11(windows10): visual studio 2022&#xff1b;cmake 3.22; VsCode 通过cmake构建项目&#xff1b; 转载请…

微网站搜狗引擎网站收录

如果你经常使用Canvas的draw***方法去绘制一些图像图形&#xff0c;绘制的坐标是从Canvas左上角开始计算的&#xff0c;如果想要把一个图像放到某个位置&#xff0c;直接drawBitmap传递图片左上角的坐标就行了。那drawText就不一样&#xff0c;如果你传递进去字符串&#xff0c…

springboot与vue中webSocket前后端连接障碍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …