git指令速查

Git_丢弃工作区跟暂存区的修改

丢弃工作区的修改 / git restore

🚨 永久丢弃修改,无法恢复, 谨慎使用

  1. 丢弃单个文件的修改

    1
    git restore <file_path>

    示例:

    1
    git restore src/permission.js
  2. 丢弃多个文件的修改

    1
    git restore <file_path1> <file_path2>

    示例:

    1
    git restore src/permission.js src/router.js
  3. 丢弃所有文件的修改

    1
    git restore .

丢弃暂存区的修改 / git restore –staged

🚨 将暂存区的文件移回工作区,保留工作区的修改

  1. 取消暂存单个文件

    1
    git restore --staged <file_path>

    示例:

    1
    git restore --staged src/permission.js
  2. 取消暂存多个文件

    1
    git restore --staged <file_path1> <file_path2>

    示例:

    1
    git restore --staged src/permission.js src/router.js
  3. 取消暂存所有文件

    1
    git restore --staged .

Git_提交与撤销提交-reset

创建提交 / git add & git commit

  1. 提交所有修改
1
2
git add .
git commit -m "提交信息"
  1. 提交指定文件
1
2
git add <file>
git commit -m "提交信息

撤销提交 / git reset

撤销最近一次提交

  1. 完全撤销最近一次提交(保留修改到暂存区)

    1
    git reset --soft HEAD^
  2. 完全撤销最近一次提交(丢弃修改 工作区跟暂存区都没有了)

    1
    git reset --hard HEAD^
  3. 混合重置(修改回到工作区, 不在暂存区)

    1
    git reset HEAD^

撤销多个提交

  1. 撤销最近 N 次提交(保留修改)

    1
    git reset --soft HEAD~N

    示例(撤销最近3次提交):

    1
    git reset --soft HEAD~3
  2. 撤销最近 N 次提交(丢弃修改)

    1
    git reset --hard HEAD~N

    示例(撤销最近3次提交):

    1
    git reset --hard HEAD~3

撤销到指定提交 (Commit ID 这一次依然是保留提交的,它之后的所有才撤销)

  1. 撤销到指定的提交(保留修改)

    1
    git reset --soft <commit_hash>

    示例:

    1
    git reset --soft abc123
  2. 撤销到指定的提交(丢弃修改)

    1
    git reset --hard <commit_hash>

    示例:

    1
    git reset --hard abc123

实际操作

🚨 Git_模拟提交后撤销最后一次提交并保留修改

  • 操作步骤:
  1. 代码改动,然后工作区有相应修改文件
  2. git add . 添加到暂存区
  3. git commit -m “提交信息” 提交到本地仓库
  4. git reset –soft HEAD^ 撤销最近一次提交并保留修改, 回到暂存区

🚨 Git_模拟提交后撤销最后2次提交并保留修改

  • 操作步骤:
  1. 代码改动,然后工作区有相应修改文件
  2. git add . 添加到暂存区
  3. git commit -m “提交信息” 提交到本地仓库
  4. 提交 3 次,创建 3 个提交记录
  5. git reset –hard HEAD~2 撤销最近两次提交,完全丢弃最后两次提交的修改

🚨 Git_模拟提交后撤销到指定提交并保留/丢弃修改

  • 操作步骤:
  1. 代码改动,然后工作区有相应修改文件
  2. git add . 添加到暂存区
  3. git commit -m “提交信息” 提交到本地仓库
  4. 提交 4 次,创建 4 个提交记录
  5. git log 或者 找到记录右键查看 commitId
  6. git reset –soft/–hard commitId 撤销到指定提交并保留/丢弃修改

Git Revert 撤销提交教程

什么是 Git Revert?

git revert 是一个用于撤销提交的命令,它会创建一个新的提交来撤销指定提交的更改。与 git reset 不同,git revert 不会改变历史记录,而是通过添加新的提交来撤销更改,这使得它更安全,特别是在协作项目中。

基本语法

1
2
3
4
5
6
7
8
9
10
11
# 撤销单个提交
git revert <commit-hash>

# 撤销多个提交
git revert <commit-hash1> <commit-hash2>

# 撤销最近的提交
git revert HEAD

# 撤销最近的 n 个提交
git revert HEAD~n..HEAD

常用选项

1
2
3
4
5
6
7
8
9
10
11
# 不自动提交,只创建撤销更改
git revert --no-commit <commit-hash>

# 编辑提交信息
git revert -e <commit-hash>

# 跳过冲突解决,使用当前分支的版本
git revert -X theirs <commit-hash>

# 跳过冲突解决,使用被撤销提交的版本
git revert -X ours <commit-hash>

实际案例

案例 1:撤销单个提交

假设我们有以下提交历史:

1
A --- B --- C --- D (HEAD)

要撤销提交 C:

1
git revert C

结果:

1
A --- B --- C --- D --- E (HEAD)

其中 E 是撤销 C 的新提交。

案例 2:撤销最近的提交

1
2
3
4
5
# 撤销最近的提交
git revert HEAD

# 撤销最近的 3 个提交
git revert HEAD~2..HEAD

案例 3:撤销合并提交

1
2
# 撤销合并提交
git revert -m 1 <merge-commit-hash>

-m 1 表示保留主分支的更改,撤销合并分支的更改。

撤销策略对比

命令 用途 是否改变历史 适用场景
git revert 创建新提交撤销更改 已推送到远程的提交
git reset 直接删除提交 本地未推送的提交
git reset --soft 保留更改在暂存区 重新组织本地提交
git reset --hard 完全删除更改 完全放弃更改

💡 重要提示git revert 是最安全的撤销方式,因为它不会改变历史记录,特别适合团队协作项目。

处理冲突

当撤销的提交与当前代码有冲突时:

1
2
3
4
5
6
7
8
9
10
11
# 1. 执行撤销命令
git revert <commit-hash>

# 2. 解决冲突
# 编辑冲突文件

# 3. 添加解决后的文件
git add <conflicted-files>

# 4. 完成撤销
git commit

撤销多个提交

方法 1:逐个撤销

1
2
3
git revert <commit1>
git revert <commit2>
git revert <commit3>

方法 2:一次性撤销

1
git revert <oldest-commit>..<newest-commit>

方法 3:撤销范围提交

1
2
# 撤销从 commit1 到 commit2 之间的所有提交
git revert <commit1>^..<commit2>

高级用法

撤销并编辑提交信息

1
git revert -e <commit-hash>

撤销但不自动提交

1
2
3
git revert --no-commit <commit-hash>
# 进行其他修改
git commit -m "撤销提交并添加额外修改"

撤销合并提交

1
2
3
4
5
# 撤销合并提交,保留主分支更改
git revert -m 1 <merge-commit>

# 撤销合并提交,保留特性分支更改
git revert -m 2 <merge-commit>

最佳实践

1. 确认提交历史

1
2
3
4
5
6
7
8
# 查看提交历史
git log --oneline

# 查看特定提交的详细信息
git show <commit-hash>

# 查看提交的差异
git show <commit-hash> --stat

2. 创建备份分支

1
2
3
4
5
# 在撤销前创建备份分支
git branch backup-before-revert

# 或者创建带时间戳的备份分支
git branch backup-$(date +%Y%m%d-%H%M%S)

3. 测试撤销结果

1
2
3
4
5
6
7
# 撤销后测试功能
npm test
# 或运行其他测试

# 检查文件状态
git status
git diff HEAD~1

4. 团队协作注意事项

  • 在撤销已推送的提交前,先与团队成员沟通
  • 使用清晰的提交信息说明撤销原因
  • 考虑使用 git revert 而不是 git reset 来保持历史完整性
  • 在提交信息中说明撤销的原因和影响范围

常见问题解决

问题 1:撤销后出现冲突

1
2
3
4
5
6
# 查看冲突文件
git status

# 手动解决冲突后
git add <resolved-files>
git commit

问题 2:撤销撤销(重新应用被撤销的更改)

1
2
# 撤销之前的撤销提交
git revert <revert-commit-hash>

问题 3:撤销部分文件更改

1
2
3
4
# 撤销特定文件的更改
git checkout <commit-hash> -- <file-path>
git add <file-path>
git commit -m "恢复特定文件到之前的状态"

总结

git revert 是一个安全且强大的工具,特别适合:

  • ✅ 撤销已推送到远程仓库的提交
  • ✅ 在团队协作中保持历史完整性
  • ✅ 撤销合并提交
  • ✅ 创建可追踪的撤销记录

记住:git revert 通过创建新提交来撤销更改,不会改变历史记录,这使得它成为撤销已推送提交的最佳选择。

快速参考

场景 命令 说明
撤销单个提交 git revert <commit-hash> 创建新提交撤销指定提交
撤销最近提交 git revert HEAD 撤销最近的提交
撤销多个提交 git revert <commit1> <commit2> 撤销多个指定提交
撤销合并提交 git revert -m 1 <merge-commit> 撤销合并,保留主分支
撤销但不提交 git revert --no-commit <commit> 只创建更改,不自动提交
编辑提交信息 git revert -e <commit> 撤销时编辑提交信息

实际操作

🚨 创建撤销最近的提交 / git revert HEAD

Git_合并分支与撤销合并分支

合并分支 / git merge

1
git merge <branch>

撤销上一次合并 / git merge –abort

1
git merge --abort