跟 Git 打交道的正确姿势

为什么要学 Git?

你肯定遇到过这种事:写代码写着写着,改乱了,想回到昨天那个能跑的样子,结果发现已经回不去了。或者跟同事一起改同一个文件,他改他的,你改你的,最后合并的时候乱七八糟。

Git 就是为了解决这些问题而生的。它帮你记住每个版本 ,也帮团队合并大家的修改

Git 到底"分布式"在哪?

很多人以为"分布式"就是代码分散在 GitHub、Gitee 多个网站上,其实不是。

真正的意思是:每个人电脑上都有一个完整的代码仓库,包含所有历史版本。你可以断网提交、断网看历史,完全不影响。等有网了再同步到远程仓库。

那 GitHub/Gitee/GitLab 是啥?

它们是远程仓库的托管服务,相当于一个大家公认的"中央交换站",方便团队同步代码。Git 本身不依赖它们------你完全可以用 U 盘跟同事互相拷贝仓库来协作。

从一个空文件夹开始

假设你有个文件夹叫 learn_git,里面啥也没有。想让 Git 接管它:

bash

bash 复制代码
cd learn_git
git init

执行完,会多出一个 .git 隐藏文件夹。不要动它,里面存着所有的版本信息。你只要知道它在那,剩下的用 Git 命令操作就行。

第一个文件的版本

创建一个 readme.md,写点内容。此时 Git 知道这个文件存在吗?

git status 看一下------这是最常用的命令,任何操作前先敲它,准没错。

你会看到 readme.md 是红色的,标记为 untracked(未被跟踪)。意思是 Git 看到了这个文件,但还没把它纳入版本管理。

bash

csharp 复制代码
git add readme.md   # 添加到暂存区
git commit -m "第一次提交,添加 readme"

add 就像把文件放进"待提交区"(暂存区),commit 才是真正拍一张快照,存进 .git 里。

执行完 commit,会看到类似这样的提示:

text

scss 复制代码
1 file changed, 2 insertions(+)

表示这次版本新增了 2 行内容。

让 Git 知道你是谁

每次提交都会记录是谁干的,所以要先设置用户名和邮箱(随便写,但最好用真实的):

bash

arduino 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

只要设置一次,以后的提交都会自动带上这个信息。

为什么要有一个远程仓库?

本地有版本控制已经很好了,但万一硬盘坏了呢?所以还是得备份到远程。

另外,团队协作时,大家需要约定一个地方来同步代码。GitHub、Gitee 就是干这个的。

添加远程仓库:

bash

csharp 复制代码
git remote add origin https://github.com/你的用户名/仓库名.git
git push -u origin master

origin 是远程仓库的默认名字(可以改,但没人改)。master(或 main)是分支名。-u 是为了关联起来,以后直接 git push 就行。

多人协作最头疼的:冲突

假设你和同事同时改了同一个文件的同一行。他先提交到远程,你后提交,就会冲突。

流程大致这样:

  1. git pull 拉取最新代码,Git 会告诉你:有冲突!
  2. 打开那个文件,会看到类似下面这种标记:

text

markdown 复制代码
<<<<<<< HEAD
你写的内容
=======
同事写的内容
>>>>>>> branch-name
  1. 你和同事商量保留哪个(或者合并成新的内容),删掉 <<<<<<<=======>>>>>>> 这些标记。
  2. 保存文件,然后:

bash

sql 复制代码
git add 那个文件
git commit -m "解决冲突"
git push

冲突不可怕,解决一次就明白了。

一些自然的小建议

  • 频繁提交:完成一小块功能就提交,别攒一大坨。
  • 提交信息写清楚git commit -m "修复登录按钮点击无反应"git commit -m "fix bug" 好一万倍。
  • push 前先 pull:养成习惯,减少冲突。
  • 别怕 .git 文件夹:你不知道的东西不乱动就行,Git 命令是安全的。

最后

Git 不难,刚接触会觉得命令有点多,但常用的就那么几个:initstatusaddcommitpushpullclone。多敲几次就条件反射了。

从今天开始,所有代码都用 Git 管理吧。哪怕只有一个人写,也能收获"随时穿越回昨天"的安全感。

相关推荐
一颗小青松4 小时前
css 文字区域根据图片形状显示,根据文字设置背景图
前端·css
idcu4 小时前
深入 Lyt.js 路由系统:L6 生态系统层的核心
前端·typescript
idcu4 小时前
用 Lyt.js 构建 Todo 应用:完整教程
前端·typescript
七夜zippoe4 小时前
DolphinDB时间序列引擎:实时聚合计算
服务器·前端·时间序列·dolphindb·实时聚合
佳木逢钺4 小时前
pnpm 命令功能清单
前端
m0_738120724 小时前
渗透测试基础知识——从零认识JWT(JSON Web Token)身份令牌
服务器·前端·安全·web安全·网络安全·json
放下华子我只抽RuiKe54 小时前
React 从入门到生产(六):路由与导航
前端·人工智能·深度学习·react.js·前端框架·html·claude code
Sylus_sui4 小时前
实现:每行固定 5 个、自动换行、最后一行左对齐、数量不固定
前端·javascript·css
文滨4 小时前
10分钟搞定!Mac 配置 GitHub SSH 完全指南(小白也能看懂)
前端·macos·ssh·github