① 新手必读:Git是什么?为什么程序员都要学它?

想象一下,你正在写一份重要的毕业论文,改了一版又一版,最后电脑里存了十几个文件:「论文_初稿.doc」「论文_修改1.doc」「论文_最终版.doc」「论文_最终版2.doc」「论文_打死不改版.doc」……是不是很熟悉?

Git 就是来解决这个问题的。它是一个版本控制系统,能帮你:

  • 记录每一次修改:谁、在什么时候、改了什么内容,一目了然
  • 随时回到历史版本:改错了?没关系,一键回退到三天前的版本
  • 多人协作不打架:你和同事同时改一个文件,Git 能自动合并,冲突了也会提示你
  • 云端备份:代码存在 GitHub/Gitee 上,电脑坏了也不怕

对于编程新手来说,Git 是必须掌握的第一项工具,就像学开车要先学会挂挡一样。

② 环境搭建:Git安装与初始配置(超详细图文版)

Windows 系统安装

  1. 下载安装包

    • 打开浏览器,访问 Git 官网:https://git-scm.com/
    • 点击右侧大大的「Downloads for Windows」按钮
    • 下载完成后,双击运行安装程序
  2. 安装过程(一路默认即可)

    • 点击「Next」
    • 选择安装路径(默认即可)
    • 选择组件(默认即可)
    • 选择默认编辑器(建议选「Notepad++」或「Visual Studio Code」)
    • 调整 PATH 环境(选「Git from the command line and also from 3rd-party software」)
    • 选择 HTTPS 传输后端(选「Use the OpenSSL library」)
    • 配置行结束符转换(选「Checkout Windows-style, commit Unix-style line endings」)
    • 选择终端模拟器(选「Use MinTTY」)
    • 其他选项保持默认,一路「Next」直到「Install」
    • 安装完成后,取消勾选「View Release Notes」,点击「Finish」
  3. 验证安装

    • 在桌面按 Win + R,输入 cmd 回车
    • 在命令行中输入:git --version
    • 如果显示类似 git version 2.40.0.windows.1 的信息,说明安装成功!

Mac 系统安装

  1. 方法一:使用 Homebrew(推荐)

    • 打开终端(Terminal)
    • 输入命令:brew install git
    • 等待安装完成
  2. 方法二:下载安装包

    • 访问 https://git-scm.com/download/mac
    • 下载对应芯片版本(Intel 或 Apple Silicon)
    • 双击安装即可
  3. 验证安装

    • 在终端中输入:git --version
    • 看到版本号即表示安装成功

Linux 系统安装

# Ubuntu/Debian
sudo apt update
sudo apt install git -y

# CentOS/RHEL/Fedora
sudo yum install git -y

初次配置(所有系统都要做)

安装完成后,打开命令行(终端),依次输入以下命令配置你的身份信息:

# 设置用户名(用你的 GitHub/Gitee 用户名)
git config --global user.name "你的名字"

# 设置邮箱(用你注册 GitHub/Gitee 的邮箱)
git config --global user.email "你的邮箱@example.com"

# 设置默认分支名为 main(新项目推荐)
git config --global init.defaultBranch main

配置完成后,可以用以下命令查看配置是否生效:

git config --global --list

③ 代码上传:把本地项目推送到远程仓库

第一步:在 GitHub/Gitee 上创建仓库

  1. 登录 GitHub(https://github.com)或 Gitee(https://gitee.com)
  2. 点击右上角的「+」号,选择「New repository」
  3. 填写仓库名称(如 my-first-project
  4. 选择公开(Public)或私有(Private)
  5. 不要勾选「Initialize this repository with a README」
  6. 点击「Create repository」

第二步:在本地初始化 Git 仓库

# 进入你的项目文件夹
cd /path/to/your/project

# 初始化 Git 仓库
git init

# 添加所有文件到暂存区
git add .

# 提交到本地仓库
git commit -m "第一次提交:初始化项目"

第三步:关联远程仓库并推送

# 关联远程仓库(把下面的地址换成你自己的)
git remote add origin https://github.com/你的用户名/my-first-project.git

# 推送到远程仓库
git push -u origin main

新手注意:第一次推送时,可能会弹出登录窗口,输入你的 GitHub/Gitee 账号密码即可。如果提示密码验证失败,需要改用 Personal Access Token(个人访问令牌),具体方法见文末的「新手注意事项」。

④ 代码下载:从远程仓库克隆项目到本地

克隆别人的项目

# 克隆到当前目录
git clone https://github.com/用户名/仓库名.git

# 克隆到指定文件夹
git clone https://github.com/用户名/仓库名.git 我的文件夹

拉取自己的项目

如果你换了电脑,或者想在其他地方继续工作:

# 克隆自己的仓库
git clone https://github.com/你的用户名/my-first-project.git

# 进入项目目录
cd my-first-project

⑤ 代码更新:日常开发流程

场景一:修改文件后提交

# 1. 查看当前状态(看看改了哪些文件)
git status

# 2. 添加修改的文件到暂存区
git add 文件名.py          # 添加单个文件
git add .                 # 添加所有修改的文件

# 3. 提交到本地仓库
git commit -m "修复了登录功能的bug"

# 4. 推送到远程仓库
git push

场景二:拉取远程最新代码

在开始工作前,或者提交前,先拉取远程的最新代码:

# 拉取远程最新代码并自动合并
git pull

场景三:查看提交历史

# 查看提交历史(简洁版)
git log --oneline

# 查看提交历史(详细版)
git log

# 查看某个文件的修改历史
git log --oneline 文件名.py

⑥ 代码备份:保护你的劳动成果

方法一:推送到远程仓库(最推荐)

# 每天工作结束前执行
git add .
git commit -m "日常备份:2024-01-15"
git push

方法二:创建标签(标记重要版本)

# 创建标签
git tag v1.0.0

# 推送标签到远程
git push origin v1.0.0

# 查看所有标签
git tag

方法三:创建分支(实验性修改)

# 创建并切换到新分支
git checkout -b 实验性功能

# 在新分支上修改代码
# ... 修改文件 ...

# 提交修改
git add .
git commit -m "实验性功能:添加了AI推荐算法"

# 切换回主分支
git checkout main

# 合并实验分支到主分支
git merge 实验性功能

⑦ 新手注意事项(必看!)

1. 不要提交敏感信息

  • ❌ 不要把密码、API密钥、私钥提交到Git
  • ✅ 使用 .gitignore 文件忽略敏感文件
  • 示例 .gitignore 文件内容:
# 忽略配置文件
config.json
.env

# 忽略编译产物
__pycache__/
*.pyc
node_modules/

# 忽略系统文件
.DS_Store
Thumbs.db

2. 提交信息要写清楚

  • git commit -m "修改"(太模糊)
  • git commit -m "修复:用户登录时密码验证失败的bug"
  • git commit -m "新增:文章详情页的点赞功能"

3. 养成先拉后推的习惯

# 正确的提交顺序
git pull          # 先拉取最新代码
git add .         # 再添加修改
git commit -m "xxx"  # 提交
git push          # 最后推送

4. 解决 Personal Access Token 问题

从2021年起,GitHub不再支持密码直接推送,需要使用Token:

  1. 登录GitHub,点击右上角头像 → Settings
  2. 左侧菜单选择「Developer settings」
  3. 选择「Personal access tokens」→「Tokens (classic)」
  4. 点击「Generate new token」
  5. 勾选 repo 权限
  6. 生成后复制Token(关掉页面就看不到了)
  7. 推送时,密码框粘贴这个Token即可

5. 常用命令速查表

命令 作用
git init 初始化本地仓库
git clone <地址> 克隆远程仓库
git status 查看当前状态
git add <文件> 添加文件到暂存区
git commit -m "信息" 提交到本地仓库
git push 推送到远程仓库
git pull 拉取远程最新代码
git log --oneline 查看提交历史
git checkout -b <分支名> 创建并切换分支
git branch 查看所有分支
git merge <分支名> 合并分支

6. 遇到冲突不要慌

git pull 提示冲突时:

  1. 打开冲突文件,你会看到类似这样的标记:
<<<<<<< HEAD
这是你本地的修改
=======
这是远程的修改
>>>>>>> origin/main
  1. 手动选择保留哪个版本,或者合并两者
  2. 删除 <<<<<<<=======>>>>>>> 这些标记
  3. 保存文件,然后:
git add 冲突文件
git commit -m "解决合并冲突"
git push

7. Git 日常开发标准流程图

下面是日常开发从修改代码到推送的完整流程,包含冲突处理分支:

无冲突

有冲突

开始开发

git pull
拉取最新代码

拉取成功?

修改代码

解决网络/权限问题
重新 git pull

git add .
添加修改到暂存区

git commit -m '描述信息'
提交到本地仓库

git pull
再次拉取(检查远程更新)

有冲突?

git push
推送到远程仓库

打开冲突文件
手动解决冲突

删除冲突标记
保留正确代码

git add 冲突文件

git commit -m '解决合并冲突'

推送成功 ✅

流程说明:

  • 先拉后改:每次开发前先 git pull,确保基于最新代码工作
  • 小步提交:每次修改后及时 git add + git commit,提交信息写清楚
  • 推前再拉:推送前再 git pull 一次,避免远程有新提交导致推送失败
  • 冲突不可怕:遇到冲突时按标记手动合并,解决后重新提交推送即可

⑧ 常见问题与排查

1. git push 提示「Permission denied」

这是新手最常遇到的推送失败问题,通常有以下几种原因:

原因一:SSH 密钥未配置或未添加

如果你使用 SSH 协议克隆仓库,但本地没有生成 SSH 公钥,或者公钥没有添加到 GitHub/Gitee 账户中。

解决方法:

# 1. 检查是否已有 SSH 密钥
ls -al ~/.ssh

# 2. 如果没有,生成新的 SSH 密钥(一路回车即可)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 3. 查看并复制公钥
cat ~/.ssh/id_ed25519.pub

然后将复制的内容添加到 GitHub → Settings → SSH and GPG keys → New SSH key。

原因二:使用 HTTPS 但密码/Token 错误

从 2021 年起 GitHub 不再支持密码直接推送,必须使用 Personal Access Token。

解决方法:

  • 如果之前用的是密码,请改用 Token(生成方法见上文「④ 解决 Personal Access Token 问题」)
  • 或者改用 SSH 协议:git remote set-url origin git@github.com:用户名/仓库名.git

原因三:没有推送权限

如果你尝试推送到别人的仓库,或者仓库设置了分支保护规则。

解决方法:

  • 确认你是否有该仓库的写入权限
  • 如果是别人的项目,先 Fork 到自己账户,再推送到自己的 Fork
  • 如果是受保护分支(如 main),先推送到其他分支,再提 Pull Request

2. git pull 提示「Your local changes would be overwritten」

当你本地有未提交的修改,而远程仓库也有更新时,git pull 会拒绝执行,提示:

error: Your local changes to the following files would be overwritten by merge

推荐解决方法:使用 git stash 暂存本地修改

# 1. 暂存当前本地修改(工作区会恢复干净)
git stash

# 2. 拉取远程最新代码
git pull

# 3. 恢复之前暂存的修改
git stash pop

如果恢复时出现冲突,手动解决冲突后提交即可。

其他可选方案:

  • 如果本地修改不重要,直接丢弃:git checkout -- <文件名>(⚠️ 不可恢复)
  • 如果本地修改已完成,先提交再拉取:git add .git commit -m "xxx"git pull

3. 误提交了敏感信息,如何从 Git 历史中彻底移除

⚠️ 重要警告:以下操作会重写 Git 历史,影响所有协作者。如果仓库有其他人使用,请务必提前通知并协调好操作时间。操作后所有协作者需要重新克隆仓库。

方法一:使用 git filter-branch(Git 内置)

# 从所有分支和历史中移除包含敏感信息的文件
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch 敏感文件路径" \
  --prune-empty --tag-name-filter cat -- --all

方法二:使用 BFG Repo-Cleaner(更简单快速)

BFG 是专门为清理 Git 历史设计的工具,比 filter-branch 快 10-100 倍。

# 1. 下载 BFG(需要 Java 环境)
# 2. 将敏感文件内容替换为 ***REMOVED***
java -jar bfg.jar --replace-text passwords.txt my-repo.git

# 或者直接删除特定文件
java -jar bfg.jar --delete-files config.json my-repo.git

操作后的收尾工作:

# 强制推送到远程(会覆盖历史,谨慎操作!)
git push origin --force --all

# 通知所有协作者重新克隆仓库
# 旧仓库需要删除后重新 clone

预防措施(比事后清理更重要):

  • 使用 .gitignore 提前忽略敏感文件
  • 提交前用 git status 检查即将提交的文件
  • 考虑使用 git-secrets 等工具自动扫描敏感信息

更多推荐