📌 软件教程

Git版本控制入门与实战完整教程:代码管理的必备技能

Git怎么用?本教程从安装配置、基本操作、分支管理到远程协作,手把手教你掌握Git版本控制,代码管理不再混乱,团队协作效率翻倍。

✍️ 口袋里的星星 🕒 2026-09-11 09:00 👁 17 阅读 📖 5,239 字 ⏱ 约 11 分钟

Git版本控制入门与实战完整教程:代码管理的必备技能

我刚开始写代码的时候,项目文件夹里全是"最终版""最终版2""绝对最终版"这种文件,改坏了不知道怎么回去。后来学了Git,所有版本都能管理,随时回退,分支随便开,再也不怕改坏代码。Git是程序员必备技能,今天从零开始教你用Git。

什么是版本控制

版本控制就是记录文件的每次修改,随时能查看历史、回退到任意版本。就像游戏的存档系统,随时读档。

没有版本控制的问题:

1. 代码改坏了回不去。

2. 多人改同一份代码,合并困难。

3. 不知道谁改了什么、什么时候改的。

4. 想试新功能又怕搞坏现有代码。

Git解决了这些问题,是目前最流行的版本控制系统。

Git是分布式版本控制,每台电脑都有完整仓库,不依赖服务器。对比以前的SVN(集中式),Git更快更灵活。

安装Git

Windows:去git-scm.com下载安装包,一路下一步。安装后右键菜单会有"Git Bash Here"。

Mac:终端输入git,会提示安装Xcode命令行工具,按提示装。或者用brew install git。

Linux:apt install git(Ubuntu/Debian),yum install git(CentOS)。

装完验证:终端输入git --version,能看到版本号就行。

我Windows上用Git Bash(自带终端),比cmd好用,支持Linux命令。

配置Git

安装后先配置用户信息:

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

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

配置默认分支名:

git config --global init.defaultBranch main

配置编辑器(可选):

git config --global core.editor "code --wait"(用VS Code编辑提交信息)

查看配置:

git config --list

这些配置只需做一次,全局生效。我配置完就再没改过。

Git基本概念

几个核心概念要先搞清楚:

仓库(Repository):Git管理的项目目录,里面有个.git隐藏文件夹,存所有版本数据。

工作区(Working Directory):你看到的文件夹,实际编辑文件的地方。

暂存区(Staging Area):git add后文件进入暂存区,是提交前的准备区。

本地仓库(Local Repository):git commit后文件存到本地仓库,形成版本记录。

远程仓库(Remote Repository):GitHub/Gitee上的仓库,多人协作的中心。

流程:工作区 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库。

我刚学时老是搞混暂存区和本地仓库,后来理解了:暂存区是"购物车",commit是"结账"。

创建仓库

方法一:在现有目录初始化

cd到项目目录,输入git init。会创建一个.git文件夹,这个目录就成了Git仓库。

方法二:克隆远程仓库

git clone https://github.com/ 用户名/仓库名.git

会把远程仓库下载到本地,自动关联远程。

我一般先在GitHub建仓库,然后clone到本地。

基本操作

查看状态:git status。看哪些文件改了、哪些在暂存区。这个命令最常用,随时敲。

添加到暂存区:

git add 文件名:添加指定文件。

git add .:添加所有修改。

git add *.js:添加所有js文件。

提交:

git commit -m "提交说明"

提交说明要写清楚改了什么,别写"update"这种没用的。好的提交说明:fix: 修复登录页空白问题。add: 新增用户头像上传功能。

提交规范建议用约定式提交:feat(新功能)、fix(修bug)、docs(文档)、style(格式)、refactor(重构)、test(测试)、chore(杂项)。

查看历史:git log。看所有提交记录。git log --oneline简洁模式,一行一条。git log --graph看分支图。

查看差异:git diff。看工作区哪些改了。git diff --staged看暂存区的差异。

撤销修改:

git checkout -- 文件名:撤销工作区修改(还没add)。

git reset HEAD 文件名:从暂存区撤回(add了但没commit)。

git reset --soft HEAD~1:撤销上次commit,保留修改。

git reset --hard HEAD~1:撤销上次commit,修改也丢了。慎用。

我刚开始用git reset --hard丢过代码,后来学会先用--soft。

忽略文件

有些文件不想纳入版本控制(临时文件、编译产物、密钥),用.gitignore文件忽略。

创建.gitignore文件,写规则:

node_modules/:忽略node_modules目录。

.env:忽略环境变量文件。

*.log:忽略所有日志文件。

dist/:忽略打包目录。

.DS_Store:忽略Mac系统文件。

不同语言有不同的.gitignore模板,去github.com/github/gitignore找对应语言的模板,复制来用。

我每个项目第一件事就是建.gitignore,别把node_modules提交上去(几百兆)。

分支管理

分支是Git最强大的功能,可以同时开发多个功能互不影响。

查看分支:git branch。前面带*的是当前分支。

创建分支:git branch 分支名。或git checkout -b 分支名(创建并切换)。

切换分支:git checkout 分支名。或git switch 分支名(新版推荐)。

合并分支:先切到目标分支(比如main),git merge 源分支名。

删除分支:git branch -d 分支名(合并后删除)。git branch -D 分支名(强制删除)。

重命名分支:git branch -m 新名字。

分支策略:

main/master:稳定版本,只合并测试好的代码。

develop:开发分支,日常开发在这。

feature/xxx:功能分支,开发新功能。

fix/xxx:修bug分支。

hotfix/xxx:紧急修复。

我工作流:从main切出feature分支开发,完成后合并回main,删掉feature分支。保持main随时可用。

合并冲突

两个分支改了同一行代码,合并时冲突。Git会标记冲突部分:

<<<<<<< HEAD

你的代码

=======

别人的代码

>>>>>>> 分支名

解决冲突:手动编辑文件,选择保留哪部分(或两部分合并),删掉冲突标记。然后git add文件,git commit。

冲突解决技巧:

1. 看清楚两边的改动,理解为什么冲突。

2. 跟改代码的同事沟通,确认保留哪部分。

3. 用git diff看冲突。

4. VS Code有冲突解决界面,选"接受当前""接受传入""接受两者",比手动改方便。

我刚开始遇到冲突就慌,后来用VS Code的合并编辑器,点击选择就行,很方便。

远程仓库

远程仓库在GitHub、Gitee、GitLab上。

添加远程:git remote add origin https://github.com/ 用户名/仓库名.git。origin是远程的别名。

查看远程:git remote -v。

推送到远程:git push origin main。第一次推用git push -u origin main,-u设置上游关联,以后直接git push。

拉取远程:git pull origin main。拉取并合并。

fetch和pull的区别:git fetch只下载不合并,git pull下载并合并。建议用fetch看清楚再合并。

克隆远程:git clone 仓库地址。自动关联远程。

我每天工作流:早上git pull拉最新代码,开发完git push推上去。

SSH免密配置

每次push输密码麻烦,配SSH免密。

1. 生成SSH密钥:ssh-keygen -t ed25519 -C "你的邮箱"。一路回车。

2. 密钥在~/.ssh/目录下,id_ed25519是私钥(别给任何人),id_ed25519.pub是公钥。

3. 复制公钥内容:cat ~/.ssh/id_ed25519.pub。

4. GitHub设置-SSH and GPG keys-New SSH key,粘贴公钥。

5. 测试:ssh -T git@github.com。看到"You've successfully authenticated"就行。

6. 远程地址改成SSH格式:git remote set-url origin git@github.com:用户名/仓库名.git。

配完后push不用输密码了。我配了SSH后再没输过密码。

实用技巧

几个进阶技巧:

1. stash暂存:git stash暂存当前修改,git stash pop恢复。切分支但不想提交时用。

2. cherry-pick:git cherry-pick 提交hash,把某个提交单独应用到当前分支。

3. tag标签:git tag v1.0.0标记版本。git push origin v1.0.0推送标签。

4. rebase变基:git rebase main,把当前分支的提交移到main最新提交之后。比merge历史更整洁,但会改写历史,团队协作慎用。

5. reflog:git reflog看所有操作记录,包括reset掉的。救命命令,reset --hard丢代码能用reflog找回。

6. alias别名:git config --global alias.st status,以后git st等于git status。

7. bisect二分查找bug:git bisect start,git bisect bad,git bisect good 提交hash,自动二分定位引入bug的提交。

我用reflog找回过好几次误删的代码,这个命令一定要知道。

GitHub使用

GitHub是全球最大的代码托管平台。

创建仓库:登录GitHub-New repository,填名字,选Public/Private,Create。

Fork:复制别人的仓库到自己账号,方便修改。

Pull Request(PR):把自己分支的修改请求合并到目标仓库。开源协作的核心。

Issues:报bug、提建议、讨论问题。

GitHub Pages:免费托管静态网站。

Actions:CI/CD自动化。

Stars:收藏项目。

我GitHub上放了几个开源项目,也给别人提过PR,开源协作很有意思。

团队协作流程

标准团队协作流程:

1. 项目负责人在GitHub建仓库,设好分支保护规则(main不能直接push)。

2. 每人clone仓库或fork。

3. 开发前git pull拉最新代码。

4. 切feature分支开发:git checkout -b feature/新功能。

5. 开发中频繁commit,小步提交。

6. 开发完push到远程:git push origin feature/新功能。

7. 在GitHub发Pull Request,请求合并到main。

8. 团队review代码,提意见。

9. 修改后合并。

10. 删除feature分支。

这个流程叫GitHub Flow,简单实用。大项目用Git Flow,更复杂。

常见问题解决

问题1:push被拒绝(non-fast-forward)

原因:远程有你本地没有的提交。解决:git pull先拉取合并,再push。

问题2:commit了不该commit的文件

解决:git rm --cached 文件名(从仓库移除但保留本地文件),加到.gitignore,重新commit。

问题3:提交信息写错了

解决:git commit --amend -m "新的信息"。修改最近一次提交。

问题4:代码回退后想恢复

解决:git reflog找到之前的commit,git reset --hard 提交hash。

问题5:合并冲突太多不知道怎么处理

解决:git merge --abort放弃合并,回到合并前状态。理清思路再来。

我的Git习惯

分享我的Git使用习惯:

1. 每个小功能完成就commit,别攒一大堆。

2. commit信息写清楚,用约定式提交格式。

3. 每天push一次,备份到远程。

4. 开新功能一定切分支,不在main上直接改。

5. 合并前先pull,减少冲突。

6. .gitignore第一时间建好。

7. 善用git status和git log,随时了解状态。

这套习惯用了三年,代码管理井井有条,从没丢过代码。

总结

Git是程序员的必备技能,看起来命令多,其实常用的就那十几个:init、clone、add、commit、push、pull、status、log、branch、checkout、merge。把这些用熟,日常开发够了。进阶的rebase、cherry-pick、bisect用到再学。Git学好了,代码管理不再混乱,团队协作效率翻倍。

🔠 字号

看累了?去工具区松一松 🧘

白噪音、深呼吸、三分钟小游戏,满血复活再回来。