已修改,但未暂存
# 列出所有的修改
git diff
# 列出某(几)个文件的修改
git diff xx/xx.java yy/yy.java
# 撤销项目下所有的修改
git checkout
# 撤销当前文件夹下所有的修改
git checkout .
# 撤销某几个文件的修改
git checkout xx/xx.java yy/yy.java
# untracked状态,撤销新增的文件
git clean -f
# untracked状态,撤销新增的文件和文件夹
git clean -df
已暂存,未提交
已执行git add,但未执行git commit,但是用git diff已经看不到任何修改。 因为git diff检查的是工作区与暂存区之间的差异。
# 这个命令显示暂存区和本地仓库的差异
git diff --cached
# 暂存区的修改恢复到工作区
git reset
# 回到已修改状态,修改的内容仍然在工作区中
git reset --soft
# 回到未修改状态,清空暂存区和工作区,等于git reset 和 git checkout 2步操作
git reset --hard
# 与git reset等价,工作区文件内容不变,并清空暂存区
git reset --mixed
已提交,未推送
执行git commit之后,会在仓库中生成一个版本号(hash值),标志这次提交。之后任何时候,都可以借助这个hash值回退到这次提交。
# 比较2个分支之间的差异
git diff <branch-name1> <branch-name2>
# 查看本地仓库与本地远程仓库的差异
git diff master origin/master
# 回退与本地远程仓库一致
git reset --hard origin/master
# 回退到本地仓库上一个版本
git reset --hard HEAD^
# 回退到任意版本
git reset --hard <hash code>
# 回退且回到已修改状态,修改仍保留在工作区中
git reset --soft/git reset
已推送到远程
# 强制覆盖远程分支
git push -f orgin master
# 如果之前已经用 -u 关联过,则可省略分支名
git push -f