Git完全征服指南:从零到高阶玩家的终极秘籍

73 阅读14分钟

前言

Git作为当今最流行的分布式版本控制系统,已成为开发者必备的核心技能之一。本文将全面介绍Git的基本概念、常用命令和工作流程,帮助开发者高效管理代码版本。

这篇文章前面部分会解释Git的基本概念和教你如何安装Git以及一些基本的操作命令,后面呢,会有我用Trae编译器连接GitHub的实战操作,让我们一起期待一下🚀 🚀 🚀

一、Git简介与核心概念

1.1 什么是Git

Git是由Linus Torvalds(Linux之父)于2005年开发的一个开源的分布式版本控制系统,旨在高效处理从小型到超大型项目的版本管理。与集中式版本控制系统(如SVN)不同,Git的每个工作目录都是一个完整的版本库,拥有完整的历史记录和版本跟踪能力,不依赖网络连接和中央服务器。

1.2 Git核心概念

  1. 仓库(Repository) :包含项目所有文件和历史记录的地方,分为本地仓库和远程仓库。
  2. 工作区(Working Directory) :用户直接编辑文件的目录。
  3. 暂存区(Staging Area/Index) :准备提交的文件暂存区域。
  4. 提交(Commit) :对暂存区内容创建一个永久快照。
  5. 分支(Branch) :独立开发线,默认有master/main分支。
  6. HEAD:指向当前分支最新提交的指针。

二、Git安装与配置

2.1 安装Git

各平台安装方法:(主要讲述的是Windows版本)

  • Windows:在Git for Windows官网下载,选择合适自己电脑的版本

image.png 如果有不懂的可以参考:在Windows上安装Git_哔哩哔哩_bilibili

  • macOS:使用Homebrew(brew install git)或下载安装包
  • Linux:使用包管理器(如sudo apt-get install git)

安装后验证:

在键盘上按Win + R,输入cmd打开终端

image.png 输入下面的命令检查自己的Git版本

git --version

image.png

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 解决合并冲突

当合并出现冲突时:

  1. 打开冲突文件,Git会用<<<<<<<=======>>>>>>>标记冲突内容
  2. 手动修改文件解决冲突
  3. 添加解决后的文件:git add filename.txt
  4. 完成合并: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 功能分支工作流

  1. 从master创建功能分支
  2. 在功能分支上开发
  3. 完成后合并回master

8.3 Git Flow

复杂但严谨的工作流,包含以下分支类型:

  • master:生产代码
  • develop:开发主线
  • feature/*:功能开发
  • release/*:准备发布
  • hotfix/*:紧急修复

8.4 Forking工作流

常用于开源项目:

  1. 开发者fork主仓库
  2. 克隆自己的fork到本地
  3. 创建功能分支开发
  4. 推送到自己的fork
  5. 创建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官网,没有账号的可以创建一下。

  1. 点击创建一个仓库

image.png

  1. 取一个项目名xwj_Git_combat,我是用自己的名字加上后面的项目名,然后写一段描述学习Git的基本操作,之后就点击创建即可,其他的可以不动。

image.png

  1. 我们就可以看到下面的这些命令,根据下面的代码我们基本就可以连接上远程仓库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

image.png

10.2 创建新的文件夹并初始化

如果你是第一次使用,那么一定要先看上面2.2的基础配置,再看下面的操作

  1. 在桌面上创建一个Git_combat的文件夹
  2. 在这个文件创建一个readme.md的文件,这个文件用来描述这个是用来干什么的,最后用Trae编译器打开这个文件夹

image.png

image.png 3. 在readme.md中添加一些内容,随便什么都可以,但最好是解释这个文件夹是干什么的

## Git命令的基础学习
### 1. 基础命令
1. git init 初始化仓库
2. git add 提交文件到暂存区
3. git commit 提交文件到仓库

image.png 4. 在根目录下添加一个.gitignore的目录,在里面添加node_modules/内容,这个的意思是忽略node_modules目录,在上面的基础命令上也有讲

  1. 选择左边的readme.md,右键选择在集成终端中打开

image.png 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命令就可以看见。

image.png 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有五行内容)。

  1. 使用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官网上看

image.png 点进去看看

image.png

  1. 总结

如果你是第一次连接可以按照下面的代码顺序依次执行(下面代码中一些内容要自己改一下,代码自己创建的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的主要功能和常用命令,建议读者:

  1. 从基础命令开始,逐步掌握更高级功能
  2. 多实践,创建测试仓库尝试各种命令
  3. 理解Git的工作原理而不仅是记住命令
  4. 遵循团队约定的工作流程
  5. 定期备份重要分支(特别是未推送的)

记住,Git的大部分操作都是可逆的,使用git reflog可以找回很多"丢失"的提交。最重要的是保持定期提交的习惯,写好清晰的提交信息,这将使你的版本历史成为项目的宝贵财富而非负担。

最后,本文引用了一些简介 - Git教程 - 廖雪峰的官方网站中内容,想要详细了解的Git的小伙伴可以去看这个文档,个人感觉还不错🚀🚀🚀