当前位置: 首页 > news >正文

Git从入门到精通教程

一、Git简介

        Git是一个分布式版本控制系统,由Linus Torvalds于2005年为管理Linux内核开发而创建。它具有以下特点:

  • 分布式架构:每个开发者都有完整的代码仓库副本
  • 高效性能:大部分操作在本地完成,速度快
  • 强大的分支系统:轻量级分支使分支操作几乎瞬间完成
  • 数据完整性:使用SHA-1哈希确保代码历史不被篡改
  • 灵活性:支持多种工作流程和开发模式

二、Git安装与配置

2.1 安装Git

Windows系统

  1. 访问Git官网下载安装程序:https://git-scm.com/download/win
  2. 运行安装程序,按向导完成安装
  3. 关键配置选项:
    • 选择"Git from the command line and also from 3rd-party software"
    • 选择默认编辑器(推荐VS Code)
    • 换行符处理选择"Checkout Windows-style, commit Unix-style line endings"

验证安装:

bash

git --version

macOS系统

使用Homebrew安装(推荐):

bash

# 安装Homebrew(若未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# 安装Git
brew install git

Linux系统

Debian/Ubuntu:

bash

sudo apt update && sudo apt install git

CentOS/Fedora:

bash

sudo yum install git        # CentOS
sudo dnf install git        # Fedora

2.2 Git配置

设置全局用户信息(必做):

bash

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

查看配置:

bash

git config --list

常用配置选项:

bash

# 设置默认编辑器
git config --global core.editor "code --wait"  # VS Code
# 设置换行符处理(Windows)
git config --global core.autocrlf true
# 设置换行符处理(macOS/Linux)
git config --global core.autocrlf input
# 启用彩色输出
git config --global color.ui auto
# 设置默认分支名称
git config --global init.defaultBranch main

2.3 SSH密钥配置(推荐)

生成SSH密钥:

bash

ssh-keygen -t ed25519 -C "your.email@example.com"
# 或使用RSA
ssh-keygen -t rsa -b 4096 -C "your.email@example.com"

将公钥添加到GitHub/GitLab:

bash

cat ~/.ssh/id_ed25519.pub
# 复制输出内容到GitHub/GitLab的SSH Keys设置中

测试连接:

bash

ssh -T git@github.com

三、Git基础操作

3.1 仓库初始化与克隆

初始化新仓库:

bash

mkdir my_project
cd my_project
git init

克隆远程仓库:

bash

git clone https://github.com/user/repo.git
# 或使用SSH
git clone git@github.com:user/repo.git

3.2 基本工作流程

Git工作流程包括三个主要区域:

  • 工作目录:实际编辑文件的地方
  • 暂存区:准备提交的文件集合
  • 本地仓库:存储提交历史的数据库

基本操作流程:

bash

# 1. 修改文件后查看状态
git status# 2. 将修改添加到暂存区
git add filename.txt        # 添加特定文件
git add .                   # 添加所有修改文件# 3. 提交到本地仓库
git commit -m "Commit message"# 4. 查看提交历史
git log
git log --oneline           # 简洁显示
git log --graph --oneline --all  # 图形化显示所有分支历史

3.3 常用基础命令

查看文件状态:

bash

git status
git status -s               # 简洁输出

查看文件差异:

bash

git diff                    # 工作区与暂存区差异
git diff --cached           # 暂存区与仓库差异
git diff HEAD               # 工作区与仓库差异

撤销操作:

bash

# 撤销工作区修改
git checkout -- filename.txt# 撤销暂存区修改
git reset HEAD filename.txt# 回退到上一个版本
git reset --hard HEAD^
# 回退到指定版本
git reset --hard <commit_id># 查看命令历史(用于找回误操作)
git reflog

四、分支管理

4.1 分支基础操作

查看分支:

bash

git branch                  # 查看本地分支
git branch -r               # 查看远程分支
git branch -a               # 查看所有分支

创建分支:

bash

git branch feature-branch

切换分支:

bash

git checkout feature-branch
# 或使用新版命令
git switch feature-branch

创建并切换分支:

bash

git checkout -b feature-branch
# 或使用新版命令
git switch -c feature-branch

删除分支:

bash

git branch -d feature-branch  # 删除已合并的分支
git branch -D feature-branch  # 强制删除未合并的分支

4.2 分支合并

合并分支:

bash

# 切换到目标分支
git checkout main
# 合并feature-branch到当前分支
git merge feature-branch

中止合并:

bash

git merge --abort

4.3 变基操作

变基可以创建更线性的提交历史:

bash

# 在feature-branch上执行,将其变基到main分支
git checkout feature-branch
git rebase main

解决变基冲突:

bash

# 解决冲突后
git add <resolved-file>
git rebase --continue
# 或放弃变基
git rebase --abort

交互式变基(整理提交历史):

bash

# 编辑最近3个提交
git rebase -i HEAD~3

交互式变基操作选项:

  • pick:保留提交
  • reword:修改提交信息
  • edit:修改提交内容
  • squash:合并到前一个提交
  • fixup:合并到前一个提交但不保留提交信息
  • drop:删除提交

五、远程仓库操作

5.1 远程仓库基础

查看远程仓库:

bash

git remote -v

添加远程仓库:

bash

git remote add origin https://github.com/user/repo.git

修改远程仓库:

bash

git remote set-url origin https://github.com/user/new-repo.git

5.2 拉取与推送

拉取远程更新:

bash

git pull origin main

推送本地分支:

bash

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

删除远程分支:

bash

git push origin --delete feature-branch

5.3 克隆与同步

克隆指定分支:

bash

git clone -b branch-name https://github.com/user/repo.git

同步远程分支列表:

bash

git fetch origin

六、高级操作

6.1 Cherry-pick(选择性合并)

挑选单个提交:

bash

git cherry-pick <commit-hash>

挑选多个提交:

bash

git cherry-pick <hash1> <hash2> <hash3>

挑选连续提交范围:

bash

git cherry-pick <start-hash>^..<end-hash>

6.2 Stash(暂存工作区)

保存当前工作进度:

bash

git stash
# 添加描述信息
git stash save "Work in progress"
# 包含未跟踪文件
git stash -u

查看stash列表:

bash

git stash list

应用stash:

bash

# 应用最近的stash
git stash apply
# 应用指定stash
git stash apply stash@{1}
# 应用并删除stash
git stash pop

删除stash:

bash

# 删除最近的stash
git stash drop
# 删除指定stash
git stash drop stash@{1}
# 清空所有stash
git stash clear

6.3 标签管理

创建轻量标签:

bash

git tag v1.0.0

创建附注标签(推荐):

bash

git tag -a v1.0.0 -m "Initial stable release"

对历史提交打标签:

bash

# 先查找提交哈希
git log --oneline
# 对指定提交打标签
git tag -a v0.9.0 <commit-hash> -m "Previous release"

查看标签:

bash

git tag
git show v1.0.0

推送标签:

bash

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

删除标签:

bash

# 删除本地标签
git tag -d v1.0.0
# 删除远程标签
git push origin --delete v1.0.0

6.4 .gitignore文件

创建.gitignore文件:

bash

touch .gitignore

常用配置示例:

plaintext

# 忽略操作系统文件
.DS_Store
Thumbs.db# 忽略日志文件
*.log# 忽略环境变量文件
.env
.env.local# 忽略依赖文件夹
node_modules/
vendor/
dist/
build/# 忽略IDE配置
.idea/
.vscode/
*.swp
*.swo

如果文件已被跟踪,需要先移除:

bash

git rm --cached filename

七、冲突解决

7.1 冲突产生原因

Git冲突通常在以下情况发生:

  • 同一文件的同一部分在不同分支被修改
  • 一个分支删除文件,另一个分支修改该文件
  • 二进制文件的修改无法自动合并

7.2 解决冲突步骤

  1. 发现冲突:Git会在合并时提示冲突文件

  2. 查看冲突文件

bash

git status

  1. 编辑冲突文件

    冲突文件中会标记冲突区域:

plaintext

<<<<<<< HEAD
当前分支的内容
=======
待合并分支的内容
>>>>>>> feature-branch

  1. 解决冲突

    手动编辑文件,保留需要的内容,删除冲突标记

  2. 标记为已解决

bash

git add <resolved-file>

  1. 完成合并

bash

git commit -m "Resolve merge conflicts"

7.3 冲突解决工具

使用VS Code解决冲突:

bash

git config --global merge.tool vscode
git mergetool

快速选择版本:

bash

# 保留当前分支版本
git checkout --ours <file>
# 采用传入更改
git checkout --theirs <file>

七、Git工作流

7.1 功能分支工作流

适合中小团队协作:

bash

# 1. 确保主分支是最新的
git checkout main
git pull# 2. 创建功能分支
git checkout -b feature/feature-name# 3. 开发并提交
git add .
git commit -m "feat: implement feature"# 4. 定期同步主分支更新
git fetch origin
git rebase origin/main# 5. 推送分支
git push origin feature/feature-name# 6. 合并完成后删除分支
git checkout main
git merge feature/feature-name
git branch -d feature/feature-name

7.2 Git Flow工作流

适合有计划发布周期的项目,定义了多种分支类型:

  • main:生产环境代码
  • develop:开发集成分支
  • feature/*:功能开发分支
  • release/*:发布准备分支
  • hotfix/*:紧急修复分支

基本操作流程:

bash

# 1. 从develop创建功能分支
git checkout develop
git checkout -b feature/new-feature# 2. 功能完成后合并回develop
git checkout develop
git merge --no-ff feature/new-feature
git branch -d feature/new-feature# 3. 创建发布分支
git checkout -b release/1.0.0 develop# 4. 发布完成后合并到main和develop
git checkout main
git merge --no-ff release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"git checkout develop
git merge --no-ff release/1.0.0
git branch -d release/1.0.0# 5. 紧急修复
git checkout main
git checkout -b hotfix/1.0.1
# 修复完成后合并到main和develop
git checkout main
git merge --no-ff hotfix/1.0.1
git tag -a v1.0.1 -m "Hotfix 1.0.1"git checkout develop
git merge --no-ff hotfix/1.0.1
git branch -d hotfix/1.0.1

7.3 GitHub Flow工作流

适合持续部署的项目,流程简洁:

  1. 从main分支创建功能分支
  2. 提交更改并推送到远程
  3. 创建Pull Request
  4. 代码审查通过后合并到main
  5. 自动部署

八、Git最佳实践

8.1 提交规范

采用Conventional Commits规范:

bash

# 格式: type(scope): description
git commit -m "feat(auth): add oauth2 integration"
git commit -m "fix(api): resolve timeout issues"
git commit -m "docs(readme): update installation instructions"
git commit -m "refactor(database): optimize query performance"

常用类型:

  • feat: 新功能
  • fix: 错误修复
  • docs: 文档更新
  • style: 代码格式调整
  • refactor: 代码重构
  • perf: 性能优化
  • test: 添加测试
  • chore: 构建过程或辅助工具变动

8.2 分支命名规范

推荐格式:

plaintext

feature/feature-name
bugfix/bug-description
hotfix/critical-issue
docs/documentation-update
refactor/code-improvement

8.3 代码审查与PR流程

创建审查友好的PR:

bash

# 保持提交粒度适中
git add auth/login.py
git commit -m "feat(auth): implement basic login"
git add auth/logout.py
git commit -m "feat(auth): add logout functionality"

8.4 避免常见错误

不要直接推送到主分支:

bash

# 错误
git push origin main# 正确
git push origin feature/feature-name
# 然后通过PR合并

不要修改已推送的公共历史:

bash

# 危险操作,会重写历史
git rebase -i HEAD~3
git push --force# 安全替代方案
git commit --fixup <commit-hash>

九、Git钩子

Git钩子是在特定Git命令执行前后自动运行的脚本,位于.git/hooks目录。

常用钩子:

  • pre-commit: 提交前执行,可用于代码检查
  • commit-msg: 验证提交信息格式
  • pre-push: 推送前执行,可用于运行测试

配置示例(pre-commit钩子):

bash

#!/bin/sh
# 提交前运行代码检查
npm run lint
# 运行测试
npm test

启用钩子:

bash

chmod +x .git/hooks/pre-commit
cp .git/hooks/pre-commit.sample .git/hooks/pre-commit

十、常见问题与解决方案

10.1 撤销已推送的提交

创建恢复提交:

bash

git revert <commit-hash>
git push origin main

10.2 找回丢失的提交

使用reflog查找提交:

bash

git reflog
# 找到需要恢复的提交哈希后
git checkout <commit-hash>
# 创建新分支保留该提交
git checkout -b recover-branch

10.3 处理大型文件

使用Git LFS(Large File Storage):

bash

# 安装Git LFS
git lfs install
# 跟踪大型文件
git lfs track "*.psd"
git add .gitattributes

10.4 减少仓库大小

清理历史中的大文件:

bash

# 查找大文件
git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | paste -sd '|' -`# 使用BFG Repo-Cleaner工具清理
bfg --strip-blobs-bigger-than 100M my-repo.git

十一、总结

        Git是一个功能强大的版本控制系统,掌握它需要理解其核心概念和工作流程。本教程涵盖了从基础安装配置到高级操作的全部内容,包括:

  1. Git的核心概念和工作原理
  2. 本地仓库操作和远程协作
  3. 分支管理和合并策略
  4. 高级功能如rebase、cherry-pick和stash
  5. 冲突解决和工作流设计
  6. 最佳实践和常见问题处理

        通过持续实践这些命令和工作流,你将能够高效地使用Git进行版本控制和团队协作。记住,熟练掌握Git的关键在于理解其设计思想并经常使用。

附录:Git命令速查表

基础操作

  • git init: 初始化仓库
  • git add: 添加文件到暂存区
  • git commit: 提交暂存区到仓库
  • git status: 查看工作区状态
  • git log: 查看提交历史

分支操作

  • git branch: 列出/创建分支
  • git checkout: 切换分支
  • git switch: 切换分支(新版)
  • git merge: 合并分支
  • git rebase: 变基操作

远程操作

  • git clone: 克隆远程仓库
  • git pull: 拉取远程更新
  • git push: 推送本地分支
  • git remote: 管理远程仓库

高级操作

  • git cherry-pick: 选择性合并提交
  • git stash: 暂存工作区
  • git tag: 标签管理
  • git reset: 重置当前HEAD
  • git revert: 创建恢复提交

冲突解决

  • git mergetool: 使用工具解决冲突
  • git checkout --ours/--theirs: 选择版本
  • git add: 标记冲突已解决

http://www.dtcms.com/a/503556.html

相关文章:

  • 课程视频网站建设的必要性色母图片
  • GEO内容更新与迭代策略:趋势话题的快速响应机制
  • 【Spring】Spring事务和事务传播机制
  • php网站开发源码网站开发部门结构
  • 03-流程控制语句-导读
  • MATLAB基于混合算法改进灰色模型的装备故障预测
  • Next.JS环境搭建,对接Rust的RESTful API
  • 目前流行的网站分辨率做多大自己做网站需要备份么
  • NativeScript-Vue 开发指南:直接使用 Vue构建原生移动应用
  • 珠海市横琴建设局网站html网站自带字体怎么做
  • 看汽车图片的网站可以做壁纸差异基因做聚类分析网站
  • 了解制造过程中的BOM类型
  • 小九源码-springboot088-宾馆客房管理系统
  • 数字芯片的版图和制造--被称为3极管的晶体管却有4极!
  • 专门做优惠劵的网站专业的销售网站
  • 从0到1学习Qt -- 内存管理与乱码问题
  • html`<mark>`
  • C++ stack 和 queue
  • 洛谷 P1035:[NOIP 2002 普及组] 级数求和 ← double
  • C程序中的大规模程序设计:从模块化到抽象数据类型
  • 响应式网站高度如何计算seo自动点击排名
  • 企业网站引导页模板江西门户网站建设
  • Prim 算法和 Kruskal 算法应用场景
  • 雷电模拟器环境配置
  • 南沙移动网站建设中元建设集团网站
  • 公司网站百度推广wordpress没中文插件
  • 手写Spring第7弹:Spring IoC容器深度解析:XML配置的完整指南
  • java的异常体系
  • pybullet
  • Filebeat、ELK安装与数据同步