Git 基础操作学习指南

Git 基础操作学习指南

什么是 Git?

Git 是一个分布式版本控制系统,用于跟踪文件的变更、协调多人协作开发。它是目前世界上最流行的版本控制系统。

核心概念:

  • 版本控制:记录文件的历史变化,随时回溯到任意版本
  • 分布式:每个开发者都有完整的代码仓库副本
  • 协作:多人可以同时开发,合并各自的工作

一、Git 安装和初始配置

1.1 安装 Git

Windows:

验证安装:

bash 复制代码
git --version

1.2 初始配置

安装后需要配置用户信息(重要!):

bash 复制代码
# 配置用户名
git config --global user.name "你的名字"

# 配置邮箱
git config --global user.email "your.email@example.com"

# 查看配置
git config --list

提示: --global 表示全局配置,对所有仓库生效。如果只对当前仓库配置,去掉 --global 即可。


二、Git 基础概念

2.1 工作区、暂存区、本地仓库

复制代码
工作区 (Working Directory)
    ↓ [git add]
暂存区 (Staging Area / Index)
    ↓ [git commit]
本地仓库 (Local Repository)
    ↓ [git push]
远程仓库 (Remote Repository)

说明:

  • 工作区:你实际编辑文件的地方
  • 暂存区:准备提交的文件列表
  • 本地仓库 :存储版本历史的地方(.git 目录)
  • 远程仓库:托管在服务器上的仓库(如 GitHub、GitLab)

2.2 Git 状态

bash 复制代码
# 查看当前状态
git status

常见状态:

  • Untracked:新文件,未被 Git 跟踪
  • Modified:已跟踪文件被修改
  • Staged:已添加到暂存区,准备提交
  • Unmerged:合并冲突

三、基础操作

3.1 初始化仓库

bash 复制代码
# 在当前目录创建新仓库
git init

# 查看是否初始化成功(会显示 .git 目录)
dir

3.2 克隆远程仓库

bash 复制代码
# 克隆远程仓库到本地
git clone <仓库URL>

# 示例
git clone https://github.com/username/repo.git

# 克隆到指定目录
git clone https://github.com/username/repo.git my-project

常见仓库托管平台:


四、文件管理

4.1 添加文件到暂存区

bash 复制代码
# 添加指定文件
git add 文件名.cs

# 添加所有修改的文件
git add .

# 添加所有文件(包括新文件)
git add -A

# 添加交互模式(可以选择性添加)
git add -i

4.2 查看文件差异

bash 复制代码
# 查看工作区和暂存区的差异
git diff

# 查看暂存区和上次提交的差异
git diff --staged
# 或
git diff --cached

# 查看工作区和上次提交的差异
git diff HEAD

4.3 删除文件

bash 复制代码
# 删除文件(同时从工作区和暂存区删除)
git rm 文件名.cs

# 删除暂存区的文件,但保留工作区文件
git rm --cached 文件名.cs

4.4 移动/重命名文件

bash 复制代码
# 重命名文件
git mv 旧文件名.cs 新文件名.cs

五、提交操作

5.1 提交更改

bash 复制代码
# 提交暂存区的更改
git commit

# 提交并添加提交信息
git commit -m "提交说明"

# 提交所有已跟踪文件的更改(跳过 git add)
git commit -am "提交说明"

提交信息规范(推荐):

复制代码
<类型>: <简短描述>

<详细描述(可选)>

类型可选:
- feat: 新功能
- fix: 修复 bug
- docs: 文档更新
- style: 代码格式调整
- refactor: 重构
- test: 测试相关
- chore: 构建/工具链相关

示例:
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复轴运动超时问题"

5.2 修改最后一次提交

bash 复制代码
# 修改提交信息
git commit --amend

# 将新修改加入最后一次提交
git add 新文件.cs
git commit --amend --no-edit

注意: --amend 会修改历史,已推送的提交不要使用。


六、查看历史

6.1 查看提交历史

bash 复制代码
# 查看提交历史
git log

# 简洁显示
git log --oneline

# 显示图形化分支
git log --graph --oneline

# 显示最近的 N 次提交
git log -3

# 查看指定文件的提交历史
git log 文件名.cs

6.2 查看提交详情

bash 复制代码
# 查看某次提交的详细信息
git show <提交ID>

# 示例
git show a1b2c3d

6.3 查看操作记录

bash 复制代码
# 查看所有操作记录(包括已删除的提交)
git reflog

七、远程仓库操作

7.1 添加远程仓库

bash 复制代码
# 添加远程仓库
git remote add origin <仓库URL>

# 示例
git remote add origin https://github.com/username/repo.git

7.2 查看远程仓库

bash 复制代码
# 查看远程仓库列表
git remote

# 查看远程仓库详细信息
git remote -v

7.3 推送到远程仓库

bash 复制代码
# 推送当前分支到远程仓库
git push

# 推送指定分支
git push origin main

# 首次推送并设置上游分支
git push -u origin main

# 强制推送(谨慎使用!)
git push -f

重要提示:

  • -u--set-upstream:设置上游分支,之后可以直接用 git push
  • -f--force:强制推送,会覆盖远程历史,非常危险!

7.4 从远程仓库拉取

bash 复制代码
# 拉取远程更新并合并
git pull

# 拉取但不合并
git fetch

# 拉取指定分支
git pull origin main

pull vs fetch:

  • git pull = git fetch + git merge
  • git fetch 只获取更新,不合并,更安全

八、分支管理

8.1 分支概念

分支允许你并行开发多个功能,互不干扰。

复制代码
main(主分支)
  ↓
  ├─── feature-A(功能分支)
  └─── feature-B(功能分支)

8.2 创建和切换分支

bash 复制代码
# 查看所有分支
git branch

# 查看所有分支(包括远程分支)
git branch -a

# 创建新分支
git branch feature-login

# 切换到指定分支
git checkout feature-login
# 或(新版 Git)
git switch feature-login

# 创建并切换到新分支
git checkout -b feature-login
# 或
git switch -c feature-login

8.3 分支操作

bash 复制代码
# 删除已合并的分支
git branch -d feature-login

# 强制删除分支(未合并)
git branch -D feature-login

# 重命名分支
git branch -m 旧分支名 新分支名

# 查看分支的详细提交
git branch -v

8.4 合并分支

bash 复制代码
# 切换到目标分支(如 main)
git checkout main

# 合并其他分支到当前分支
git merge feature-login

# 删除已合并的分支
git branch -d feature-login

合并类型:

  • Fast-forward:快进合并,直接移动指针
  • Merge commit:合并提交,创建新的合并节点

8.5 解决合并冲突

当两个分支修改了同一文件的同一行时,会产生冲突。

冲突标记示例:

csharp 复制代码
public void MoveAxis()
{
<<<<<<< HEAD
    velocity = 1000;  // main 分支的修改
=======
    velocity = 2000;  // feature 分支的修改
>>>>>>> feature
}

解决步骤:

  1. 编辑文件,保留需要的代码,删除冲突标记:
csharp 复制代码
public void MoveAxis()
{
    velocity = 1500;  // 人工决定最终值
}
  1. 添加并提交:
bash 复制代码
git add 文件名.cs
git commit -m "解决合并冲突"

8.6 变基(Rebase)

变基可以整理提交历史,使其更清晰。

bash 复制代码
# 将当前分支的提交"移植"到目标分支上
git rebase main

# 交互式变基(可以修改、删除、合并提交)
git rebase -i HEAD~3

注意: 变基会修改历史,已推送的提交不要使用。


九、撤销操作

9.1 撤销工作区修改

bash 复制代码
# 撤销指定文件的修改(恢复到上次提交状态)
git checkout -- 文件名.cs
# 或(新版 Git)
git restore 文件名.cs

# 撤销所有修改
git checkout -- .
# 或
git restore .

9.2 撤销暂存区修改

bash 复制代码
# 将文件从暂存区移除
git reset HEAD 文件名.cs
# 或
git restore --staged 文件名.cs

9.3 撤销提交

bash 复制代码
# 撤销最后一次提交,保留修改在暂存区
git reset --soft HEAD~1

# 撤销最后一次提交,保留修改在工作区
git reset HEAD~1

# 撤销最后一次提交,丢弃修改
git reset --hard HEAD~1

# 撤销到指定提交
git reset --hard <提交ID>

9.4 恢复已删除的提交

bash 复制代码
# 查看操作记录,找到被删除的提交ID
git reflog

# 恢复指定提交
git reset --hard <提交ID>

十、常见使用场景

10.1 新项目开始

bash 复制代码
# 1. 在 GitHub 创建仓库
# 2. 克隆到本地
git clone https://github.com/username/repo.git
cd repo

# 3. 创建开发分支
git checkout -b dev

# 4. 开始开发...
git add .
git commit -m "feat: 初始化项目"

# 5. 推送到远程
git push -u origin dev

10.2 开发新功能

bash 复制代码
# 1. 从主分支创建功能分支
git checkout main
git pull
git checkout -b feature/new-function

# 2. 开发并提交
git add .
git commit -m "feat: 添加新功能"

# 3. 推送到远程
git push -u origin feature/new-function

# 4. 创建 Pull Request(在 GitHub 上)
# 5. 合并到主分支
# 6. 删除功能分支
git checkout main
git pull
git branch -d feature/new-function

10.3 修复 Bug

bash 复制代码
# 1. 创建修复分支
git checkout -b fix/bug-123

# 2. 修复并提交
git add .
git commit -m "fix: 修复登录失败问题"

# 3. 推送
git push -u origin fix/bug-123

# 4. 合并到主分支和开发分支

10.4 团队协作

bash 复制代码
# 每天开始工作前
git checkout main
git pull

# 开始开发
git checkout -b feature/my-task
# ... 编码 ...
git add .
git commit -m "feat: 完成任务 A"
git push -u origin feature/my-task

# 合并前先拉取最新代码
git checkout main
git pull
git merge feature/my-task
git push

十一、常用命令速查表

命令 说明
git init 初始化仓库
git clone <url> 克隆远程仓库
git status 查看状态
git add <file> 添加到暂存区
git add . 添加所有修改
git commit -m "msg" 提交
git log 查看历史
git log --oneline 简洁历史
git branch 查看分支
git branch <name> 创建分支
git checkout <branch> 切换分支
git checkout -b <name> 创建并切换
git merge <branch> 合并分支
git push 推送到远程
git pull 拉取并合并
git fetch 拉取不合并
git remote -v 查看远程仓库
git diff 查看差异
git reset 重置
git checkout -- <file> 撤销修改

十二、最佳实践

12.1 提交规范

好的提交信息:

复制代码
feat: 添加用户登录功能
- 实现用户名密码验证
- 添加 JWT token 生成
- 完善错误处理

不好的提交信息:

复制代码
update
fix bug
done

12.2 分支管理策略

推荐分支模型:

  • main:主分支,始终保持稳定
  • dev:开发分支,日常开发
  • feature/*:功能分支
  • fix/*:修复分支
  • release/*:发布分支

12.3 工作流建议

  1. 频繁提交:小步快跑,每次提交一个完整的逻辑单元
  2. 保持主分支稳定:不要直接在 main 分支开发
  3. 及时同步 :定期 git pull,避免冲突积累
  4. 写好提交信息:清晰说明做了什么
  5. 提交前检查:确保代码能编译、测试通过

12.4 注意事项

⚠️ 不要做的事情:

  • 不要提交敏感信息(密码、密钥)
  • 不要提交大文件(视频、数据集)
  • 不要用 git push -f 强制推送(除非你清楚后果)
  • 不要在提交中包含二进制文件(如 .dll、.exe)
  • 不要提交 IDE 临时文件(.vs、.idea)

📝 应该使用 .gitignore:

复制代码
# .NET
bin/
obj/
*.suo
*.user

# IDE
.vs/
.vscode/

# 敏感信息
*.env
secrets.json

十三、图形化工具

虽然命令行很强大,但图形化工具可以更直观地查看历史和操作。

推荐工具:

  • GitKraken:跨平台,功能强大
  • Sourcetree:免费,Windows/Mac
  • GitHub Desktop:GitHub 官方工具
  • TortoiseGit:Windows 资源管理器集成

VS Code 内置 Git:

  • VS Code 自带 Git 支持,可以查看状态、提交、切换分支
  • 快捷键:Ctrl + Shift + G 打开 Git 面板

十四、常见问题

Q1: 忘记添加文件就提交了怎么办?

bash 复制代码
# 修改最后一次提交
git add 忘记的文件.cs
git commit --amend

Q2: 提交信息写错了怎么办?

bash 复制代码
# 修改提交信息
git commit --amend
# 在编辑器中修改信息

Q3: 如何删除错误的提交?

bash 复制代码
# 撤销最后一次提交(不保留修改)
git reset --hard HEAD~1

# 如果已推送,需要强制推送(危险!)
git push -f

Q4: 如何查看某行代码是谁写的?

bash 复制代码
# 查看文件每一行的作者信息
git blame 文件名.cs

Q5: 如何忽略已跟踪的文件?

bash 复制代码
# 1. 添加到 .gitignore
echo "*.log" >> .gitignore

# 2. 从暂存区移除
git rm --cached *.log

# 3. 提交
git commit -m "chore: 添加 .gitignore"

十五、学习资源

官方文档

在线教程

视频教程

  • B站搜索 "Git 教程"
  • YouTube:Git & GitHub Crash Course

练习平台

  • GitHub:注册账号,创建仓库练习
  • GitLab:免费私有仓库

总结

Git 是现代软件开发必备的技能,掌握基础操作后,可以在实际项目中逐步深入学习。

核心操作记住这 5 个:

  1. git clone - 克隆仓库
  2. git add - 添加到暂存区
  3. git commit - 提交
  4. git push - 推送到远程
  5. git pull - 从远程拉取

分支管理记住这 3 个:

  1. git branch - 查看/创建分支
  2. git checkout - 切换分支
  3. git merge - 合并分支

最重要的是多练习! 在实际项目中使用 Git,遇到问题就查文档或问 AI,很快就会熟练掌握。


创建日期:2026年2月10日

相关推荐
ZHOUPUYU13 小时前
PHP 8.3网关优化:我用JIT将QPS提升300%的真实踩坑录
开发语言·php
寻寻觅觅☆17 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
l1t18 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
赶路人儿18 小时前
Jsoniter(java版本)使用介绍
java·开发语言
ceclar12319 小时前
C++使用format
开发语言·c++·算法
码说AI19 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS19 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
星空下的月光影子19 小时前
易语言开发从入门到精通:补充篇·网络爬虫与自动化采集分析系统深度实战·HTTP/HTTPS请求·HTML/JSON解析·反爬策略·电商价格监控·新闻资讯采集
开发语言
老约家的可汗19 小时前
初识C++
开发语言·c++
wait_luky19 小时前
python作业3
开发语言·python