Git常用操作与撤销

时游大约 2 分钟

Git 常用操作与撤销

撤回提交

撤回最近的一次提交(保留修改在工作区)

git reset --soft HEAD~1

reset 的三种模式

git reset --soft HEAD~1   # 撤销 commit,修改保留在暂存区
git reset --mixed HEAD~1  # 撤销 commit + add,修改保留在工作区(默认)
git reset --hard HEAD~1   # 撤销 commit + add + 工作区修改,慎用!

追加提交(少写了一个文件,不想产生新的 commit)

git add 遗漏的文件
git commit --amend --no-edit   # 并入上一次提交,不修改提交信息

revert:生成一个反向提交(适合已推送到远程的公共分支)

git revert commitId           # 撤销指定提交,会生成一条新的提交记录
git revert -n commitId        # 不自动 commit,可多个一起处理后手动提交

reset 是"移动指针",会改写历史;revert 是"反向提交",不改写历史,多人协作的远程分支应优先使用 revert。

暂存工作区:stash

git stash          # 暂存当前工作区的修改
git stash list     # 查看暂存列表
git stash pop      # 恢复最近一次暂存的修改并删除该暂存记录
git stash apply    # 恢复但保留暂存记录
git stash drop     # 删除最近一次暂存记录
git stash -u       # 连同未跟踪的新文件一起暂存

典型场景:功能开发到一半需要切分支修 bug,先 stash 保存现场,修完再切回来 pop。

挑选提交:cherry-pick

git cherry-pick commitId          # 将指定提交应用到当前分支
git cherry-pick c1 c2             # 多个提交
git cherry-pick c1^..c2           # 一个区间(含 c1)

典型场景:只想把 master 上的一次 bug 修复带到 release 分支,而不合并整个分支。

后悔药:reflog

git reflog                 # 查看所有 HEAD 的移动记录
git reset --hard HEAD@{2}  # 回到 reflog 中记录的任意位置

哪怕是 reset --hard 误删的提交,只要提交过,都能通过 reflog 找回。

查看与对比

git log --oneline --graph --all   # 图形化查看所有分支提交记录
git show commitId                 # 查看某次提交的详细改动
git diff                          # 工作区 vs 暂存区
git diff --cached                 # 暂存区 vs 最新提交
git blame 文件名                  # 查看文件每行的最后修改人
Loading...