Git 入门以及常用命令介绍

Git 入门以及常用命令介绍
VenenoSix241. Git 是什么?
1.1 为什么需要版本控制
在软件开发或文档写作中,我们经常需要面对以下问题:
- 不小心删除了重要代码,希望能恢复。
- 想对比当前版本与三天前的版本有何不同。
- 多人协作时,如何安全地合并各自修改的代码。
- 需要同时维护一个稳定版和一个正在开发的新功能版。
版本控制系统(Version Control System, VCS)正是为解决这些问题而设计的。它能够记录文件内容随时间变化的每一个版本,方便您随时查看历史记录或回退到某个特定版本。
1.2 Git 的核心优势:分布式
Git 是一款免费、开源的分布式版本控制系统。与集中式系统(如 SVN)不同,Git 的主要特点是“分布式”。
- 集中式:所有开发者都从一个中央服务器拉取(check out)代码,并向其提交(commit)代码。如果中央服务器宕机,所有人都无法协作。
- 分布式:每个开发者都拥有一个完整的代码仓库(repository),包含全部的提交历史。开发者可以在本地进行提交、创建分支、查看历史等绝大部分操作,无需联网。协作时,再将本地的修改推送(push)给团队约定的共享远程仓库(例如 GitHub 上的仓库)。
2. 核心概念:理解 Git 的工作模式
2.1 三个区域:工作区、暂存区、本地仓库
要真正理解 Git,必须先理解它的三个核心区域。这是 Git 所有操作的基础。
![[需配图:Git 三个区域工作流示意图。图示应包含“工作区(Working Directory)”、“暂存区(Staging Area)”、“本地仓库(Local Repository/.git)”,并用箭头清晰标出 git add
和 git commit
命令如何使文件在这三个区域之间流转。]]
- 工作区 (Working Directory):您在电脑上能直接看到并编辑的文件和文件夹。这是您进行实际工作的区域。
- 暂存区 (Staging Area):一个临时的存储区域,用于存放您“打算”在下一次提交中包含的变更。它像一个待办事项清单,让您精确控制每次提交要包含哪些内容。
- 本地仓库 (Local Repository):当您执行提交操作后,暂存区的内容会被永久性地记录到本地仓库中,形成一个新的版本快照。这个仓库位于您项目文件夹下的一个隐藏目录
.git
中。
基本工作流:
① 在工作区修改文件 → ② 使用 git add
将修改的快照添加到暂存区 → ③ 使用 git commit
将暂存区的内容提交到本地仓库。
2.2 对象的快照(Snapshot)
Git 关心的是文件内容,而不是文件名。每次提交时,Git 主要是为全部文件制作一个“快照”,并存储一个指向该快照的引用。如果文件没有变化,Git 不会重复存储,而是只保留一个指向上一次存储版本的链接。
3. 初始设置与配置
3.1 安装 Git
请访问 Git 官方网站 下载对应您操作系统的安装包并完成安装。安装后,可以在终端或命令行工具中验证是否成功:
1 | git --version |
3.2 首次配置
在开始使用前,您需要设置您的用户名和邮箱地址。这些信息会嵌入到您的每一次提交中。
1 | git config --global user.name "Your Name" |
--global
参数表示这台机器上的所有 Git 仓库都会使用这个配置。
4. 本地仓库:核心工作流
4.1 创建仓库 (git init
)
进入您的项目文件夹,执行以下命令来初始化一个新的 Git 仓库。
1 | cd /path/to/your/project |
该命令会创建一个 .git
隐藏子目录,您的 Git 仓库就建立好了。
4.2 检查状态 (git status
)
这是最常用的命令,用于查看当前工作区和暂存区的状态。
1 | git status |
它会告诉您哪些文件被修改了、哪些文件在暂存区、哪些文件还未被 Git 跟踪。
4.3 添加文件到暂存区 (git add
)
使用此命令将工作区的变更添加到暂存区。
1 | # 添加单个文件 |
4.4 提交更新到仓库 (git commit
)
将暂存区的所有内容提交到本地仓库,生成一个新的版本。
1 | git commit -m "一个清晰的提交信息,说明本次提交的目的" |
-m
参数允许您直接在命令行中输入提交信息。如果没有 -m
,Git 会启动您配置的默认文本编辑器让您输入。
4.5 查看提交历史 (git log
)
此命令用于查看从近到远的提交历史记录。
1 | git log |
常用参数:
--oneline
:将每次提交压缩到一行显示。--graph
:以文本图形的方式展示分支的合并历史。--all
:显示所有分支的历史。
5. 分支管理:Git 的精髓
分支是 Git 用于支持并行开发的核心功能。您可以创建一个新分支来进行新功能开发或 Bug 修复,而不会影响到主分支(通常是 main
或 master
)的稳定性。
5.1 创建与切换分支 (git branch
& git switch
)
1 | # 查看所有本地分支 |
注意:在较旧的 Git 版本中,切换分支使用 git checkout new-feature
。switch
是较新的、专门用于分支切换的命令。
5.2 合并分支 (git merge
)
当您在新分支上的工作完成后,可以将其合并回主分支。
1 | # 1. 首先,切换回目标分支(例如 main) |
5.3 删除分支 (git branch -d
)
合并完成后,如果不再需要该分支,可以将其删除。
1 | git branch -d feature-x |
-d
是 --delete
的缩写,它会确保在删除前该分支的修改已经被合并。如果需要强制删除一个未合并的分支,使用 -D
。
6. 远程仓库:协作与备份
远程仓库是托管在网络上的项目版本库,最常见的平台是 GitHub、GitLab 和 Bitbucket。
6.1 克隆现有仓库 (git clone
)
如果您想获取一个远程仓库的完整拷贝,请使用 clone
。
1 | git clone https://github.com/example/project.git |
这会在当前目录下创建一个 project
文件夹,其中包含完整的仓库历史。
6.2 关联远程仓库 (git remote
)
如果您在本地初始化了一个仓库,并希望将其关联到一个远程仓库。
1 | # 1. 添加一个名为 origin 的远程仓库地址(origin 是一个惯用名) |
6.3 推送更新 (git push
)
将本地仓库的提交推送到远程仓库。
1 | # 将当前分支的提交推送到名为 origin 的远程仓库 |
main
是您想要推送的本地分支名。
6.4 拉取更新 (git pull
)
从远程仓库获取最新的变更,并与您当前的工作分支合并。
1 | git pull origin main |
git pull
实际上是 git fetch
(拉取)和 git merge
(合并)两个命令的组合。
7. 常用辅助命令
7.1 忽略文件 (.gitignore
)
在项目根目录下创建一个名为 .gitignore
的文件,将不需要纳入版本控制的文件或目录(如依赖文件夹 node_modules
、日志文件 *.log
、操作系统生成的文件 .DS_Store
)写入其中,Git 就会自动忽略它们。
7.2 查看差异 (git diff
)
git diff
:查看工作区与暂存区之间的差异。git diff --staged
或git diff --cached
:查看暂存区与本地仓库(最后一次提交)之间的差异。
7.3 版本回退 (git reset
& git restore
)
这是一个强大的命令,但使用时需谨慎,因为它会修改提交历史。
- 撤销暂存:如果您用
git add
添加错了文件,可以用git restore --staged <filename>
将其移出暂存区。 - 放弃工作区修改:要放弃某个文件的所有本地修改,恢复到上一次提交的状态,使用
git restore <filename>
。 - 回退到历史版本(危险操作):
git reset --hard HEAD~1
会将仓库回退到上一个版本,并丢弃此后的所有提交以及工作区和暂存区的所有变更。请务必在确认无误后使用。[?](此处的危险性提示是否足够,或需要更详细的案例说明,请您定夺)。
8. 总结与后续学习
本教程覆盖了 Git 日常使用的核心命令。熟练掌握这些命令,足以应对绝大多数个人和团队协作场景。
后续您可以进一步学习:
- 变基 (
rebase
):与merge
不同的另一种合并分支的策略,可以保持提交历史的线性整洁。 - 储藏 (
stash
):临时保存您当前工作区的修改,以便切换到其他分支工作。 - 标签 (
tag
):为重要的提交(如版本发布)创建一个永久性的标记。