正常情况下,我们的工作流就是
3
个步骤,对应上图中的
3
个箭头线:
git
add
.git commit -m
"comment"
git push
- git add .把所有文件放入暂存区;
- git commit把所有文件从暂存区提交进本地仓库;
- git push把所有文件从本地仓库推送进远程仓库。
检查修改
已修改,未暂存
(还没有做
git add .
之前)-> git diff
已暂存,未提交
(执行
git add .
后)-> git diff --cached
已提交,未推送
(执行
git commit
后)->
git diff master origin/master
撤销修改
已修改,未暂存
(还没有做
git add .
之前)->
git checkout .
或者
git reset --hard
已暂存,未提交
(执行
git add .
后)->(
git reset git checkout .
或者
git reset
--hard
git reset
只是把修改退回到了
git add .
之前的状态,也就是说文件本身还处于
已修改未暂存
状态,你如果想退回
未修改
状态,还需要执行
git checkout .
。
或许你已经注意到了,以上两个步骤都可以用同一个命令
git reset --hard
来完成。是的,就是这个强大的命令,可以一步到位地把你的修改完全恢复到
未修改
的状态。)
已提交,未推送
(执行
git commit
后)->
git reset --hard origin/master
(
还是这个
git reset --hard
命令,只不过这次多了一个参数
origin/master
,正如我 们上面讲过的,
origin/master
代表
远程仓库
,既然你已经污染了你的
本地仓库
,那么就从
远 程仓库
把代码取回来吧。
)
已推送 (
既
git add
了,又
git commit
了,并且还
git push
了
)
这时你的代码已经进入
远程仓库
。如果你想恢复的话,还好,由于你的
本地仓库
和
远程仓库
是等价的,你只需要先恢复
本地仓库
,再强制
push
到
远程仓库
就好了:
git reset --hard HEAD^ git push -f
错误push到了远端:
1.回滚本地的最新的push记录
git reset --hard HEAD~1
2.回滚远端的
git push --force
------------------------------------------------------------------
错误commit,没有push到远端
git log
复制 id73cf921b5bbd422d1a
#回滚到哪一条
git reset 73cf921b5bbd422d1a