跳到主要内容

Git操作完全指南

版本控制是程序员必须掌握的核心技能之一,本文将带你从基础操作到高级技巧,全面掌握Git的使用。

一、Git基础概念

在开始动手之前,我们需要先理解几个核心概念:

1.1 什么是Git

Git是一个分布式版本控制系统,由Linux之父Linus Torvalds于2005年创建。与传统的集中式版本控制系统(如SVN)不同,Git的每个开发者都拥有完整的代码仓库副本,这使得Git具有以下优势:

  • 本地即可提交:不需要网络连接就能进行版本控制
  • 分支操作轻量:创建和合并分支非常快速
  • 安全性高:每个副本都是完整的备份

1.2 核心区域划分

Git有三个主要区域:

工作区(Working Directory)  →  暂存区(Stage/Index)  →  版本库(Repository)
↓ ↓ ↓
实际编辑的文件 即将提交的文件 已提交的快照
  • 工作区(Working Directory):你正在编辑的文件目录
  • 暂存区(Stage):通过git add命令将修改放入暂存区
  • 版本库(Repository):通过git commit将暂存区内容提交到本地仓库

1.3 文件状态

Git中的文件有两种状态:

  • 已跟踪(Tracked):已被纳入版本控制的文件
  • 未跟踪(Untracked):Git不知道的新文件

已跟踪的文件又有三种状态:

状态说明
Modified文件有修改但未放入暂存区
Staged已放入暂存区,等待提交
Committed已提交到本地仓库

二、Git安装与配置

2.1 安装Git

Windows用户

访问 Git官网 下载安装包,一路Next即可。

验证安装

git --version
# 输出类似:git version 2.40.0

2.2 基础配置

安装完成后,需要进行一些基础配置:

# 设置用户名(必需)
git config --global user.name "你的用户名"

# 设置邮箱(必需)
git config --global user.email "你的邮箱@example.com"

# 设置默认编辑器
git config --global core.editor vim

# 设置默认分支名
git config --global init.defaultBranch main

2.3 查看配置

# 查看所有配置
git config --list

# 查看某个配置项
git config user.name

三、基础操作

3.1 创建仓库

方式一:在当前目录初始化

git init

这会在当前目录创建一个.git子目录,用于存储所有版本信息。

方式二:克隆远程仓库

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

3.2 添加文件到暂存区

# 添加单个文件
git add filename.txt

# 添加所有修改的文件
git add .

# 添加所有已跟踪文件的修改(不包括新文件)
git add -u

# 交互式添加
git add -i

3.3 提交到本地仓库

# 基本提交
git commit -m "提交信息"

# 同时提交已跟踪但未暂存的文件(跳过git add步骤)
git commit -am "提交信息"

# 修改最后一次提交(通常用于修正提交信息)
git commit --amend

3.4 查看状态和历史

# 查看工作区状态
git status

# 简洁模式
git status -s
# M file.txt (Modified, staged)
# M file.txt (Modified, not staged)
# ?? file.txt (Untracked)

# 查看提交历史
git log

# 简洁单行显示
git log --oneline

# 显示最近3次提交
git log -3

# 图形化显示分支
git log --graph --oneline --all

3.5 撤销操作

# 撤销工作区的修改(恢复到最近一次提交的状态)
git checkout -- filename
# 或者(新版本推荐)
git restore filename

# 取消暂存(从暂存区移回工作区)
git reset HEAD filename
# 或者
git restore --staged filename

# 回退到指定版本(保留工作区修改)
git reset --soft HEAD~1

# 回退到指定版本(保留工作区修改,取消暂存)
git reset --mixed HEAD~1

# 回退到指定版本(丢弃所有修改,危险操作)
git reset --hard HEAD~1
注意

git reset --hard会丢弃所有未提交的修改,操作前请三思!

四、分支操作

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

4.1 查看分支

# 查看本地分支
git branch

# 查看所有分支(包括远程)
git branch -a

# 查看分支详细信息
git branch -v

4.2 创建与切换分支

# 创建新分支
git branch feature-branch

# 切换分支
git checkout feature-branch

# 创建并切换(新版本推荐)
git switch feature-branch

# 创建并切换(一步到位)
git checkout -b feature-branch
# 或者
git switch -c feature-branch

4.3 合并分支

# 将指定分支合并到当前分支
git merge feature-branch

# 取消合并(当合并出现冲突时)
git merge --abort

4.4 删除分支

# 删除已合并的分支
git branch -d feature-branch

# 强制删除分支(即使未合并)
git branch -D feature-branch

4.5 常见合并问题

快进合并(Fast Forward):当目标分支没有新的提交时,Git会直接移动指针。

三方合并(Three-way merge):当两个分支都有新提交时,Git会创建一个新的合并提交。

冲突处理:当两个分支修改了同一文件的同一部分时,需要手动解决冲突:

# 查看冲突文件
git status

# 解决冲突后
git add filename
git commit -m "resolve conflict"

五、远程仓库操作

5.1 添加远程仓库

# 添加远程仓库
git remote add origin https://github.com/username/repo.git

# 查看远程仓库
git remote -v

# 重命名远程仓库
git remote rename origin upstream

5.2 推送与拉取

# 推送到远程仓库(首次推送需要设置上游分支)
git push -u origin main

# 普通推送
git push

# 强制推送(谨慎使用)
git push --force

# 拉取远程更新
git pull

# 只拉取不合并
git fetch

5.3 克隆远程仓库

# 克隆最新版本
git clone https://github.com/username/repo.git

# 克隆指定分支
git clone -b develop https://github.com/username/repo.git

# 克隆到指定目录
git clone https://github.com/username/repo.git my-folder

5.4 同步远程分支

# 查看远程分支
git branch -r

# 切换到远程分支(会自动创建本地分支)
git checkout --track origin/feature

# 删除远程分支
git push origin --delete feature-branch

六、进阶操作

6.1 贮藏工作(Stash)

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

# 贮藏当前修改
git stash

# 给stash起个名字
git stash save "未完成的功能开发"

# 查看stash列表
git stash list
# stash@{0}: On main: 未完成的功能开发

# 恢复最近的stash
git stash apply

# 恢复指定的stash
git stash apply stash@{0}

# 恢复并删除stash
git stash pop

# 删除stash
git stash drop stash@{0}

# 清空所有stash
git stash clear

6.2 标签(Tag)

标签用于标记特定的提交,通常用于版本发布:

# 创建轻量标签
git tag v1.0.0

# 创建附注标签(推荐,包含更多信息)
git tag -a v1.0.0 -m "版本1.0.0发布"

# 查看所有标签
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

6.3 变基(Rebase)

变基是另一种合并分支的方式,它会改变提交历史:

# 将当前分支变基到目标分支
git rebase main

# 中断变基
git rebase --abort

# 继续变基(解决冲突后)
git rebase --continue

# 交互式变基(修改提交历史)
git rebase -i HEAD~3
注意

不要对已推送到远程仓库的提交进行变基!

6.4 查找问题

# 查看是谁修改了某一行
git blame filename

# 查看两个版本的差异
git diff commit1 commit2

# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最新提交的差异
git diff --cached

七、Git工作流

7.1 Git Flow

经典的Git Flow工作流包含以下分支:

  • main/master:主分支,始终保持可发布状态
  • develop:开发分支,汇总下一个发布的功能
  • feature/:功能分支,从develop创建
  • release/:发布分支,从develop创建
  • hotfix/:热修复分支,从main创建

7.2 常用的简洁工作流

对于小型团队或个人项目:

# 1. 从main创建功能分支
git checkout -b feature/new-feature

# 2. 开发并提交
git add .
git commit -m "feat: 完成新功能"

# 3. 切换回main并更新
git checkout main
git pull

# 4. 合并功能分支
git merge feature/new-feature

# 5. 推送
git push origin main

# 6. 删除功能分支
git branch -d feature/new-feature

八、实用技巧

8.1 配置别名

为常用命令设置简短的别名:

# 设置别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

# 设置更复杂的别名
git config --global alias.lg "log --graph --oneline --all"

8.2 忽略文件

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

# 忽略所有.log文件
*.log

# 忽略node_modules目录
node_modules/

# 忽略特定文件
.env

# 忽略所有缓存目录
.cache/

8.3 清理仓库

# 删除所有未跟踪文件(清理工作区)
git clean -f

# 删除未跟踪文件和目录
git clean -fd

# 查看将要删除的内容(预览)
git clean -n

8.4 找回丢失的提交

# 查看所有操作记录
git reflog

# 恢复到指定操作
git reset --hard HEAD@{5}

8.5 暂存部分文件

# 交互式暂存
git add -p
# 输入 y 暂存该部分
# 输入 n 跳过该部分
# 输入 s 分割成更小的块

九、常见问题处理

9.1 SSH Key配置

# 1. 生成SSH Key
ssh-keygen -t ed25519 -C "your_email@example.com"

# 2. 查看公钥
cat ~/.ssh/id_ed25519.pub

# 3. 复制公钥到GitHub/Gitee的SSH Keys设置

# 4. 测试连接
ssh -T git@github.com

9.2 修改远程仓库地址

# 方法一:使用set-url
git remote set-url origin new-git-url

# 方法二:删除后重新添加
git remote remove origin
git remote add origin new-git-url

9.3 解决中文文件名乱码

git config --global core.quotepath false

9.4 撤销已推送的提交

# 创建新的提交来撤销之前的更改
git revert HEAD

# 推送新提交
git push

9.5 将单个文件恢复到指定版本

# 查看文件历史
git log filename

# 恢复到指定版本
git checkout commit-hash -- filename

十、常用命令速查表

场景命令
初始化仓库git init
克隆仓库git clone url
添加文件git add .
提交git commit -m "message"
推送git push
拉取git pull
查看状态git status
查看历史git log --oneline
创建分支git branch name
切换分支git checkout name
合并分支git merge name
贮藏修改git stash
创建标签git tag v1.0

结语

Git是现代软件开发不可或缺的工具,掌握好这些基础操作和常用技巧,能够让你的开发效率大大提升。建议大家多多实践,在实际项目中不断加深对Git的理解。

如果本文对你有帮助,欢迎收藏转发!


相关推荐