在任何一个阶段,都可能想要撤销某些操作,来取消对某文件的修改。注意,有些操作是是不可逆的.
检查修改
git diff
检查工作区和暂存区之间的差异git diff --cached
检查暂存区和本地仓库之间的差异git diff master origin/develop
检查本地仓库与远程仓库 develop 分支之间的差异
重新提交 git commit --amend
有时提交完了发现漏掉几个文件没添加、或者提交信息写错,需要重新提交. git commit --amend
会将暂存区的文件提交,并覆盖原来的提交信息
取消暂存的文件 git reset HEAD <file>...
例如: 修改了两个文件并想将它们做为 2 次独立的修改提交,但却意外地输入 git add *
暂存了它们两个,如何取消暂存中的文件? 正如 git status
命令提示的 使用git reset HEAD <file> ...
来撤销暂存
1 | git status |
git reset HEAD a.md
1 | git reset HEAD a.md |
撤销对文件的修改 git checkout -- <file>...
撤销修改,将其还原成上次提交时的样子.但git checkout -- <file>
是一个危险命令,它只是拷贝了一个文件来覆盖原文件,原文件所做的修改都会消失。
不同场景下的撤销(未 push 到远程仓库还原操作)
文件被修改,未执行
git add
1
2
3git checkout <fileName>
git checkout .同时对多个文件执行
git add
,但本次提交只想提交其中部分文件1
2
3
4
5git add *
git status
取消部分暂存文件
git reset HEAD <fileName>文件执行了
git add
, 但想撤销对其中部分文件的修改1
2
3
4
5取消暂存
git reset HEAD <fileName>
取消修改
git checkout <fileName>已经
git commit
, 想再次修改,但不想产生新的 commit 记录1
2
3修改的最后一次暂存
git add <fileName>
git commit --amend -m "comment"已经在本地多次提交记录
git commit
,但想撤销到其中某次 Commit1
2git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
不同场景下的回滚(已 push 到远程仓库的还原操作)
回滚有风险,需要提前做好备份,通知其他团队成员
撤销指定文件到指定版本
1
2
3
4
5查看指定文件的历史版本
git log <fileName>
回滚到指定commitID
git chekcout <commitID> <fileName>