前言:为什么你的代码总是"失踪"?

"啊!我的代码呢?"——这可能是每个程序员都曾发出过的灵魂呐喊。还记得上周我熬夜写的300行JavaScript,第二天醒来发现被自己手贱覆盖了,那一刻我深刻理解了什么叫"痛彻心扉"。

别担心,今天我要介绍的Git & GitHub,就是专治各种代码"失踪"的神器!它不仅能让你的代码永远安全,还能让你和小伙伴们愉快地"多人运动"

一、Git:代码的"时光机"

1.1 什么是版本控制?

想象一下,你正在写一本小说:

  • 初稿:主角叫张三,是个程序员

  • 第二版:不行,程序员太普通了,改成超级英雄!

  • 第三版:超级英雄太俗,还是改成会编程的猫吧...

没有版本控制,你只能在一个文件上反复修改,最后可能连自己最初的想法都找不回来了。Git就是帮你把这些"版本快照"都保存下来的神器!

1.2 Git的安装与配置

安装Git(以Windows为例):

  1. 官网下载:Git

  2. 一路"Next",安装完成后在命令行输入:

git --version
# 看到版本号说明安装成功,比如:git version 2.33.0.windows.2

基础配置(告诉Git你是谁):

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 查看配置
git config --list

1.3 Git核心命令实战

初始化仓库
mkdir my-project  # 创建项目文件夹
cd my-project     # 进入文件夹
git init          # 初始化Git仓库
# 你会看到提示:Initialized empty Git repository in .../.git/
基础工作流
# 创建一个文件
echo "console.log('Hello Git');" > index.js# 查看状态
git status
# 会提示有未跟踪的文件index.js# 添加到暂存区
git add index.js# 提交到本地仓库
git commit -m "feat: 添加初始JavaScript文件"
# -m后面是提交信息,要写得清晰明了
查看历史记录
git log
# 你会看到类似这样的输出:
# commit 7a3b9c2...(哈希值)
# Author: 你的名字 <你的邮箱>
# Date:   Wed Sep 1 10:00:00 2023 +0800
#    feat: 添加初始JavaScript文件

二、分支管理:平行宇宙的魔法

2.1 为什么需要分支?

想象你在开发一个网站:

  • 主分支(master/main):线上稳定运行的版本

  • 开发分支(dev):日常开发用

  • 功能分支(feature/login):开发登录功能

  • 修复分支(hotfix/bug):紧急修复线上bug

这样就不会互相干扰,就像在平行宇宙中开发一样!

2.2 分支操作实战

# 查看当前分支
git branch
# 默认只有master/main分支,前面带*号# 创建新分支
git branch dev# 切换分支
git checkout dev
# 或者更简单的方式(创建并切换)
git checkout -b feature/login# 在新分支上做些修改
echo "// 登录功能代码" >> index.js
git add .
git commit -m "feat: 添加登录功能"# 切换回主分支
git checkout main# 合并分支
git merge feature/login

2.3 当分支"打架"了:解决冲突

有时候不同分支修改了同一处代码,合并时就会冲突:

<<<<<<< HEAD
console.log('Hello from main branch');
=======
console.log('Hello from feature branch');
>>>>>>> feature/login

你需要手动选择保留哪部分(或都保留),然后:
 

git add .
git commit -m "fix: 解决合并冲突"

三、GitHub:代码的"社交网络"

3.1 本地与远程的"异地恋"

# 在GitHub上创建新仓库(不要勾选README等初始化选项)
# 然后关联本地仓库
git remote add origin https://github.com/你的用户名/仓库名.git# 第一次推送
git push -u origin main
# 之后可以简写为 git push

3.2 团队协作流程

  1. 克隆仓库

git clone https://github.com/团队/项目.git

2.获取最新代码

git pull origin main

3.推送你的修改

git push origin your-branch

4.发起Pull Request(PR)

  • 在GitHub界面上操作

  • 等待代码审查(Code Review)

  • 通过后合并到主分支

3.3 GitHub实用技巧

Issue跟踪:用来记录bug、讨论功能

Wiki:项目文档

Actions:自动化CI/CD(高级功能)

Pages:免费托管静态网站(适合前端项目展示)

四、Git高级技巧

4.1 后悔药系列

# 撤销工作区修改
git checkout -- 文件名# 撤销暂存区修改
git reset HEAD 文件名# 回退到某个commit
git reset --hard commit哈希值# 不小心reset错了?别慌!
git reflog  # 查看所有操作记录
git reset --hard 哈希值  # 回到未来

4.2 .gitignore:让Git"眼不见为净"

在项目根目录创建.gitignore文件,内容示例:

# 忽略node_modules
node_modules/

# 忽略IDE配置文件
.idea/
.vscode/

# 忽略系统文件
.DS_Store

# 忽略日志文件
*.log

五、Git最佳实践

  1. 提交信息规范

    • feat: 新功能

    • fix: bug修复

    • docs: 文档变更

    • style: 代码格式化

    • refactor: 代码重构

    • test: 测试相关

    • chore: 构建过程或辅助工具的变动

  2. 分支命名规范

    • feature/功能名

    • bugfix/问题描述

    • hotfix/紧急修复描述

  3. 提交频率

    • 小步提交,每个提交只做一件事

    • 不要一次性提交大量改动

六、常见问题Q&A

Q: 为什么我的git push总是被拒绝?
A: 可能是因为远程有更新你没拉取,先执行git pull --rebase再push

Q: 如何彻底删除Git历史中的大文件?
A: 使用git filter-branch或BFG Repo-Cleaner工具

Q: Git和SVN有什么区别?
A: Git是分布式版本控制,每个开发者都有完整仓库;SVN是集中式,必须联网工作

七、实战案例:用GitHub协作开发TodoList

  1. 创建GitHub仓库

  2. 克隆到本地

  3. 创建dev分支

  4. 开发功能并提交

  5. 发起PR

  6. 代码审查

  7. 合并到main分支

八、Git冷知识

  • Git的创造者是Linus Torvalds,也是Linux之父

  • GitHub被微软以75亿美元收购

  • Git的logo是一只章鱼猫(Octocat)

  • 全球最大的开源社区GitHub有超过1亿个仓库

结语:从"Git小白"到"版本控制大师"

记住,Git就像学自行车——刚开始可能会摔几次,但一旦掌握,就能自由驰骋!现在就去GitHub上找一个感兴趣的开源项目,提交你的第一个PR吧!

思考题

  1. 如果两个开发者同时修改了同一个文件的同一行代码,Git会如何处理?

  2. 如何用Git统计项目的代码行数?

  3. Git的"rebase"和"merge"有什么区别?分别在什么场景下使用?

欢迎在评论区分享你的Git使用心得或遇到的奇葩问题

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

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

相关文章

第 30 场 蓝桥·算法入门赛 题解

1. 零食争议【算法赛】 签到题&#xff1a;1-7奇数相加 #include <bits/stdc.h> using namespace std; int main() {// 请在此输入您的代码cout<<1357;return 0; } 2. 数字炸弹【算法赛】 把n个人看为前n-1和后n-1 &#xff0c; 方便找到是第几段的第几个数 #in…

闲庭信步使用图像验证平台加速FPGA的开发:第二十四课——图像直方图均衡化的FPGA实现

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

LabVIEW 2025安装包| 免费免激活版下载| 附图文详细安装教程

[软件名称]&#xff1a;LabVIEW 2025 [软件大小]&#xff1a;13 G [系统要求]&#xff1a;支持Win7及更高版本 [下载通道]:夸克网盘 [下载链接]: https://pan.quark.cn/s/7e9527cc06a3 &#xff08;建议用手机保存到网盘后&#xff0c;再用电脑下载&#xff09; 更多免费软件&a…

如何实现泵站的无人值守:御控智慧水务平台

在城乡供水、农田灌溉、工业循环水等场景中&#xff0c;泵站作为核心动力设施&#xff0c;其运行效率直接影响水资源调配的稳定性。然而&#xff0c;传统泵站管理长期面临三大痛点&#xff1a;人力成本高昂&#xff1a;偏远地区泵站需24小时值守&#xff0c;单站年均人力成本超…

深度学习篇---车道线循迹

要实现基于深度学习的双车道线&#xff08;黄色车道线&#xff09;循迹&#xff08;通过预测四个轮子的转速实现自主控制&#xff09;&#xff0c;需要从数据采集、模型设计、训练策略、环境适应等多维度系统优化。以下是具体方案及需要注意的关键事项&#xff0c;旨在提升精准…

JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息

JavaScript中&#xff0c;‌异常&#xff08;Exception&#xff09;和错误&#xff08;Error&#xff09; JavaScript 是一种解释型语言&#xff0c;通常在浏览器中通过JavaScript引擎执行。最著名的两个引擎是&#xff1a;SpiderMonkey&#xff08;由 Mozilla Firefox 使用&a…

SpringMVC快速入门之启动配置流程

SpringMVC快速入门之启动配置流程一、SpringMVC启动的核心流程二、环境准备与依赖配置2.1 开发环境2.2 Maven依赖配置三、初始化Servlet容器&#xff1a;WebApplicationInitializer3.1 实现WebApplicationInitializer3.2 配置编码过滤器&#xff08;解决中文乱码&#xff09;四…

ArcGIS水文及空间分析与SWMM融合协同在城市排水防涝领域中的应用

随着计算机的广泛应用和各类模型软件的发展&#xff0c;将排水系统模型作为城市洪灾评价与防治的技术手段已经成为防洪防灾的重要技术途径。将创新性融合地理信息系统&#xff08;GIS&#xff09;的空间分析能力与暴雨雨水管理模型&#xff08;SWMM&#xff09;的水动力计算优势…

PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC

PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC 文章目录PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC前言1. 确保固件版本为2.192. 刷系统到U盘3. 启动U盘系统4. U盘系统写入EMMC5. 关机拨U盘6. 重新上电环境&#xff1a; 系统&#xff1a;Armbi…

《计算机网络基础知识全解析:从协议模型到通信实践》

《计算机网络基础知识全解析&#xff1a;从协议模型到通信实践》 在数字化时代&#xff0c;计算机网络是信息传递的基石&#xff0c;从日常浏览网页到企业数据交互&#xff0c;都离不开网络协议的规范与支撑。本文将系统梳理计算机网络的核心知识&#xff0c;从通信模型到具体协…

【补题】Codeforces Global Round 26 E. Shuffle

题意&#xff1a;给出一棵树&#xff0c;按照以下方式操作 对于当前的所有任意子树&#xff0c;选出任何一个点从中删除&#xff0c;然后作为新子树的根插入到新的树中&#xff0c;以此递归往复&#xff0c;直到原来的树中节点全部进入新树&#xff0c;问新树最多有多少个叶子节…

金仓数据库风云

O 记我用了这么多年&#xff0c;我最有发言权&#xff0c;我可不敢替&#xff0c;你们谁能搞定&#xff0c;谁上。” 老邓在会上&#xff0c;狠狠甩了一句气话。老邓&#xff08;邓铭&#xff09;&#xff0c;某大型期货交易所信息化主管&#xff0c;数据库老司机。 作为圈里最…

阿里云宝塔Linux面板相关操作记录

1、清空nginx缓存使用Nginx时&#xff0c;静态图片文件会出现缓存&#xff0c;所以需要清空缓存&#xff0c;方法如下&#xff1a;sudo rm -rf /www/server/nginx/proxy_cache_dir/*2、Windows启动spring boot jar脚本echo off setlocal enabledelayedexpansion:: 配置项目名 s…

Kotlin伴生对象

你已经知道如何为类创建单例对象&#xff08;singleton&#xff09;。不过&#xff0c;在很多情况下&#xff0c;你只需要为某个类维护一个单例&#xff0c;这时候使用类的完整名字会显得冗长。比如&#xff0c;你可能只需要存储一个公共的属性。这种情况下&#xff0c;可以用 …

4G车载录像机的作用详解:提升行车安全与智能管理的核心技术

1. 引言随着物流运输、公共交通、特种车辆等行业对安全与管理需求的提升&#xff0c;4G车载录像机已成为现代车辆智能化管理的重要组成部分。它不仅具备传统行车记录仪的录像功能&#xff0c;还结合4G无线通信、AI智能分析、GPS定位、云存储等技术&#xff0c;实现远程监控、实…

技术与情感交织的一生 (十)

目录 笑傲江湖 上 恨 嫌隙 挣扎 救难 论道 取巧 联手 入魔 决裂 治伤 聚气 倾心 笑傲江湖 上 恨 身边的许多朋友都是金庸武侠迷&#xff0c;我也是其中之一。有人说&#xff0c;我的技术像 “任我行” &#xff0c;“吸星大法” 学到最后显得不伦不类&#xf…

架构进阶——解读集团IT管控治理体系总体规划【附全文阅读】

集团IT管控治理体系正步入高质量发展阶段&#xff0c;旨在重塑信息化管理价值&#xff0c;解决集团化管理的核心挑战。首要问题是纵向与横向的协同管控&#xff0c;需明确各层级在集团战略决策中的角色与责任&#xff0c;促进跨部门、跨子公司的高效协同。高管激励机制与人才梯…

亚马逊自养号测评实战指南:从环境搭建到安全提排名

在亚马逊平台上&#xff0c;自养号测评系统的成败差异主要源于技术合规性、操作精细度和风控策略的差异。以下是关键因素的分析&#xff1a;&#x1f512; 一、环境隔离与伪装技术底层环境稳定性成功案例&#xff1a;采用独立服务器硬件参数伪装&#xff08;如唯一MAC地址、IME…

CSS中的transform

在 CSS 中&#xff0c;transform 是用于用于用于对元素进行几何变换的属性&#xff0c;可实现旋转、缩放、平移、倾斜等效果&#xff0c;且不会影响其他元素的布局&#xff08;不会触发重排&#xff09;。以下是其核心用法和特性&#xff1a; 1. 基本语法 element {transform: …

MyBatis拦截器插件:实现敏感数据字段加解密

文章目录一、写在前面二、编码实现1、注解2、拦截器插件3、配置插件4、实体类5、测试三、扩展1、优化点一、写在前面 日常开发中&#xff0c;经常有一些敏感数据&#xff0c;直接写入数据库的话&#xff0c;很容易泄露。 本文基于mybatis拦截器插件&#xff0c;实现敏感数据的…