Skip to content

Git 基本操作

本章将介绍 Git 的基本操作命令,这些是日常使用 Git 时最频繁用到的命令。掌握这些基本操作是使用 Git 的基础。

文件状态管理

查看仓库状态

bash
# 查看当前仓库状态
git status

# 查看简洁状态
git status -s
# 或
git status --short

状态输出说明:

M  modified_file.txt     # 已修改并暂存
 M modified_file2.txt    # 已修改但未暂存
A  new_file.txt          # 新文件已暂存
D  deleted_file.txt      # 已删除并暂存
R  renamed_file.txt      # 已重命名
C  copied_file.txt       # 已复制
U  unmerged_file.txt     # 未合并(冲突)
?? untracked_file.txt    # 未跟踪文件
!! ignored_file.txt      # 被忽略文件

添加文件到暂存区

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

# 添加多个文件
git add file1.txt file2.txt file3.txt

# 添加当前目录所有文件
git add .

# 添加所有已跟踪文件的修改
git add -u

# 添加所有文件(包括新文件和修改)
git add -A

# 交互式添加
git add -i

# 部分添加(逐块选择)
git add -p filename.txt

实际操作示例

bash
# 创建演示项目
mkdir git-basic-ops
cd git-basic-ops
git init

# 创建一些文件
echo "主程序文件" > main.py
echo "配置文件" > config.json
echo "说明文档" > README.md
mkdir utils
echo "工具函数" > utils/helpers.py

# 查看状态
git status

# 添加文件
git add main.py config.json
git status

# 添加目录
git add utils/
git status

# 添加剩余文件
git add README.md
git status

提交操作

基本提交

bash
# 提交暂存区的内容
git commit -m "提交信息"

# 提交并添加所有已跟踪文件的修改
git commit -am "提交信息"

# 空提交(用于触发 CI/CD)
git commit --allow-empty -m "触发构建"

提交信息最佳实践

bash
# ✅ 好的提交信息
git commit -m "feat: 添加用户登录功能"
git commit -m "fix: 修复密码验证错误"
git commit -m "docs: 更新 API 文档"
git commit -m "style: 修复代码格式问题"
git commit -m "refactor: 重构用户服务模块"

# ❌ 不好的提交信息
git commit -m "修改"
git commit -m "更新"
git commit -m "bug fix"

修改提交

bash
# 修改最后一次提交的信息
git commit --amend -m "新的提交信息"

# 修改最后一次提交的内容(添加遗漏的文件)
git add forgotten_file.txt
git commit --amend --no-edit

# 交互式修改提交信息
git commit --amend

提交操作示例

bash
# 继续上面的示例
git commit -m "初始提交:添加项目基本文件"

# 修改文件
echo "更新的主程序" >> main.py
echo "新的工具函数" >> utils/helpers.py

# 查看修改
git status
git diff

# 提交修改
git add main.py utils/helpers.py
git commit -m "feat: 更新主程序和工具函数"

# 发现遗漏了配置文件的修改
echo "新配置项" >> config.json
git add config.json
git commit --amend --no-edit

查看修改

查看工作区修改

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

# 查看特定文件的修改
git diff filename.txt

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

# 查看工作区与最后提交的差异
git diff HEAD

# 查看两个提交之间的差异
git diff commit1 commit2

# 查看特定文件在两个提交间的差异
git diff commit1 commit2 -- filename.txt

差异输出解读

diff
diff --git a/main.py b/main.py
index 1234567..abcdefg 100644
--- a/main.py
+++ b/main.py
@@ -1,3 +1,4 @@
 def main():
     print("Hello, World!")
+    print("新增的功能")
     return 0

解释:

  • --- 表示旧文件
  • +++ 表示新文件
  • @@ -1,3 +1,4 @@ 表示修改的行号范围
  • - 表示删除的行
  • + 表示添加的行

查看修改示例

bash
# 修改文件进行演示
echo "# 项目说明" > README.md
echo "这是一个演示项目" >> README.md

# 查看修改
git diff README.md

# 添加到暂存区
git add README.md

# 查看暂存区的修改
git diff --staged

# 继续修改文件
echo "## 安装说明" >> README.md

# 现在可以看到工作区和暂存区的差异
git diff README.md

查看历史

基本历史查看

bash
# 查看提交历史
git log

# 简洁格式
git log --oneline

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

# 显示统计信息
git log --stat

# 显示详细修改
git log -p

# 限制显示数量
git log -n 5
git log --oneline -10

高级历史查看

bash
# 美化的日志显示
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

# 查看特定文件的历史
git log -- filename.txt

# 查看特定作者的提交
git log --author="张三"

# 查看特定时间范围的提交
git log --since="2024-01-01" --until="2024-01-31"

# 查看包含特定关键词的提交
git log --grep="bug fix"

# 查看修改了特定内容的提交
git log -S "function_name"

查看特定提交

bash
# 查看特定提交的详细信息
git show commit_hash

# 查看特定提交的文件列表
git show --name-only commit_hash

# 查看特定提交的统计信息
git show --stat commit_hash

历史查看示例

bash
# 创建更多提交来演示
echo "功能模块A" > moduleA.py
git add moduleA.py
git commit -m "feat: 添加模块A"

echo "功能模块B" > moduleB.py
git add moduleB.py
git commit -m "feat: 添加模块B"

echo "修复模块A的bug" >> moduleA.py
git add moduleA.py
git commit -m "fix: 修复模块A的错误"

# 查看历史
git log --oneline

# 查看图形化历史
git log --graph --oneline

# 查看特定文件的历史
git log --oneline -- moduleA.py

撤销操作

撤销工作区修改

bash
# 撤销单个文件的修改
git restore filename.txt
# 或使用旧语法
git checkout -- filename.txt

# 撤销所有文件的修改
git restore .

# 恢复文件到特定版本
git restore --source=HEAD~1 filename.txt

撤销暂存区修改

bash
# 从暂存区移除文件(保留工作区修改)
git restore --staged filename.txt
# 或使用旧语法
git reset HEAD filename.txt

# 移除所有暂存的修改
git restore --staged .

撤销提交

bash
# 撤销最后一次提交(保留修改在工作区)
git reset --soft HEAD~1

# 撤销最后一次提交(保留修改在暂存区)
git reset --mixed HEAD~1
# 或简写
git reset HEAD~1

# 撤销最后一次提交(完全删除修改)⚠️ 危险操作
git reset --hard HEAD~1

# 创建新提交来撤销指定提交
git revert commit_hash

撤销操作示例

bash
# 创建一些修改来演示撤销
echo "错误的修改" >> main.py
echo "临时文件" > temp.txt

# 查看状态
git status

# 撤销工作区修改
git restore main.py

# 添加文件到暂存区
git add temp.txt

# 从暂存区移除
git restore --staged temp.txt

# 创建一个错误的提交
git add temp.txt
git commit -m "错误的提交"

# 撤销提交(保留修改)
git reset --soft HEAD~1
git status

# 完全撤销提交
git reset --hard HEAD~1

文件操作

重命名和移动文件

bash
# 重命名文件
git mv old_name.txt new_name.txt

# 移动文件到目录
git mv file.txt directory/

# 等价的手动操作
mv old_name.txt new_name.txt
git add new_name.txt
git rm old_name.txt

删除文件

bash
# 删除文件并从 Git 中移除
git rm filename.txt

# 只从 Git 中移除,保留本地文件
git rm --cached filename.txt

# 删除目录
git rm -r directory/

# 强制删除(即使文件已修改)
git rm -f filename.txt

忽略文件

bash
# 创建 .gitignore 文件
cat > .gitignore << EOF
# 临时文件
*.tmp
*.log

# 编译输出
*.o
*.exe

# 依赖目录
node_modules/
venv/

# 编辑器配置
.vscode/
.idea/

# 系统文件
.DS_Store
Thumbs.db
EOF

# 添加 .gitignore 到版本控制
git add .gitignore
git commit -m "添加 .gitignore 文件"

文件操作示例

bash
# 重命名文件
git mv main.py app.py
git status
git commit -m "重命名 main.py 为 app.py"

# 移动文件到目录
mkdir src
git mv app.py src/
git status
git commit -m "移动 app.py 到 src 目录"

# 删除不需要的文件
git rm temp.txt
git commit -m "删除临时文件"

远程操作基础

查看远程仓库

bash
# 查看远程仓库
git remote

# 查看远程仓库详细信息
git remote -v

# 查看特定远程仓库信息
git remote show origin

推送和拉取

bash
# 推送到远程仓库
git push origin main

# 首次推送并设置上游分支
git push -u origin main

# 拉取远程更新
git pull origin main

# 获取远程更新但不合并
git fetch origin

常用操作组合

日常工作流程

bash
# 1. 查看当前状态
git status

# 2. 拉取最新代码
git pull

# 3. 创建/修改文件
echo "新功能" > feature.py

# 4. 查看修改
git diff

# 5. 添加修改
git add feature.py

# 6. 提交修改
git commit -m "feat: 添加新功能"

# 7. 推送到远程
git push

快速修复流程

bash
# 1. 发现问题,快速修复
echo "修复的代码" >> buggy_file.py

# 2. 快速提交
git commit -am "fix: 修复紧急问题"

# 3. 立即推送
git push

实用技巧

别名设置

bash
# 设置常用别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual '!gitk'

# 使用别名
git st          # 等于 git status
git ci -m "msg" # 等于 git commit -m "msg"

快捷操作

bash
# 查看最后一次提交
git show

# 查看最后 n 次提交的简要信息
git log --oneline -5

# 搜索提交历史
git log --grep="关键词"

# 查看谁修改了特定行
git blame filename.txt

# 查看文件的修改历史
git log -p -- filename.txt

常见问题解决

问题1:提交信息写错了

bash
# 修改最后一次提交信息
git commit --amend -m "正确的提交信息"

问题2:添加了错误的文件

bash
# 从暂存区移除
git restore --staged wrong_file.txt

# 如果已经提交,撤销提交
git reset --soft HEAD~1

问题3:工作区文件被意外修改

bash
# 恢复单个文件
git restore filename.txt

# 恢复所有文件
git restore .

问题4:想要查看某个提交的具体内容

bash
# 查看提交详情
git show commit_hash

# 查看提交中的特定文件
git show commit_hash:path/to/file

总结

Git 基本操作的核心命令:

状态和查看

bash
git status          # 查看状态
git diff            # 查看修改
git log             # 查看历史
git show            # 查看提交详情

文件管理

bash
git add             # 添加到暂存区
git commit          # 提交修改
git rm              # 删除文件
git mv              # 重命名/移动文件

撤销操作

bash
git restore         # 恢复文件
git reset           # 重置提交
git revert          # 反向提交

远程操作

bash
git push            # 推送更新
git pull            # 拉取更新
git fetch           # 获取更新

掌握这些基本操作后,你就能够:

  • ✅ 有效管理文件版本
  • ✅ 查看和理解项目历史
  • ✅ 安全地撤销错误操作
  • ✅ 与远程仓库同步

在下一章中,我们将学习 Git 的分支管理,这是 Git 最强大的功能之一。

本站内容仅供学习和研究使用。