Git 学习教程

全面的 Git 版本控制系统学习指南

目录

1. Git 简介

Git 是一个分布式版本控制系统,由 Linux 创始人 Linus Torvalds 在 2005 年创建,用于 Linux 内核的开发。它可以高效地处理从小型到大型项目的所有内容,并且是完全免费和开源的。

1.1 Git 的特点

1.2 Git 与其他版本控制系统的区别

与 SVN 等集中式版本控制系统不同,Git 不依赖中央服务器,每个人的本地仓库都包含完整的历史记录。这使得 Git 在网络不可用时仍然可以工作,并且速度更快。

学习建议

Git 的概念可能在开始时有些难以理解,尤其是对于从集中式版本控制系统转过来的人。但一旦掌握了基本原理,Git 将成为一个非常强大的工具。

2. 安装与配置

在开始使用 Git 之前,我们需要先安装 Git 并进行基本配置。

2.1 安装 Git

Windows

Git 官网 下载安装程序,按照向导进行安装。

macOS

可以通过 Homebrew 安装:

brew install git

Linux

对于 Debian/Ubuntu:

sudo apt-get update
sudo apt-get install git

对于 Fedora:

sudo dnf install git

2.2 配置 Git

安装 Git 后,需要设置用户名和邮箱:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

查看所有配置:

git config --list

2.3 配置 SSH 密钥

为了方便与 GitHub 等远程仓库通信,建议配置 SSH 密钥:

ssh-keygen -t rsa -b 4096 -C "你的邮箱"

然后将生成的公钥(通常在 ~/.ssh/id_rsa.pub)添加到 GitHub 的 SSH Keys 中。

配置建议

设置一些有用的别名可以提高工作效率,例如:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

3. 基本命令

Git 的基本工作流程包括:修改文件,将更改添加到暂存区,然后提交到版本库。

3.1 创建与克隆仓库

初始化新仓库:

git init

克隆现有仓库:

git clone https://github.com/username/repository.git

3.2 基本操作

查看状态:

git status

添加文件到暂存区:

git add filename    # 添加单个文件
git add .          # 添加所有更改

提交更改:

git commit -m "提交信息"

查看提交历史:

git log

交互式演示:基本 Git 操作

尝试下面的命令来体验 Git 的基本工作流程:

$ git init
Initialized empty Git repository in /project/.git/

$ echo "# My Project" > README.md

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add ..." to include in what will be committed)
        README.md

$ git add README.md

$ git commit -m "Initial commit"
[master (root-commit) a1b2c3d] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

3.3 撤销更改

撤销工作区的更改:

git checkout -- filename

撤销暂存区的更改:

git reset HEAD filename

修改最近的提交:

git commit --amend

4. 分支管理

分支是 Git 的核心概念之一,允许并行开发而不会相互干扰。

4.1 分支操作

查看分支:

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

创建与切换分支:

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

4.2 合并分支

将其他分支合并到当前分支:

git merge feature

解决合并冲突后标记为已解决:

git add filename
git commit

4.3 变基(Rebase)

与合并类似,但会重写提交历史:

git checkout feature
git rebase master
分支使用建议

一个常见的工作流是:

  • master:稳定的生产分支
  • develop:开发分支
  • feature/*:功能分支
  • hotfix/*:紧急修复分支

5. 远程仓库

远程仓库允许多人协作开发同一个项目。

5.1 管理远程仓库

查看远程仓库:

git remote -v

添加远程仓库:

git remote add origin https://github.com/username/repository.git

修改远程仓库地址:

git remote set-url origin https://github.com/username/new-repository.git

5.2 同步远程仓库

推送本地分支到远程:

git push origin master

拉取远程更新到本地:

git fetch origin       # 只下载远程更新
git pull origin master  # 下载并合并

5.3 处理远程分支

跟踪远程分支:

git checkout --track origin/feature

删除远程分支:

git push origin --delete feature

6. Git 工作流

Git 工作流是团队协作的最佳实践模式。

6.1 集中式工作流

所有开发者直接在 master 分支上工作,类似于 SVN。

6.2 功能分支工作流

每个新功能都在专门的分支上开发,然后合并回主分支。

6.3 Gitflow 工作流

严格的分支模型,包括 master、develop、feature、release 和 hotfix 分支。

master develop feature hotfix release

6.4 Forking 工作流

常用于开源项目,每个开发者都有自己的远程仓库副本。

7. 高级技巧

掌握以下高级技巧可以更有效地使用 Git。

7.1 储藏(Stash)

暂时保存修改而不提交:

git stash
git stash list
git stash apply
git stash pop
git stash drop

7.2 Cherry-pick

应用特定提交的更改:

git cherry-pick commitID

7.3 交互式变基

整理提交历史:

git rebase -i HEAD~3

7.4 子模块

在一个仓库中包含其他仓库:

git submodule add https://github.com/username/library.git lib
git submodule init
git submodule update

7.5 Git Hooks

自定义 Git 的行为:

#!/bin/sh
# pre-commit hook example
if git diff --cached | grep -q "console.log"
then
  echo "Warning: You have console.log statements in your code."
  exit 1
fi

8. 最佳实践

遵循这些最佳实践可以提高团队协作效率。

8.1 提交规范

编写明确的提交信息:

feat: 添加新功能
fix: 修复 bug
docs: 更新文档
style: 代码风格调整
refactor: 重构代码
test: 添加测试
chore: 构建过程或辅助工具的变动

8.2 频繁提交

小而频繁的提交比大而不频繁的提交更好,这样可以更容易追踪变更。

8.3 保持主分支稳定

确保主分支(如 master)始终可构建,可部署。

8.4 使用 .gitignore

忽略不应该提交的文件和目录:

# Node.js
node_modules/
npm-debug.log

# IDE
.idea/
.vscode/

# 构建输出
dist/
build/

# 环境变量
.env
.env.local
团队协作提示

建立清晰的分支策略和合并流程,并确保团队成员都了解并遵循。使用 Pull Request 或 Merge Request 进行代码审查。

9. 常见问题解决

使用 Git 时可能遇到的问题及解决方案。

9.1 撤销错误操作

撤销合并:

git merge --abort

撤销提交:

git reset --soft HEAD^   # 保留更改
git reset --hard HEAD^   # 丢弃更改

9.2 找回丢失的提交

使用 reflog 找回:

git reflog
git checkout commitID

9.3 解决合并冲突

当发生合并冲突时,Git 会在文件中标记冲突区域:

<<<<<<< HEAD
当前分支的内容
=======
要合并的分支的内容
>>>>>>> feature

手动编辑文件解决冲突,然后:

git add filename
git commit

9.4 清理仓库

删除未跟踪的文件:

git clean -n  # 预览将被删除的文件
git clean -f  # 删除文件

压缩仓库:

git gc