場景一:代碼回退
1.1 git add . 后绝淡,從暫存區(qū)埃脏,回到工作區(qū):
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汗茄,不然工作區(qū)修改也不保了)
然后所有回到待commit狀態(tài) ,遠程記錄不變,遠程代碼會回到上一版本
注:git reset --soft HEAD^大法真好用铭若,保留修改在工作區(qū)—soft洪碳,不想保留—hard,但是hard真的得慎用叼屠,git add后的代碼還有救瞳腌,如果都沒有add,git無法追蹤那就真的找不回來咯
使用soft后再次push可能會報錯镜雨,比如目前版本落后于線上版本
此時git push -f origin //注意-f強制性覆蓋嫂侍,只能用于自己分支,慎用
情景二:回退代碼丟失找回代碼 git reset –hard HEAD^的鍋
Git commit 后發(fā)現(xiàn)代碼commit多了荚坞,回退挑宠,回退,回退颓影。
Git reset --hard HEAD^ 哦豁各淀,本地代碼一起丟了。
瘋狂找回中……
git reset --hard HEAD@{2}// HEAD@{2}為最后那次commit時的版本诡挂,目前已回到commit狀態(tài)揪阿,想要回到add或add前參考情景一(有驚無險奧)
(這里會有一個疑惑如果此時git reset --soft HEAD^會不會回到剛剛丟失代碼的時候,結(jié)果是回到了change to be commited狀態(tài))
情景三:Merge時與其他分支有沖突
命令:
Git fetch是將遠程主機的最新內(nèi)容拉到本地,用戶在檢查了以后決定是否合并到工作本機分支中(順便提一句區(qū)別git pull則是將遠程主機的最新內(nèi)容拉下來后直接合并咆畏,git pull = git fetch + git merge這樣可能會產(chǎn)生沖突南捂,需要手動解決)
Git checkout -b <branch> 新建分支并切換到該分支
Git merge <branch> 將branch合并到當(dāng)前分支
Git log 查看提交日志
Git push origin feature-merge 把當(dāng)前分支推送到遠程
Git fetch origin <遠端分支>:<本地分支> 本地分支沒有會自動新建(也可以分兩步先建分支,再拉代碼)
Git checkout -b feature-merge//新建用于合并的分支
Git merge dev//將dev合并到當(dāng)前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提交服務(wù)器
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
刷新遠程....
后續(xù)實踐補充......