欢迎光临
我们一直在努力

Git 从入门到日常实战 — 命令、分支、协作与问题排查全指南

一、Git 基础概念

1. 什么是版本控制

版本控制(Version Control)是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。常见版本控制工具对比如下:

工具类型诞生时间特点
CVS 集中式 1986 年 早期经典,已基本淘汰
SVN 集中式 2000 年 集中管理,需联网,权限控制强
Git 分布式 2005 年 离线工作,分支轻量,速度极快

2. 集中式 vs 分布式

对比项集中式(SVN)分布式(Git)
仓库位置 只有中央服务器有完整仓库 每个开发者都有完整仓库副本
联网需求 必须联网才能提交 可离线提交,联网时再推送
分支成本 分支操作昂贵 分支操作极轻量(指针切换)
单点故障 中央服务器挂了全停 任何一份副本都能恢复
速度 较慢 极快(本地操作)

3. Git 工作区域

Git 的工作流程围绕三个区域展开:

区域说明对应命令
工作区(Working Directory) 你编辑文件的地方 直接编辑文件
暂存区(Staging Area / Index) 临时存放待提交的改动 git add
本地仓库(Local Repository) 提交后的历史记录 git commit
远程仓库(Remote Repository) 服务器上的仓库(GitHub/Gitee) git push / git pull

文件状态流转:

未跟踪 ──git add──▶ 暂存区 ──git commit──▶ 本地仓库 ──git push──▶ 远程仓库
工作区 ◀──git restore── 暂存区 ◀──git restore –staged── 本地仓库


二、安装与配置

1. 下载安装 Git

  • Git 下载地址:Redirecting…

  • TortoiseGit 下载地址:Download – TortoiseGit – Windows Shell Interface to Git

安装完成后,打开终端验证:

git –version
# 输出: git version 2.49.0.windows.1

2. 全局配置

首次使用必须配置用户名和邮箱,这会出现在每次提交记录中:

# 设置用户名和邮箱(必做)
git config –global user.name "你的名字"
git config –global user.email "your-email@example.com"

# 查看所有配置
git config –list

# 设置默认编辑器(可选,需确保 code 命令在 PATH 中)
git config –global core.editor "code –wait"   # VS Code

# 设置默认分支名为 main(可选,Git 2.28+)
git config –global init.defaultBranch main

3. SSH 密钥配置(免密推送)

每次 push 都输密码很烦,配置 SSH 密钥可以免密操作:

# 1. 生成 SSH 密钥(在 Git Bash 中执行)
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
# 连续回车使用默认路径即可

# 2. 查看公钥内容(复制整段输出)
# Git Bash:
cat ~/.ssh/id_rsa.pub
# PowerShell:
Get-Content ~/.ssh/id_rsa.pub
# CMD:
type %USERPROFILE%\\.ssh\\id_rsa.pub

# 3. 添加到 GitHub/Gitee
# GitHub: Settings → SSH and GPG keys → New SSH key → 粘贴公钥
# Gitee: 设置 → SSH公钥 → 粘贴公钥

# 4. 测试连接
ssh -T git@github.com
# 输出: Hi username! You've successfully authenticated…


三、本地仓库操作

1. 初始化与克隆

# 初始化一个新的 Git 仓库
git init

# 克隆远程仓库到本地
git clone https://github.com/user/repo.git

# 克隆指定分支
git clone -b develop https://github.com/user/repo.git

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

2. 日常三板曲:add → commit → push

# 查看当前状态(最常用的命令)
git status

# 添加文件到暂存区
git add index.html              # 添加单个文件
git add src/                    # 添加整个目录
git add .                       # 添加所有变更

# 提交到本地仓库
git commit -m "feat: 添加用户登录功能"

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

3. 提交规范(Conventional Commits)

好的提交信息能让团队协作更高效,推荐使用 Angular 团队的提交规范:

类型说明示例
feat 新功能 feat: 添加用户注册功能
fix 修复 Bug fix: 修复登录页面空指针异常
docs 文档变更 docs: 更新 README 安装步骤
style 代码格式(不影响逻辑) style: 格式化 Login.cs 缩进
refactor 重构 refactor: 提取公共验证逻辑
test 测试相关 test: 添加 UserService 单元测试
chore 构建/工具变动 chore: 升级 NuGet 包版本

4. 查看历史与差异

# 查看提交历史
git log
git log –oneline               # 简洁模式(一行一条)
git log –graph –oneline –all # 图形化显示所有分支
git log -5                      # 只看最近 5 条

# 查看文件修改详情
git log -p src/Program.cs       # 某文件的修改历史

# 查看谁修改了每一行
git blame src/Program.cs

# 查看差异
git diff                        # 工作区 vs 暂存区
git diff –cached               # 暂存区 vs 最新提交
git diff HEAD                   # 工作区 vs 最新提交
git diff main..feature          # 两个分支顶端的差异(双点)
git diff main…feature         # feature 相对于分叉点的变化(三点,更常用)

5. 撤销与回退

命令作用影响范围
git restore <file> 撤销工作区修改 工作区
git restore –staged <file> 取消暂存 暂存区
git reset –soft HEAD~1 回退提交,保留修改在暂存区 暂存区 + 仓库
git reset –mixed HEAD~1 回退提交,取消暂存(工作区修改保留) 暂存区 + 仓库(工作区不变)
git reset –hard HEAD~1 回退提交,丢弃所有修改 ⚠️ 全部丢弃
git revert <hash> 反转某次提交(生成新提交) 仓库(安全)

# 撤销工作区的修改(未 add 时)
git restore src/Program.cs

# 取消暂存(已 add 但未 commit 时)
git restore –staged src/Program.cs

# 修改最后一次提交的信息
git commit –amend -m "fix: 修正提交信息"

# 安全回退(推荐,不丢失历史)
git revert abc1234

⚠️ git reset –hard 会丢失未提交的修改,慎用! 如果误操作,可用 git reflog 找回。

6. 暂存工作(Stash)

开发到一半需要紧急切分支修 Bug?用 stash 临时保存:

git stash # 暂存当前工作
git stash push -m "登录功能写一半" # 带描述的暂存(推荐,Git 2.16+)
git stash save "登录功能写一半" # 带描述的暂存(旧写法,仍可用但已不推荐)
git stash list # 查看暂存列表
git stash pop # 恢复最近一次暂存并删除
git stash apply # 恢复但不删除暂存记录
git stash drop # 删除最近一次暂存
git stash clear # 清空所有暂存


四、分支管理

1. 分支基本操作

# 查看分支
git branch # 本地分支
git branch -a # 所有分支(含远程)
git branch -v # 各分支最后一次提交

# 创建与切换
git branch feature-login # 创建分支
git switch feature-login # 切换分支(Git 2.23+)
git switch -c feature-login # 创建并切换(推荐)

# 合并分支
git switch main # 先切到目标分支
git merge feature-login # 合并功能分支

# 删除分支
git branch -d feature-login # 删除已合并的分支
git branch -D feature-login # 强制删除
git push origin –delete feature-login # 删除远程分支

2. Merge vs Rebase

这是 Git 中最经典的对比:

维度MergeRebase
原理 创建合并提交,保留分支拓扑 重放提交到目标分支顶端
历史 非线性,呈网状 线性,更干净
冲突 最多解决一次 每个被重放的提交都可能冲突
安全 不改写历史 改写提交 hash
适用 公共分支、保留协作记录 个人分支、整理提交历史

# Merge 方式
git switch main
git merge feature # 产生一个 merge commit

# Rebase 方式
git switch feature
git rebase main # 将 feature 的提交"接"到 main 最新节点之后

推荐工作流:

# 1. 在 feature 分支开发完成
# 2. 先 rebase 到最新 main
git switch feature
git rebase main
# 3. 解决冲突(如有),然后 fast-forward merge
git switch main
git merge feature # 此时无冲突,线性历史

⚠️ 黄金法则:永远不要 rebase 已推送到公共仓库的提交! Rebase 会改写 commit hash,影响其他协作者。

3. 冲突解决

当两个分支修改了同一文件的同一区域,合并时会产生冲突:

# 冲突文件中会出现标记
<<<<<<< HEAD
当前分支的内容
=======
要合并进来的分支的内容
>>>>>>> feature

# 解决步骤:
# 1. 手动编辑文件,保留正确内容,删除冲突标记
# 2. 添加到暂存区
git add src/Program.cs
# 3. 完成合并(二选一)
git merge –continue # 推荐,自动使用合并信息
# 或
git commit -m "merge: 解决 Program.cs 冲突" # 手动指定提交信息

# 如果是 rebase 冲突,解决后用:
git rebase –continue

4. Gitflow 分支策略

适合大型项目和多版本并行维护的团队:

分支类型命名生命周期用途
主分支 main / master 永久 生产环境代码
开发分支 develop 永久 最新开发进度集成
功能分支 feature/* 临时 新功能开发
发布分支 release/* 临时 版本发布准备
热修复分支 hotfix/* 临时 生产环境紧急修复

# 典型 Gitflow 流程
git switch -c feature/user-login develop # 从 develop 创建功能分支
# …开发完成后
git switch develop
git merge –no-ff feature/user-login # 合并回 develop
git branch -d feature/user-login

# 发布
git switch -c release/1.0.0 develop
# …测试修复完成后
git switch main
git merge –no-ff release/1.0.0
git tag -a v1.0.0 -m "版本 1.0.0"
git push origin v1.0.0 # 推送标签到远程
git switch develop
git merge –no-ff release/1.0.0

💡 小团队/快速迭代项目推荐使用更简单的 GitHub Flow:只有 main + 功能分支,通过 Pull Request 合并。


五、远程仓库协作

1. 远程仓库管理

# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 修改远程地址
git remote set-url origin https://github.com/user/new-repo.git

# 拉取远程更新(不自动合并)
git fetch origin

# 拉取并合并(= fetch + merge)
git pull origin main

# 推送到远程
git push origin main

2. Push 之前先 Pull

多人协作的核心习惯——下班前推送代码时,一定先同步远程:

# 正确流程
git pull origin main # 1. 先拉取远程最新代码
# 如有冲突,解决冲突
git push origin main # 2. 再推送自己的代码

3. Fork + Pull Request 工作流

这是开源项目和跨团队协作的标准流程:

1. Fork 他人仓库 → 你的 GitHub 账号下出现一份副本
2. Clone 你 Fork 的仓库到本地
3. 创建功能分支,进行开发
4. Push 到你的远程仓库
5. 向原仓库发起 Pull Request(PR)
6. 原仓库维护者 Review → 合并
# Fork 后克隆
git clone https://github.com/your-username/repo.git
cd repo

# 添加原仓库为 upstream
git remote add upstream https://github.com/original-owner/repo.git

# 同步原仓库更新
git fetch upstream
git merge upstream/main
git push origin main # 同步到自己 Fork 的远程仓库

# 开发新功能
git switch -c feature/my-feature
# …提交推送后,在 GitHub 上发起 PR

4. 远程仓库平台

平台地址特点
GitHub https://github.com 全球最大开源社区,微软旗下
Gitee(码云) https://gitee.com 国内平台,访问速度快
GitLab https://gitlab.com 支持自建,CI/CD 集成强
Bitbucket https://bitbucket.org Atlassian 生态,私有仓库免费

六、Visual Studio 中使用 Git

1. 创建项目并推送到 GitHub

# 步骤:
# 1. 打开 Visual Studio,登录微软账号(使用与 GitHub 相同的邮箱)
# 2. 创建新项目
# 3. 在「Git 菜单」→「创建 Git 存储库」
# 4. 选择 GitHub,填写仓库名,点击「创建并推送」

2. 克隆远程项目到 VS

# 步骤:
# 1. 打开 Visual Studio → 选中「克隆存储库」
# 2. 输入远程仓库地址,如 https://github.com/user/repo.git
# 3. 选择本地存储路径,点击「克隆」
# 4. 等待加载完成
# 5. 右键解决方案 → 还原 NuGet 包

⚠️ 克隆后如果出现程序集缺失,右键解决方案 → 还原 NuGet 包即可。

3. VS 中 Git 常用操作

操作路径
查看更改 Git 菜单 → 更改
暂存并提交 更改页面 → 输入消息 → 全部提交
推送 Git 菜单 → 推送
拉取 Git 菜单 → 拉取
创建分支 Git 菜单 → 新建分支
合并分支 Git 菜单 → 管理分支 → 右键合并
查看历史 Git 菜单 → 查看 Git 历史

七、GitHub 加速与常见问题

1. GitHub 打不开 / 访问缓慢

国内访问 GitHub 经常不稳定,推荐使用 Watt Toolkit 加速:

# 步骤:
# 1. 打开微软商店,搜索「Watt Toolkit」并安装
# 2. 打开软件 → 点击「网络加速」
# 3. 勾选 GitHub
# 4. 点击「一键加速」

2. 常见错误排查

错误1:fatal: not a git repository
  • 现象:执行 Git 命令报错 not a git repository

  • 原因:当前目录不是 Git 仓库

  • 解决:

# 进入已有的 Git 仓库目录
cd C:\\Projects\\your-repo

# 或者初始化一个新仓库
git init

错误2:error: failed to push some refs
  • 现象:push 被拒绝

  • 原因:远程有本地没有的提交(别人先 push 了)

  • 解决:

# 先拉取远程更新
git pull origin main
# 解决冲突后重新推送
git push origin main

错误3:合并冲突标记残留
  • 现象:代码中出现 <<<<<<< / ======= / >>>>>>>

  • 原因:冲突未正确解决就提交了

  • 解决:

# 搜索冲突标记
grep -rn "<<<<<<" src/

# 手动编辑,保留正确内容,删除冲突标记
# 重新提交
git add .
git commit -m "fix: 清理冲突标记"

错误4:误删分支
  • 现象:git branch -D 删除了还有用的分支

  • 解决:

# 查看所有操作记录
git reflog
# 找到删除前的 commit hash
git switch -c recovered-branch abc1234

错误5:提交了不该提交的文件(如 .env、bin/)
  • 现象:密码、编译产物被提交到仓库

  • 解决:

# 1. 从暂存区移除(不删除本地文件)
git rm –cached .env
git rm -r –cached bin/

# 2. 添加到 .gitignore
echo ".env" >> .gitignore
echo "bin/" >> .gitignore

# 3. 提交
git add .gitignore
git commit -m "chore: 移除敏感文件并添加 .gitignore"


八、.gitignore 配置

项目根目录创建 .gitignore 文件,告诉 Git 哪些文件不需要追踪:

# 编译产物
bin/
obj/
*.exe
*.dll
*.pdb
*.cache

# IDE 配置
.vs/
.vscode/
*.user
*.suo

# 环境变量 / 敏感信息
.env
appsettings.Development.json

# 系统文件
Thumbs.db
.DS_Store

# NuGet 包
packages/
*.nupkg

# 测试
TestResults/

# 日志
*.log

💡 已经被追踪的文件不会被 .gitignore 忽略,需要先 git rm –cached 移除追踪。


九、常用命令速查表

场景命令
初始化仓库 git init
克隆仓库 git clone <url>
查看状态 git status
添加到暂存区 git add .
提交 git commit -m "消息"
推送 git push origin <branch>
拉取 git pull origin <branch>
创建分支 git switch -c <name>
切换分支 git switch <name>
合并分支 git merge <name>
查看日志 git log –oneline –graph –all
撤销修改 git restore <file>
取消暂存 git restore –staged <file>
回退提交 git revert <hash>
暂存工作 git stash / git stash pop
查看差异 git diff
查看远程 git remote -v
创建标签 git tag -a v1.0 -m "版本1.0"
推送标签 git push origin v1.0 / git push origin –tags
查看操作记录 git reflog

总结

  • Git 是分布式版本控制,每个开发者都拥有完整的仓库副本,可离线工作

  • 日常开发核心流程:add → commit → push,推送前先 pull 同步远程

  • 分支是 Git 的灵魂,功能分支开发 + PR 合并是现代协作的标准模式

  • Merge 保留历史、Rebase 保持线性,公共分支用 merge,个人分支用 rebase

  • 遵循提交规范(Conventional Commits)让项目历史清晰可读

  • 遇到问题不要慌,git reflog 是最后的救命稻草

相关资源

  • Git 官方文档

  • 菜鸟教程 Git 教程

赞(0)
未经允许不得转载:171主机测评 » Git 从入门到日常实战 — 命令、分支、协作与问题排查全指南
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址