前言
Git作为当今最流行的分布式版本控制系统,已成为开发者必备的核心技能之一。本文将全面介绍Git的基本概念、常用命令和工作流程,帮助开发者高效管理代码版本。
这篇文章前面部分会解释Git的基本概念和教你如何安装Git以及一些基本的操作命令,后面呢,会有我用Trae编译器连接GitHub的实战操作,让我们一起期待一下🚀 🚀 🚀
一、Git简介与核心概念
1.1 什么是Git
Git是由Linus Torvalds(Linux之父)于2005年开发的一个开源的分布式版本控制系统,旨在高效处理从小型到超大型项目的版本管理。与集中式版本控制系统(如SVN)不同,Git的每个工作目录都是一个完整的版本库,拥有完整的历史记录和版本跟踪能力,不依赖网络连接和中央服务器。
1.2 Git核心概念
- 仓库(Repository) :包含项目所有文件和历史记录的地方,分为本地仓库和远程仓库。
- 工作区(Working Directory) :用户直接编辑文件的目录。
- 暂存区(Staging Area/Index) :准备提交的文件暂存区域。
- 提交(Commit) :对暂存区内容创建一个永久快照。
- 分支(Branch) :独立开发线,默认有master/main分支。
- HEAD:指向当前分支最新提交的指针。
二、Git安装与配置
2.1 安装Git
各平台安装方法:(主要讲述的是Windows版本)
- Windows:在Git for Windows官网下载,选择合适自己电脑的版本
如果有不懂的可以参考:在Windows上安装Git_哔哩哔哩_bilibili
- macOS:使用Homebrew(
brew install git
)或下载安装包 - Linux:使用包管理器(如
sudo apt-get install git
)
安装后验证:
在键盘上按Win + R
,输入cmd
打开终端
输入下面的命令检查自己的Git版本
git --version
2.2 基本配置
配置用户信息(首次使用Git前必须设置):
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
详细解释:
git config --global user.name "Your Name"
- 这条命令设置了 Git 的全局用户名。
"Your Name"
是你自己的名字或昵称(在公司一般都是用真实姓名,方便知道是谁修改了代码,如果自己用连接GitHub的话可以用你自己GitHub上的名字)--global
表示这个配置对当前用户的所有 Git 仓库生效。如果不加--global
,则只对当前仓库生效。
git config --global user.email "your.email@example.com"
- 这条命令设置了 Git 的全局用户邮箱。
"your.email@example.com"
是你的电子邮件地址,需要是有效的邮箱,通常与你在代码托管平台(如 GitHub、GitLab 等)上注册的邮箱一致。- 同样,
--global
表示该配置适用于当前用户的所有 Git 仓库。
其他常用配置:
# 设置默认编辑器为VSCode
git config --global core.editor "code --wait"
# 设置换行符处理(Linux/macOS用LF,Windows用CRLF)
git config --global core.autocrlf input # macOS/Linux
git config --global core.autocrlf true # Windows
# 启用彩色输出
git config --global color.ui auto
# 查看所有配置
git config --list
三、Git基础操作
3.1 创建仓库
初始化新仓库:
git init
克隆现有仓库:
git clone https://github.com/user/repo.git
git clone https://github.com/user/repo.git myfolder # 克隆到指定目录
3.2 文件状态与提交
查看文件状态:
git status
git status -s # 简洁输出
查看文件具体修改内容:
git diff readme.md # 查看readme.md文件的修改内容
添加文件到暂存区:
git add filename.txt # 添加特定文件
git add *.js # 添加所有js文件
git add . # 添加所有变化
git add -A # 添加所有变化(包括删除)
git add -p # 交互式添加
提交更改:
git commit -m "描述信息"
git commit -am "描述信息" # 跳过git add步骤(仅对已跟踪文件)
git commit --amend # 修改最近一次提交
注意:
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"
行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。
3.3 查看历史
查看提交历史:
git log
git log -p # 显示差异
git log --stat # 显示简略统计
git log --graph # 图形化显示分支
git log --oneline # 单行显示
git log -n 5 # 显示最近5条
git log --since="2023-01-01" # 显示这个时间的历史
git log --author="John" # 显示John作者的修改历史
git log --grep="bugfix" # 搜索提交信息
查看特定文件的修改历史:
git blame filename.txt # 逐行显示最后修改
git log -p filename.txt # 文件修改历史
四、分支管理
4.1 基本分支操作
查看分支:
git branch # 本地分支
git branch -v # 带最后提交信息
git branch -a # 所有分支(包括远程)
git branch -r # 远程分支
创建分支:
git branch new-branch # 创建分支
git checkout -b new-branch # 创建并切换
切换分支:
git checkout branch-name
git switch branch-name # Git 2.23+推荐方式
合并分支:
git merge branch-name # 合并指定分支到当前分支
git merge --no-ff branch-name # 禁用快进合并
删除分支:
git branch -d branch-name # 删除已合并分支
git branch -D branch-name # 强制删除未合并分支
4.2 远程分支
获取远程分支:
git fetch origin # 获取远程更新但不合并
git pull origin main # 获取并合并(相当于fetch+merge)
git pull --rebase origin main # 使用rebase方式合并
推送分支:
git push origin branch-name
git push -u origin branch-name # 设置上游分支
删除远程分支:
git push origin --delete branch-name
4.3 解决合并冲突
当合并出现冲突时:
- 打开冲突文件,Git会用
<<<<<<<
,=======
和>>>>>>>
标记冲突内容 - 手动修改文件解决冲突
- 添加解决后的文件:
git add filename.txt
- 完成合并:
git commit
使用工具解决冲突:
git mergetool
五、撤销与回退
5.1 撤销工作区修改
撤销工作区修改(未add):
git checkout -- filename.txt
git restore filename.txt # Git 2.23+推荐方式
撤销所有工作区修改:
git checkout -- .
git restore . # Git 2.23+
5.2 撤销暂存区修改
撤销暂存区修改(已add未commit):
git reset HEAD filename.txt
git restore --staged filename.txt # Git 2.23+
5.3 回退提交
回退到某个提交:
git reset --soft HEAD^ # 撤销commit但保留修改在暂存区
git reset --mixed HEAD^ # 撤销commit和add(默认)
git reset --hard HEAD^ # 彻底丢弃commit和修改
# 回退到特定commit
git reset --hard a1b2c3d
注意:--hard
操作会永久丢弃修改,慎用!
5.4 恢复已删除的提交
如果误删了提交,可以使用reflog找回:
git reflog # 查看所有操作历史
git reset --hard HEAD@{1} # 恢复到指定操作
六、远程仓库协作
6.1 管理远程仓库
查看远程仓库:
git remote -v
添加远程仓库:
git remote add origin https://github.com/user/repo.git
修改远程仓库URL:
git remote set-url origin https://new.url/repo.git
删除远程仓库:
git remote remove origin
6.2 标签管理
创建标签:
git tag v1.0.0 # 轻量标签
git tag -a v1.0.0 -m "版本1.0.0" # 附注标签
git tag -a v1.0.0 a1b2c3d # 为特定提交打标签
查看标签:
git tag
git show v1.0.0
推送标签:
git push origin v1.0.0 # 推送单个标签
git push origin --tags # 推送所有标签
删除标签:
git tag -d v1.0.0 # 删除本地标签
git push origin --delete v1.0.0 # 删除远程标签
七、高级技巧与最佳实践
7.1 储藏(Stash)临时修改
储藏当前修改:
git stash
git stash save "描述信息"
git stash -u # 包括未跟踪文件
查看储藏列表:
git stash list
恢复储藏:
git stash apply # 恢复但不删除储藏
git stash apply stash@{1} # 恢复特定储藏
git stash pop # 恢复并删除最新储藏
删除储藏:
git stash drop stash@{0}
git stash clear # 删除所有储藏
7.2 变基(Rebase)
变基操作(重写提交历史):
git rebase master # 将当前分支变基到master
git rebase -i HEAD~3 # 交互式变基(合并/修改最近3次提交)
变基过程中的操作:
p
或pick
:保留该提交r
或reword
:保留但修改提交信息e
或edit
:保留但暂停以修改提交s
或squash
:合并到前一个提交f
或fixup
:类似squash但丢弃提交信息d
或drop
:删除提交
7.3 子模块(Submodule)
添加子模块:
git submodule add https://github.com/user/repo.git path/to/submodule
初始化子模块:
git submodule init
git submodule update
# 或
git submodule update --init --recursive
更新子模块:
git submodule update --remote
八、Git工作流程
8.1 集中式工作流
类似于SVN,所有开发者向同一个中央仓库推送更改。
8.2 功能分支工作流
- 从master创建功能分支
- 在功能分支上开发
- 完成后合并回master
8.3 Git Flow
复杂但严谨的工作流,包含以下分支类型:
- master:生产代码
- develop:开发主线
- feature/*:功能开发
- release/*:准备发布
- hotfix/*:紧急修复
8.4 Forking工作流
常用于开源项目:
- 开发者fork主仓库
- 克隆自己的fork到本地
- 创建功能分支开发
- 推送到自己的fork
- 创建Pull Request请求合并
九、常见问题与解决方案
9.1 忽略文件
创建.gitignore
文件指定应忽略的文件模式:
# 忽略所有.log文件
*.log
# 忽略node_modules目录
node_modules/
# 不忽略重要的.log文件
!important.log
9.2 大文件处理
使用Git LFS(Large File Storage)管理大文件:
git lfs install
git lfs track "*.psd"
git add .gitattributes
9.3 清理仓库
删除历史中的大文件:
git filter-branch --tree-filter 'rm -f large-file.iso' HEAD
清理本地仓库:
git gc --prune=now --aggressive
十、 实战练习
我这边用的编译器主要是Trae(当然用VS Code应该也是一样的),然后远程仓库是最火的GitHub,下面让我们一起来实现一下吧,熟悉一下常用的一些命令
10.1 创建GitHub
仓库
打开GigHub
官网,没有账号的可以创建一下。
- 点击创建一个仓库
- 取一个项目名
xwj_Git_combat
,我是用自己的名字加上后面的项目名,然后写一段描述学习Git的基本操作
,之后就点击创建即可,其他的可以不动。
- 我们就可以看到下面的这些命令,根据下面的代码我们基本就可以连接上远程仓库GitHub了
# 初始化一个新的 Git 仓库,在当前目录创建 .git 子目录
git init
# 将 README.md 文件添加到暂存区(准备提交)
git add README.md
# 提交暂存区的更改到本地仓库,并添加提交信息"first commit"
git commit -m "first commit"
# 将当前分支重命名为 main(Git 默认分支名原是 master,现在常用 main)
git branch -M main
# 添加一个名为 origin 的远程仓库,指向 GitHub 上的仓库 URL
git remote add origin https://github.com/Acscanf/xwj_Git_combat.git
# 将本地 main 分支推送到远程 origin 仓库,并设置 upstream(上游)关联
# -u 参数使得以后可以直接用 git push 而不需要指定远程和分支
git push -u origin main
10.2 创建新的文件夹并初始化
如果你是第一次使用,那么一定要先看上面
2.2
的基础配置,再看下面的操作
- 在桌面上创建一个
Git_combat
的文件夹 - 在这个文件创建一个
readme.md
的文件,这个文件用来描述这个是用来干什么的,最后用Trae编译器打开这个文件夹
3. 在
readme.md
中添加一些内容,随便什么都可以,但最好是解释这个文件夹是干什么的
## Git命令的基础学习
### 1. 基础命令
1. git init 初始化仓库
2. git add 提交文件到暂存区
3. git commit 提交文件到仓库
4. 在根目录下添加一个
.gitignore
的目录,在里面添加node_modules/
内容,这个的意思是忽略node_modules目录,在上面的基础命令上也有讲
- 选择左边的
readme.md
,右键选择在集成终端中打开
6. 输入命令
git init
,把这个目录变成Git可以管理的仓库:
C:\Users\lenovo\Desktop\Git_combat>git init
Initialized empty Git repository in C:/Users/lenovo/Desktop/Git_combat/.git/
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
7. 使用
git add
命令,将readme.md文件添加到仓库,当然你也可以用git add .
这个命令是添加所有的文件,前面的基础命令里面有讲。
C:\Users\lenovo\Desktop\Git_combat>git add readme.md
8. 使用git commit
命令,将文件提交到本地仓库
C:\Users\lenovo\Desktop\Git_combat>git commit -m '修改了readme.md文件'
[master (root-commit) f295403] '修改了readme.md文件'
1 file changed, 5 insertions(+)
create mode 100644 readme.md
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"
行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
git commit
命令执行成功后会告诉你,1 file changed
:1个文件被改动(我们新添加的readme.txt文件);5 insertions
:插入了五行内容(readme.txt有五行内容)。
- 使用
git branch -M main
命令,重命名分支
C:\Users\lenovo\Desktop\Git_combat>git branch -M main
10. 使用git remote add origin https://github.com/Acscanf/xwj_Git_combat.git
命令
注意:这里你要用你自己的电脑上的那条命令,不要用我的,我们不一样,上面有讲
C:\Users\lenovo\Desktop\Git_combat>git remote add origin https://github.com/Acscanf/xwj_Git_combat.git
11. 使用git push -u origin main
命令
C:\Users\lenovo\Desktop\Git_combat>git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 351 bytes | 351.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/Acscanf/xwj_Git_combat.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
12. 我们可以去自己的GitHub
官网上看
点进去看看
- 总结
如果你是第一次连接可以按照下面的代码顺序依次执行(下面代码中一些内容要自己改一下,代码自己创建的GitHub仓库里面也有)
# 初始化一个新的 Git 仓库,在当前目录创建 .git 子目录
git init
# 将 README.md 文件添加到暂存区(准备提交)
git add README.md
# 提交暂存区的更改到本地仓库,并添加提交信息"first commit"
git commit -m "first commit"
# 将当前分支重命名为 main(Git 默认分支名原是 master,现在常用 main)
git branch -M main
# 添加一个名为 origin 的远程仓库,指向 GitHub 上的仓库 URL
git remote add origin https://github.com/Acscanf/xwj_Git_combat.git
# 将本地 main 分支推送到远程 origin 仓库,并设置 upstream(上游)关联
# -u 参数使得以后可以直接用 git push 而不需要指定远程和分支
git push -u origin main
当然如果你是为了继续提交代码,可以直接用三行代码提交成功
git add .
git commit -m '提示'
git push origin main
十一、总结
Git作为强大的版本控制系统,学习曲线虽然较陡,但一旦掌握将极大提升开发效率。本文涵盖了Git的主要功能和常用命令,建议读者:
- 从基础命令开始,逐步掌握更高级功能
- 多实践,创建测试仓库尝试各种命令
- 理解Git的工作原理而不仅是记住命令
- 遵循团队约定的工作流程
- 定期备份重要分支(特别是未推送的)
记住,Git的大部分操作都是可逆的,使用git reflog
可以找回很多"丢失"的提交。最重要的是保持定期提交的习惯,写好清晰的提交信息,这将使你的版本历史成为项目的宝贵财富而非负担。
最后,本文引用了一些简介 - Git教程 - 廖雪峰的官方网站中内容,想要详细了解的Git
的小伙伴可以去看这个文档,个人感觉还不错🚀🚀🚀