场景一:代码回退
1.1 git add . 后,从暂存区,回到工作区:
git restore --staged <file>(.表示全部撤回)
1.2 git commit后,从commit回到Change to be commited:
git reset --soft HEAD^
1.3 push到仓库后回滚到上一次提交
git reset --soft HEAD^
(可千万不能用—hard,不然工作区修改也不保了)
然后所有回到待commit状态 ,远程记录不变,远程代码会回到上一版本
注:git reset --soft HEAD^大法真好用,保留修改在工作区—soft,不想保留—hard,但是hard真的得慎用,git add后的代码还有救,如果都没有add,git无法追踪那就真的找不回来咯
使用soft后再次push可能会报错,比如目前版本落后于线上版本
此时git push -f origin //注意-f强制性覆盖,只能用于自己分支,慎用
情景二:回退代码丢失找回代码 git reset –hard HEAD^的锅
Git commit 后发现代码commit多了,回退,回退,回退。
Git reset --hard HEAD^ 哦豁,本地代码一起丢了。
疯狂找回中……
git reset --hard HEAD@{2}// HEAD@{2}为最后那次commit时的版本,目前已回到commit状态,想要回到add或add前参考情景一(有惊无险奥)
(这里会有一个疑惑如果此时git reset --soft HEAD^会不会回到刚刚丢失代码的时候,结果是回到了change to be commited状态)
情景三:Merge时与其他分支有冲突
命令:
Git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中(顺便提一句区别git pull则是将远程主机的最新内容拉下来后直接合并,git pull = git fetch + git merge这样可能会产生冲突,需要手动解决)
Git checkout -b <branch> 新建分支并切换到该分支
Git merge <branch> 将branch合并到当前分支
Git log 查看提交日志
Git push origin feature-merge 把当前分支推送到远程
Git fetch origin <远端分支>:<本地分支> 本地分支没有会自动新建(也可以分两步先建分支,再拉代码)
Git checkout -b feature-merge//新建用于合并的分支
Git merge dev//将dev合并到当前merge分支
…………解决冲突
Git log//查看自己的提交有没有和进去
Git push origin feature-merge//把合并分支提交到远程
在远程仓库提merge
删除命令:
删除本地分支: git branch -D [branchName]
删除远程分支:git push origin –delete [branchName]//同时删除本地分支和远程分支
场景四:提交代码,注释搞了一堆代码,哈哈哈哈嗝
1、git commit --amend
2、在命令行的最上面会显示上次提交的备注,然后我们需要进入编辑模式进行修改,按i键
3、开始编辑,修改备注
4、修改完成后,按Esc退出编辑模式
5、再按组合键 Shift + :
6、输入wq,然后回车(w的意思是保存,q的意思是退出,这一步也可以拆成两步:输入w按回车、输入q按回车)
7、修改完成,git push提交服务器
8、push不上去?
![image.png](https://upload-images.jianshu.io/upload_images/15034020-359fca18ac7d10d8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
因为hash值改变了
安全强制push:git push origin [branchName] --force-with-lease
刷新远程....
后续实践补充......