Git入门

一、Git 基础概念

1. 版本控制系统分类

  • 本地版本控制:如RCS,仅在本机保存历史版本
  • 集中式版本控制:如SVN,单一中央服务器管理代码
  • 分布式版本控制:如Git,每个开发者都有完整的仓库副本

2. Git 核心概念

概念 说明
仓库(Repository) 项目所有版本数据的存储位置
工作目录(Working Directory) 项目文件的当前状态
暂存区(Staging Area) 准备提交的文件列表
提交(Commit) 永久的项目快照
分支(Branch) 独立开发线
标签(Tag) 特定提交的标记

3. Git 工作流程

复制代码
工作目录 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库

二、Git 安装与配置

1. 安装 Git

  • Windows :下载 Git for Windows

  • macOSbrew install git 或从官网下载

  • Linux

    bash 复制代码
    # Ubuntu/Debian
    sudo apt install git
    
    # CentOS/RHEL
    sudo yum install git

2. 初始配置

bash 复制代码
# 设置用户名
git config --global user.name "Your Name"

# 设置邮箱
git config --global user.email "[email protected]"

# 查看配置
git config --list

# 设置默认编辑器(可选)
git config --global core.editor "code --wait"  # VS Code

三、基础操作

1. 创建仓库

bash 复制代码
# 初始化新仓库
git init

# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git myfolder  # 指定目录名

2. 基本工作流

bash 复制代码
# 检查文件状态
git status

# 添加文件到暂存区
git add filename.txt       # 添加特定文件
git add .                  # 添加所有更改
git add *.js               # 添加所有js文件

# 提交更改
git commit -m "描述信息"

# 查看提交历史
git log
git log --oneline          # 简洁版
git log --graph --all      # 图形化显示分支

3. 文件操作

bash 复制代码
# 删除文件
git rm filename.txt

# 重命名/移动文件
git mv oldname.txt newname.txt

# 忽略文件(.gitignore)
echo "node_modules/" >> .gitignore
echo "*.log" >> .gitignore

四、分支管理

1. 基础分支操作

bash 复制代码
# 查看分支
git branch          # 本地分支
git branch -a       # 所有分支(包括远程)

# 创建分支
git branch new-feature
git checkout -b new-feature  # 创建并切换

# 切换分支
git checkout main

# 合并分支
git checkout main
git merge new-feature

# 删除分支
git branch -d new-feature    # 安全删除
git branch -D new-feature    # 强制删除

2. 分支策略

  • 主分支(main/master):稳定版本
  • 开发分支(develop):集成最新开发成果
  • 功能分支(feature/xxx):开发新功能
  • 发布分支(release/xxx):准备发布版本
  • 热修复分支(hotfix/xxx):紧急修复生产问题

3. 分支合并策略

bash 复制代码
# 普通合并(创建合并提交)
git merge feature-branch

# 变基合并(线性历史)
git checkout feature-branch
git rebase main
git checkout main
git merge feature-branch

# 解决冲突后继续
git add conflicted-file.txt
git rebase --continue

五、远程仓库

1. 远程操作基础

bash 复制代码
# 查看远程仓库
git remote -v

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

# 推送到远程
git push -u origin main    # 首次推送
git push                   # 后续推送

# 从远程拉取
git pull origin main       # 拉取并合并
git fetch origin           # 仅获取不合并

2. 多人协作流程

bash 复制代码
# 1. 获取最新代码
git fetch origin

# 2. 基于远程分支创建本地分支
git checkout -b feature-x origin/feature-x

# 3. 开发完成后推送
git push origin feature-x

# 4. 创建Pull Request/Merge Request
# (在GitHub/GitLab界面上操作)

# 5. 同步主分支
git checkout main
git pull origin main

3. 远程分支管理

bash 复制代码
# 跟踪远程分支
git checkout --track origin/feature-y

# 删除远程分支
git push origin --delete old-branch

# 更新远程分支列表
git remote update origin --prune

六、高级操作

1. 撤销更改

bash 复制代码
# 撤销工作目录修改
git checkout -- filename.txt

# 撤销暂存区文件
git reset HEAD filename.txt

# 修改最后一次提交
git commit --amend

# 回退到特定提交
git reset --hard commit_hash   # 彻底回退
git reset --soft commit_hash   # 保留更改到暂存区
git revert commit_hash         # 创建反向提交

2. 储藏更改

bash 复制代码
# 储藏当前工作
git stash
git stash save "描述信息"

# 查看储藏列表
git stash list

# 恢复储藏
git stash apply stash@{0}
git stash pop            # 恢复并删除

# 删除储藏
git stash drop stash@{0}

3. 标签管理

bash 复制代码
# 创建标签
git tag v1.0.0
git tag -a v1.0.1 -m "Release version 1.0.1"

# 推送标签
git push origin v1.0.0
git push origin --tags   # 推送所有标签

# 删除标签
git tag -d v0.9.0
git push origin --delete v0.9.0

七、Git 内部原理

1. Git 对象模型

  • Blob:文件内容
  • Tree:目录结构
  • Commit:项目快照
  • Tag:特定提交的引用

2. 引用与HEAD

bash 复制代码
# 查看引用
cat .git/HEAD
cat .git/refs/heads/main

# 查看对象内容
git cat-file -p commit_hash

3. 底层命令示例

bash 复制代码
# 创建blob对象
echo "content" | git hash-object -w --stdin

# 创建tree对象
git update-index --add --cacheinfo 100644 blob_hash filename.txt
git write-tree

八、Git 工作流

1. 集中式工作流

  • 类似SVN,所有开发者直接向主分支提交
  • 适合小型团队

2. 功能分支工作流

  • 每个功能在独立分支开发
  • 通过Pull Request合并

3. Git Flow

bash 复制代码
# 初始化Git Flow
git flow init

# 开始新功能
git flow feature start feature-name

# 完成功能
git flow feature finish feature-name

# 发布版本
git flow release start 1.0.0
git flow release finish 1.0.0

4. Forking工作流

  • 每个开发者fork主仓库
  • 通过Pull Request贡献代码
  • 开源项目常用

九、Git 工具与技巧

1. 图形化工具

  • gitk:内置图形化历史查看器
  • GitHub Desktop:GitHub官方GUI
  • SourceTree:免费的Git GUI客户端
  • VS Code Git集成:内置的Git支持

2. 命令行增强

bash 复制代码
# 更美观的log
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

# 别名配置(添加到~/.gitconfig)
[alias]
    co = checkout
    br = branch
    ci = commit
    st = status
    lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

3. 二分查找问题提交

bash 复制代码
git bisect start
git bisect bad           # 当前版本有问题
git bisect good v1.0.0   # 标记已知好版本
# 测试后标记good/bad
git bisect reset         # 结束

十、常见问题解决

1. 合并冲突

bash 复制代码
# 查看冲突文件
git status

# 手动解决冲突后
git add resolved-file.txt
git commit

2. 恢复误删分支

bash 复制代码
# 查找删除的分支提交
git reflog

# 恢复分支
git branch branch-name commit-hash

3. 大文件处理

bash 复制代码
# 使用git-lfs管理大文件
git lfs install
git lfs track "*.psd"
git add .gitattributes

4. 清理历史

bash 复制代码
# 交互式变基
git rebase -i HEAD~5

# 清理历史大文件
git filter-branch --tree-filter 'rm -f large-file.iso' HEAD

十一、Git 最佳实践

  1. 提交规范

    • 使用明确的提交信息

    • 遵循Conventional Commits

      feat: 添加用户登录功能
      fix: 修复首页加载错误
      docs: 更新API文档

  2. 分支管理

    • 保持主分支可部署
    • 功能分支尽量小且专注
    • 定期同步主分支
  3. 工作习惯

    • 频繁提交,原子性提交
    • 先拉取再推送
    • 使用.gitignore排除不需要的文件
  4. 团队协作

    • 明确合并权限
    • 代码审查流程
    • 定义清晰的工作流

十二、Git 进阶资源

  1. 官方文档https://git-scm.com/doc
  2. Pro Git 书籍https://git-scm.com/book
  3. Git 可视化学习https://learngitbranching.js.org/
  4. Git 练习平台https://gitexercises.fracz.com/

通过掌握这些Git操作,您将能够高效管理代码版本,无论是个人项目还是团队协作开发。记住,Git的强大在于实践,多尝试不同的命令和工作流,找到最适合您项目的方式。

相关推荐
无妄无望10 分钟前
Git,本地上传项目到github
git·github
郁大锤1 小时前
Windows 下 Git 入门指南:从安装、配置 SSH 到加速 GitHub 下载
windows·git·ssh
Emma歌小白2 小时前
gitee同步版本合并冲突
git
ba_pi2 小时前
Git分支管理方案
git
old_power2 小时前
【Git】Fork和并请求
git
Gazer_S4 小时前
【 Git 全局忽略文件完全指南:配置、规则与最佳实践】
git
-曾牛5 小时前
GitHub创建远程仓库
java·运维·git·学习·github·远程工作
靓仔1号6 小时前
Git 合并流程:从开发分支到主分支的完整操作
git
日升6 小时前
Git 分支整合策略:Cherry-pick、Merge、Rebase 三者间的详解
前端·javascript·git