Skip to content

Git

作者:青见春山
发表于:2026-07-27
字数统计:1951 字
预计阅读7分钟

Git 是一个开源的分布式版本控制系统,被设计用来快速有效地处理从小到大的项目。

1. Git 简介

Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 创建,被设计用来快速有效地处理从小到大的项目。

Git 主要的特点:

  • 分布式:每个开发者本地都有完整的版本历史
  • 快速高效:大部分操作在本地完成,不需要联网
  • 数据完整性:使用 SHA-1 哈希保证数据完整性
  • 强大的分支管理:轻量级分支,创建和切换都很快

2. 初始化仓库

2.1 创建新仓库

sh
git init

这会在当前目录创建一个新的 Git 仓库。

2.2 克隆现有仓库

sh
git clone [仓库 URL]

这会从指定的 URL 克隆一个远程仓库到本地。

2.3 克隆指定分支

sh
git clone -b [分支名] [仓库 URL]

3. 添加文件到仓库

3.1 添加单个文件

sh
git add [文件名]

将指定文件添加到暂存区。

3.2 添加多个文件

sh
git add [文件1] [文件2] ...

3.3 添加所有修改过的文件

sh
git add .

. 表示当前目录及子目录下所有修改过的文件。

3.4 取消暂存

sh
git reset [文件名]
# 或
git reset HEAD [文件名]

4. 提交更改

4.1 提交暂存区的更改

sh
git commit -m "提交信息"

-m 后面跟着的是本次提交的描述信息。

4.2 提交并添加所有修改

sh
git commit -am "提交信息"

-a 会自动把所有已经 tracked 的文件暂存起来。

4.3 修改最近一次提交

sh
git commit --amend

5. 查看状态和日志

5.1 查看仓库状态

sh
git status

查看哪些文件被修改、已经暂存或未跟踪。

5.2 查看提交日志

sh
git log

查看提交历史记录。

5.3 查看更详细的提交日志

sh
git log --oneline

以更简洁的格式显示提交日志。

5.4 其他常用查看命令

sh
# 查看图形化的分支历史
git log --graph --oneline

# 查看所有分支的所有提交
git log --all

# 查看文件的修改历史
git log -- [文件名]

# 查看文件的具体修改内容
git diff

# 查看已暂存的修改
git diff --cached

6. 分支管理

6.1 创建新分支

sh
git branch [分支名]

6.2 切换到指定分支

sh
git checkout [分支名]

6.3 创建并切换到新分支

sh
git checkout -b [分支名]

6.4 查看所有分支

sh
git branch

6.5 删除分支

sh
git branch -d [分支名]
# 强制删除(未合并的分支)
git branch -D [分支名]

6.6 合并分支

sh
git merge [分支名]

将指定分支的更改合并到当前分支。

6.7 变基(rebase)

sh
git rebase [分支名]

将当前分支的提交变基到指定分支上,使提交历史更加线性。

7. 远程仓库操作

7.1 添加远程仓库

sh
git remote add [远程仓库名] [仓库 URL]

通常远程仓库名默认为 origin

7.2 查看远程仓库

sh
git remote -v

7.3 拉取远程仓库的更新

sh
git pull [远程仓库名] [分支名]

git pull 相当于 git fetch + git merge

7.4 推送到远程仓库

sh
git push [远程仓库名] [分支名]

7.5 首次推送

sh
git push -u origin [分支名]

-u 会将本地分支与远程分支关联起来。

7.6 删除远程分支

sh
git push origin --delete [分支名]

8. 撤销操作

8.1 撤销上一次提交

sh
git reset --hard HEAD~1

注意:这会丢失最后一次提交的更改。

8.2 软重置(保留修改)

sh
git reset --soft HEAD~1

8.3 混合重置(默认)

sh
git reset HEAD~1

8.4 撤销工作目录中的更改

sh
git checkout -- [文件名]

8.5 恢复暂存区的文件到工作区

sh
git restore [文件名]
# git 2.23+ 推荐使用

8.6 git checkout 与 git restore 对比

功能旧版本新版本
撤销工作区修改git checkout --git restore
撤销暂存git reset HEADgit restore --staged

8.7 回退到指定版本

sh
git reset --hard [commit_id]

9. 标记(Tag)

9.1 创建标签

sh
git tag [标签名]

创建一个轻量级的标签。

9.2 创建带注释的标签

sh
git tag -a [标签名] -m "标签说明"

9.3 查看所有标签

sh
git tag

9.4 查看标签详情

sh
git show [标签名]

9.5 切换到标签

sh
git checkout [标签名]

9.6 删除标签

sh
git tag -d [标签名]

9.7 推送标签到远程仓库

sh
git push --tags

9.8 推送单个标签

sh
git push origin [标签名]

10. 储藏(Stash)

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

10.1 储藏当前修改

sh
git stash
# 或者添加描述
git stash save "修改描述"

10.2 查看储藏列表

sh
git stash list

10.3 恢复储藏

sh
# 恢复最近一次储藏,保留内容
git stash pop

# 恢复指定储藏
git stash pop stash@{0}

# 恢复但不删除储藏
git stash apply

10.4 删除储藏

sh
git stash drop stash@{0}
# 清空所有储藏
git stash clear

11. .gitignore 文件

.gitignore 文件用于指定哪些文件不需要 Git 管理。

ini
# 注释

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

# 但 lib.log 例外
!lib.log

# 忽略 node_modules 目录
node_modules/

# 忽略 build 目录
/build

11.1 常用规则

  • # 开头表示注释
  • * 通配任意多字符
  • ? 通配单个字符
  • [] 包含单个字符的列表
  • ! 表示不忽略

12. 冲突解决

当合并分支发生冲突时:

  1. Git 会标记冲突的文件
  2. 手动编辑冲突文件,决定保留哪些内容
  3. 冲突标记:
<<<<<<< HEAD
当前分支的代码
=======
要合并分支的代码
>>>>>>> branch-name
  1. 解决完冲突后:
sh
git add .
git commit -m "解决冲突"

使用 git mergetool 可以使用图形化工具解决冲突。

13. SSH 公钥配置

13.1 生成 SSH 密钥

sh
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

13.2 查看公钥

sh
cat ~/.ssh/id_rsa.pub

将公钥内容添加到 GitHub / GitLab 等平台的 SSH 公钥配置中。

13.3 测试连接

sh
ssh -T git@github.com

14. Git 常用工作流

14.1 经典 Git Flow

  • master 主分支(稳定版本)
  • develop 开发分支
  • feature/* 功能分支
  • release/* 发布分支
  • hotfix/* 紧急修复分支

14.2 集中式工作流

类似于 SVN,所有人都工作在 master 分支上。

14.3 功能分支工作流

每个新功能在独立的分支上开发,完成后合并到主分支。

14.4 Forking 工作流

常用于开源项目,每个人 fork 主仓库后在自己的仓库中开发,通过 PR 贡献代码。

15. Git 常用快捷键和别名

可以在 ~/.gitconfig 中配置别名:

ini
[alias]
    st = status
    co = checkout
    br = branch
    ci = commit
    unstage = reset HEAD --
    last = log -1
    l = log --oneline --graph
    a = add

16. 常见问题

16.1 误删分支

sh
# reflog 可以查看所有历史操作
git reflog
git checkout -b [分支名] [commit_id]

16.2 修改最后一次提交

sh
git commit --amend -m "新的提交信息"

16.3 找回 reset --hard 之前的提交

sh
git reflog
# 找到对应的 commit_id
git reset --hard [commit_id]

16.4 临时保存未提交的修改

sh
git stash
# 处理完其他事情后
git stash pop

学习建议: 这些是 Git 的一些基础操作,Git 的功能非常强大,还有许多高级特性等待探索。建议通过官方文档或专业书籍进一步学习。常用的 Git 命令有限,多练习即可熟能生巧。