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...
