Git 完全使用指南:从入门到精通

144 阅读9分钟

Git 完全使用指南:从入门到精通

Git 是目前世界上最流行的分布式版本控制系统,被广泛应用于软件开发和内容管理。本教程将从基础概念讲起,逐步深入,帮助你掌握 Git 的核心功能和高级技巧。

目录

*   1. Git 简介

*   2. Git 安装

*   3. 基本配置

*   4. 核心概念

*   5. 基本操作

*   6. 分支管理

*   7. 远程仓库

*   8. 高级技巧

*   9. 常见问题

1. Git 简介

Git 是由 Linus Torvalds 于 2005 年为开发 Linux 内核而创建的分布式版本控制系统。与集中式版本控制系统(如 SVN)不同,Git 不需要中央服务器即可工作,每个开发者都拥有完整的代码仓库副本。

Git 的主要优势:

*   分布式架构,本地即可完成大部分操作

*   强大的分支管理能力

*   高效的版本控制,只记录文件的变化

*   支持离线工作

*   数据完整性高,所有数据都有校验和

2. Git 安装

Windows 系统

1.  访问 Git 官网 下载安装程序

2.  运行安装程序,按照默认选项安装即可

3.  安装完成后,打开命令提示符或 PowerShell,输入 git --version 验证安装

macOS 系统

1.  使用 Homebrew 安装:brew install git

2.  或从 Git 官网 下载安装包

3.  验证安装:git --version

Linux 系统

*   Ubuntu/Debian:sudo apt-get install git

*   Fedora:sudo dnf install git

*   CentOS:sudo yum install git

*   验证安装:git --version

3. 基本配置

安装完成后,需要进行基本配置,至少要设置用户名和邮箱,这些信息会出现在你的提交记录中。

# 设置用户名


git config --global user.name "Your Name"


# 设置邮箱


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


# 查看配置信息


git config --list


# 配置默认编辑器(可选)


git config --global core.editor "code --wait"  # VS Code


# 或


git config --global core.editor "vim"  # Vim

--global 选项表示这是全局配置,会应用到当前用户的所有 Git 仓库。如果只想对当前仓库进行配置,可以去掉该选项。

4. 核心概念

在开始使用 Git 之前,理解以下核心概念非常重要:

*   工作区(Working Directory) :你当前正在操作的文件目录

*   暂存区(Staging Area) :用于临时存放即将提交的文件变更

*   本地仓库(Local Repository) :存储在本地的版本历史数据库

*   远程仓库(Remote Repository) :存储在网络上的共享仓库(如 GitHub、GitLab 等)

*   提交(Commit) :将暂存区的变更保存到本地仓库的操作,每个提交都有唯一的哈希值标识

*   分支(Branch) :独立的开发线,可以从主分支创建,用于开发新功能或修复 bug

Git 工作流程简图:

工作区 → 暂存区 → 本地仓库 → 远程仓库

5. 基本操作

初始化仓库

# 创建新目录并初始化仓库


mkdir myproject


cd myproject


git init


# 或在现有目录初始化仓库


cd existing-project


git init

执行 git init 后,会在当前目录创建一个隐藏的 .git 文件夹,里面包含了 Git 仓库的所有元数据。

克隆远程仓库

如果项目已经存在于远程仓库,可以直接克隆到本地:

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

查看文件状态

# 查看工作区和暂存区的状态


git status


# 简洁输出


git status -s

状态说明:

*   ??:未跟踪的文件

*   A:已添加到暂存区

*   M:已修改的文件

*   D:已删除的文件

添加文件到暂存区

# 添加指定文件


git add filename.txt


# 添加当前目录所有文件


git add .


# 添加所有修改和删除的文件,但不包括未跟踪的文件


git add -u


# 交互式添加


git add -i

提交到本地仓库

# 基本提交


git commit -m "提交说明"


# 跳过暂存区,直接提交已跟踪的修改


git commit -am "提交说明"


# 修改最后一次提交(谨慎使用,尤其是已推送到远程的提交)


git commit --amend

提交说明应清晰描述本次修改的内容,建议遵循 Conventional Commits 规范。

查看提交历史

# 查看完整提交历史


git log


# 简洁查看


git log --oneline


# 查看最近n次提交


git log -n 3


# 图形化展示分支历史


git log --graph --oneline --all


# 查看文件的修改历史


git log -- filename.txt

撤销操作

# 撤销工作区的修改(恢复到最近一次提交或暂存的状态)


git checkout -- filename.txt


# 撤销暂存区的修改(将文件从暂存区移回工作区)


git reset HEAD filename.txt


# 回退到指定版本(谨慎使用,会修改提交历史)


git reset --hard <commit-hash>


# 查看所有操作记录,以便恢复误操作


git reflog

6. 分支管理

分支是 Git 最强大的功能之一,它允许你在不影响主代码的情况下进行开发。

基本分支操作

# 查看所有分支


git branch


# 创建新分支


git branch feature-branch


# 切换到指定分支


git checkout feature-branch


# 创建并切换到新分支(上面两个命令的简写)


git checkout -b feature-branch


# 删除分支(确保已合并到主分支)


git branch -d feature-branch


# 强制删除未合并的分支


git branch -D feature-branch


# 给分支重命名


git branch -m old-name new-name

在 Git 2.23+ 版本中,可以使用 switch 命令代替 checkout 进行分支切换:

# 切换分支


git switch feature-branch


# 创建并切换到新分支


git switch -c feature-branch

合并分支

# 切换到目标分支(通常是主分支)


git checkout main


# 合并源分支到当前分支


git merge feature-branch

如果合并过程中出现冲突,Git 会提示哪些文件有冲突。你需要手动编辑这些文件解决冲突,然后执行 git addgit commit 完成合并。

变基操作

变基(rebase)是另一种整合分支的方式,它会将一个分支的修改应用到另一个分支上,形成线性的提交历史。

# 切换到要变基的分支


git checkout feature-branch


# 将 feature-branch 变基于 main 分支


git rebase main

变基与合并的区别:

*   合并会创建一个新的合并提交,保留分支历史

*   变基会改写提交历史,使提交记录更整洁

7. 远程仓库

远程仓库是团队协作的核心,常用的远程仓库服务有 GitHub、GitLab、Bitbucket 等。

远程仓库操作

# 查看远程仓库


git remote


# 查看远程仓库详细信息


git remote -v


# 添加远程仓库


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


# 重命名远程仓库


git remote rename old-name new-name


# 删除远程仓库


git remote remove origin

拉取和推送

# 从远程仓库拉取最新代码


git pull origin main


# 推送到远程仓库


git push origin main


# 推送新分支到远程仓库


git push -u origin feature-branch


# 拉取远程分支到本地(本地不存在该分支)


git checkout -b local-branch origin/remote-branch

-u 选项用于设置 upstream,之后可以直接使用 git pushgit pull 而无需指定远程和分支。

协作工作流

常见的 Git 工作流:

1.  集中式工作流:所有人都在 main 分支上工作,适合小型团队

2.  Feature Branch Workflow:每个功能在单独分支开发,完成后合并到主分支

3.  Gitflow Workflow:有严格的分支模型,包括 main、develop、feature、release、hotfix 等分支

4.  Forking Workflow:适合开源项目,通过 fork 仓库和 pull request 进行协作

8. 高级技巧

stash 暂存工作区

当你需要切换分支但不想提交当前修改时,可以使用 stash:

# 暂存当前工作区的修改


git stash


# 查看所有 stash


git stash list


# 应用最近的 stash 并保留 stash 记录


git stash apply


# 应用指定的 stash 并保留 stash 记录


git stash apply stash@{1}


# 应用最近的 stash 并删除 stash 记录


git stash pop


# 删除最近的 stash


git stash drop


# 删除所有 stash


git stash clear

cherry-pick 挑选提交

将某个分支的特定提交应用到当前分支:

# 挑选单个提交


git cherry-pick <commit-hash>


# 挑选多个连续提交(左开右闭区间)


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


# 包括 start-hash 在内的连续提交


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

忽略文件

创建 .gitignore 文件来指定不需要纳入版本控制的文件:

# 忽略所有 .log 文件


*.log


# 忽略 node_modules 目录


node_modules/


# 忽略特定文件


secret.txt


# 不忽略 .gitignore 和 README.md


!.gitignore


!README.md

标签管理

为重要的版本创建标签,通常用于发布版本:

# 创建轻量标签


git tag v1.0.0


# 创建带注释的标签


git tag -a v1.0.0 -m "版本 1.0.0"


# 查看所有标签


git tag


# 推送标签到远程仓库


git push origin v1.0.0


# 推送所有标签


git push origin --tags


# 检出标签(会进入分离头指针状态)


git checkout v1.0.0

9. 常见问题

如何撤销已经推送到远程的提交?

# 创建一个新的提交来撤销指定提交的更改


git revert <commit-hash>


git push origin main

如何找回误删除的分支?

# 查找分支最后一次提交的哈希值


git reflog


# 从该提交恢复分支


git checkout -b recovered-branch <commit-hash>

如何处理合并冲突?

1.  当 git mergegit rebase 提示冲突时,编辑冲突文件

2.  冲突部分会被 <<<<<<< HEAD=======>>>>>>> branch-name 标记

3.  编辑文件保留需要的部分,删除冲突标记

4.  执行 git add <conflict-file> 标记为已解决

5.  继续合并或变基过程(git commitgit rebase --continue

如何查看某个提交的具体修改?

git show <commit-hash>

如何比较两个分支的差异?

git diff branch1..branch2

总结

本教程涵盖了 Git 的基本概念和常用操作,但 Git 的功能远不止于此。要真正掌握 Git,建议结合实际项目进行练习,并查阅 Git 官方文档 深入学习。

记住,Git 是一个强大的工具,熟练使用它将极大提高你的开发效率和协作能力。遇到问题时,不要害怕使用 git help <command> 查看命令帮助,或搜索社区解决方案。

祝你在 Git 的学习和使用过程中取得进步!