Appearance
第4章:Git 核心命令进阶
4.1 提交记录详解
git log 高级用法
功能:查看提交历史,支持多种筛选和格式化选项
常用选项:
bash
# 按作者筛选提交
git log --author="Author Name"
# 按日期筛选提交
git log --since="2023-01-01" --until="2023-12-31"
# 按提交信息筛选
git log --grep="keyword"
# 查看指定文件的提交历史
git log -- <文件名>
# 查看指定目录的提交历史
git log -- <目录名>/
# 显示分支合并历史
git log --graph
# 显示简洁的提交历史(包含分支信息)
git log --oneline --graph
# 显示最近 n 条提交记录
git log -n 10
# 显示提交统计信息
git log --stat
# 显示文件变更内容
git log -p示例:
bash
# 查看最近5条提交记录,以简洁模式显示
git log --oneline -5
# 查看指定文件的提交历史
git log -- README.md
# 按作者筛选提交
git log --author="John"
# 按日期筛选提交
git log --since="1 week ago"4.2 撤销操作
撤销工作区修改
git checkout
功能:撤销工作区中指定文件的修改
用法:
bash
# 撤销单个文件的修改
git checkout -- <文件名>
# 撤销多个文件的修改
git checkout -- <文件1> <文件2>
# 撤销当前目录所有文件的修改
git checkout -- .git restore(Git 2.23+)
功能:撤销工作区中指定文件的修改(较新的命令)
用法:
bash
# 撤销单个文件的修改
git restore <文件名>
# 撤销多个文件的修改
git restore <文件1> <文件2>
# 撤销当前目录所有文件的修改
git restore .撤销暂存区修改
git reset HEAD
功能:将暂存区的修改撤销到工作区
用法:
bash
# 撤销单个文件的暂存
git reset HEAD <文件名>
# 撤销多个文件的暂存
git reset HEAD <文件1> <文件2>
# 撤销所有文件的暂存
git reset HEADgit restore --staged(Git 2.23+)
功能:将暂存区的修改撤销到工作区(较新的命令)
用法:
bash
# 撤销单个文件的暂存
git restore --staged <文件名>
# 撤销多个文件的暂存
git restore --staged <文件1> <文件2>
# 撤销所有文件的暂存
git restore --staged .撤销已提交的版本
git revert
功能:创建一个新的提交,撤销指定提交的更改
用法:
bash
# 撤销上一个提交
git revert HEAD
# 撤销指定提交
git revert <提交哈希值>
# 撤销多个提交
git revert <提交1> <提交2>
# 撤销一个范围内的提交
git revert <起始提交>..<结束提交>示例:
bash
# 撤销上一个提交
git revert HEAD
# 撤销指定提交
git revert a1b2c3d注意事项:
git revert会创建一个新的提交,而不是删除原来的提交- 这是一种安全的撤销方式,不会影响其他提交
- 适合撤销已经推送到远程仓库的提交
4.3 文件重命名与删除
git mv:重命名文件
功能:重命名文件并将修改添加到暂存区
用法:
bash
# 重命名文件
git mv <旧文件名> <新文件名>示例:
bash
# 将 file.txt 重命名为 new-file.txt
git mv file.txt new-file.txt
# 提交重命名操作
git commit -m "Rename file.txt to new-file.txt"git rm:删除文件
功能:删除文件并将修改添加到暂存区
用法:
bash
# 删除文件
git rm <文件名>
# 删除多个文件
git rm <文件1> <文件2>
# 删除目录及其内容
git rm -r <目录名>
# 只删除暂存区中的文件,保留工作区中的文件
git rm --cached <文件名>示例:
bash
# 删除文件
git rm unwanted-file.txt
# 提交删除操作
git commit -m "Remove unwanted-file.txt"
# 只删除暂存区中的文件
git rm --cached ignore-me.txt4.4 查看文件修改内容
git diff:查看文件修改内容
功能:比较文件的不同版本之间的差异
用法:
bash
# 查看工作区与暂存区的差异
git diff
# 查看指定文件的差异
git diff <文件名>
# 查看暂存区与版本库的差异
git diff --staged
# 查看两个提交之间的差异
git diff <提交1> <提交2>
# 查看工作区与指定提交的差异
git diff <提交>
# 查看指定分支与当前分支的差异
git diff <分支名>示例:
bash
# 查看工作区与暂存区的差异
git diff
# 查看指定文件的差异
git diff README.md
# 查看暂存区与版本库的差异
git diff --staged
# 查看两个提交之间的差异
git diff a1b2c3d e4f5g6h输出说明:
+表示添加的内容-表示删除的内容@@表示修改的位置范围
4.5 本地仓库备份与迁移
备份本地仓库
方法 1:复制整个仓库目录
bash
# 复制整个仓库目录
cp -r /path/to/repository /path/to/backup方法 2:创建裸仓库
bash
# 创建裸仓库作为备份
git clone --bare /path/to/repository /path/to/backup.git迁移本地仓库
方法 1:复制到新位置
bash
# 复制整个仓库到新位置
cp -r /path/to/old/repository /path/to/new/repository
# 进入新位置
cd /path/to/new/repository
# 查看远程仓库配置
git remote -v
# 更新远程仓库地址(如果需要)
git remote set-url origin <新的远程仓库地址>方法 2:使用 git bundle
bash
# 在原仓库创建 bundle 文件
git bundle create repo.bundle --all
# 将 bundle 文件复制到新位置
cp repo.bundle /path/to/new/location
# 在新位置从 bundle 文件克隆仓库
cd /path/to/new/location
git clone repo.bundle new-repo4.6 新手常见本地操作错误及解决方法
错误 1:提交信息写错
问题:提交后发现提交信息写错了
解决方案:
bash
# 修改上次提交的信息
git commit --amend -m "新的提交信息"错误 2:提交了不需要的文件
问题:不小心提交了不需要的文件
解决方案:
bash
# 撤销上次提交,但保留工作区修改
git reset --soft HEAD~
# 从暂存区移除不需要的文件
git reset HEAD <不需要的文件>
# 重新提交
git commit -m "正确的提交信息"错误 3:误删除文件
问题:不小心删除了文件
解决方案:
bash
# 恢复删除的文件
git checkout HEAD -- <被删除的文件>
# 或者使用 git restore
git restore <被删除的文件>错误 4:合并冲突
问题:合并分支时出现冲突
解决方案:
- 查看冲突文件
- 手动编辑文件,解决冲突
- 标记冲突已解决
- 提交解决方案
bash
# 查看冲突文件
git status
# 编辑文件,解决冲突
# ...
# 标记冲突已解决
git add <冲突文件>
# 完成合并
git commit -m "Resolve merge conflict"错误 5:回退版本后无法回到最新版本
问题:使用 git reset --hard 回退后,无法回到最新版本
解决方案:
bash
# 查看所有提交记录(包括被回退的)
git reflog
# 回到最新版本
git reset --hard <最新版本的哈希值>错误 6:工作区有未提交的修改,想切换分支
问题:工作区有未提交的修改,切换分支时会被覆盖
解决方案:
bash
# 方案 1:提交修改
git add .
git commit -m "临时提交"
# 方案 2:暂存修改
git stash
# 切换分支
git checkout <分支名>
# 恢复暂存的修改(如果使用了 git stash)
git stash pop通过本章的学习,你已经掌握了 Git 的核心命令进阶操作。这些命令将帮助你更有效地管理本地仓库,处理各种常见的操作场景。接下来,我们将学习 Git 的分支管理。
