1弃榨、撤銷 commit 的文件
2、撤銷 push 的文件1娜饵、git reset
2箱舞、視圖操作 reset
3、git revert
4晴股、視圖操作 revert
5愿伴、git reset 和 git revert 的區(qū)別
第一種情況 : 撤銷commit文件
我們先查看一下log日志:
兩種查看方法:
1、git log
顯示從近到遠的日志記錄电湘,按向下鍵來查看更多隔节,按 Q
鍵退出查看日志
2、git log --pretty=oneline
簡潔顯示日志記錄
當然還有更多查看 log 的方法,就不展示了,自行百度吧.
前五次提交是已經(jīng) push 到遠程倉庫的,第六次是 commit 的,然后我突然不想 commit 了,我想撤銷,好嘞, git 命令嗨起來
git reset --hard 提交id
意思就是,你要撤銷第六次 commit ,你就要把 HEAD 指向 第五次,所以 reset 一下 HEAD 就好啦
注意:工作空間的代碼的改動就沒啦
如果想保留工作空間的代碼只是撤銷commit,請執(zhí)行下面的命令:
git reset --soft HEAD^
HEAD^的意思是上一個版本寂呛,也可以寫成HEAD~1
如果你進行了2次commit先朦,想都撤回笆豁,可以使用HEAD~2
ps : git status 查看當前文件的狀態(tài)
至于這幾個參數(shù):
--mixed
意思是:不刪除工作空間改動代碼,撤銷commit埠啃,并且撤銷git add . 操作
這個為默認參數(shù),git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
--soft
不刪除工作空間改動代碼庶近,撤銷commit富蓄,不撤銷git add .
--hard
刪除工作空間改動代碼,撤銷commit尚镰,撤銷git add .
注意完成這個操作后阀圾,就恢復到了上一次的commit狀態(tài)。
第二種情況 : 撤銷push文件
方法一:
第一步: git log --pretty=oneline 查看當前提交的日志
第二步: git reset --soft XXX XXX是commitID(d6cdbba417....) 回退當前工作空間的上一個版本,并且保留代碼更改
第三步: git log --pretty=oneline 再次查看當前提交的日志,確認是否成功撤銷,當然,你也可以不看,基本上都會成功,保險一下,看看唄
第四步: git push origin master --force 強制提交當前版本號狗唉,以達到撤銷版本號的目的.必須添加參數(shù)force進行強制提交初烘,否則會提交失敗,報錯原因:本地項目版本號低于遠端倉庫版本號。(master 代表分支名稱,默認是 master分俯,或者也可以直接用git push --force)
注意:這種強制提交的方法只有owner的時候可以用
你看,github上第五次提交也撤回咯
方法二
選中Reset Current ... 之后肾筐,選擇 Hard 的方式,這幾個的意思缸剪,都講過咯吗铐,不多說咯
執(zhí)行 git push origin master --force 命令 遠程代碼可以回退咯
方法三
我們來看圖分析,一步步來做
最后一次提交的備注是:NNNNNN提交
倒數(shù)第二次提交的備注是:MMMMM提交
我們目標:回退最后一次提交 NNNNNN提交杏节,讓工作空間的代碼回到 MMMMM提交 的狀態(tài)唬渗。
第一步: git log --pretty=oneline 查看當前提交的日志
第二步: git revert commitID revert你想回退的版本
第三步:會進入一個新的編輯界面,編寫commit的信息
i 轉換中文
Esc + :wq 退出并保存commit信息
第四步:git log --pretty=oneline 再次查看當前提交的日志
第五步:push 代碼(git push或者用AS push)
看遠程提交信息:
方法四
這個最簡單 借助AS工具來完成奋渔,無需使用git 命令 镊逝。
前提是:AS 配置好 Git 了哈。
我們依然看圖分析來做:
最后一次提交的備注是:Revert 回退NNNNNN提交
倒數(shù)第二次提交的備注是:NNNNNN提交
唉嫉鲸,我這個時候撑蒜,突然又想用 NNNNNN提交 提交的代碼了 ,在方法二中,NNNNNN提交 提交的代碼 已經(jīng)被刪掉了座菠,這里有兩個方案染突,
第一:我們可以用 方法一 reset HEAD 回到NNNNNN提交的地方,
第二:也可以再把Revert 回退NNNNNN提交給revert 辈灼,也可以回到NNNNNN提交的狀態(tài)的代碼份企。
選中要revert的選項,右擊
編輯commit 信息巡莹,然后commit
最后push司志,再看看代碼和提交記錄
好了 NNNNNN提交 的代碼又回來了
看遠程提交信息:
git reset 和 git revert 的區(qū)別
1、git revert是用一次新的commit來 回滾之前的commit降宅,git reset是直接 刪除指定的commit骂远。
2、在回滾這一操作上看腰根,效果差不多激才。但是在日后繼續(xù)merge以前的老版本時有區(qū)別。因為git revert是用一次逆向的commit“中和”之前的提交额嘿,因此日后合并老的branch時瘸恼,導致這部分改變不會再次出現(xiàn),但是git reset是之間把某些commit在某個branch上刪除册养,因而和老的branch再次merge時东帅,這些被回滾的commit應該還會被引入。
3球拦、git reset 是把HEAD向后移動了一下靠闭,而git revert是HEAD繼續(xù)前進,只是新的commit的內容和要revert的內容正好相反坎炼,能夠抵消要被revert的內容愧膀。
ps:如何刪除已經(jīng)push的idea等不想要的文件?
第一步:配置好.gitignore文件,把idea加進去
第二步:git rm -r --cached . (不要忘記點哦~)
第三步:git add .(不要忘記點哦~)
第四部:git commit -m "這里是備注"
第五步:git push
大功告成~~~