reset命令
介紹
git reset 命令格式為:
git reset [ --soft | --mixed | --hard ] [< commitid >]
在git的這些命令中g(shù)it reset是最長常用的,也是最危險(xiǎn)的最容易被誤用的。它的主要參數(shù)是:soft,mixed,hard它們告訴git,當(dāng)執(zhí)行reset是,要對(duì)index和working copy做什么。
參數(shù)
soft:
–soft參數(shù)只將其它的commit重置到你選定的HEAD,index和working copy中的數(shù)據(jù)不變。
mixed:
–mixed參數(shù)是將HEAD和index重置到你選定的HEAD,而working copy不變。
hard:
–hard是將HEAD,index,working copy同時(shí)改變到你規(guī)定的commit上。
注意:commitid是每次你要回退到的那個(gè)commit的id,它可以通過git log獲取。
使用
commit還沒有push
可以看到我新進(jìn)行了一次提交,但是還沒有push。此時(shí)我發(fā)現(xiàn),我提交錯(cuò)了,要撤回這次提交。
執(zhí)行:
git log
要退回到錯(cuò)誤提交的上一次提交。
# 什么都不寫 默認(rèn) --mixed
git reset 0997fab2fa0bfa468cc5c55e56d7df0491869c3a
可以看到,執(zhí)行了命令之后版本退回去了,但是修改的內(nèi)容還在。
如果不想要修改的內(nèi)容了
# --hard 丟棄修改的內(nèi)容
git reset --hard 0997fab2fa0bfa468cc5c55e56d7df0491869c3a
退回到了指定版本,修改的內(nèi)容也沒了。
commit 已經(jīng)push
回退的方式同上,執(zhí)行完上面指定命令后 可以看到,線上代碼還在錯(cuò)誤提交那里,本地代碼再18:28提交的那一次那里。右下方出現(xiàn)小藍(lán)點(diǎn),說明線上代碼比本地代碼更新。
此時(shí)如果你push,會(huì)提示:
點(diǎn)擊merge就又回去了,完全沒退回去。
此時(shí)應(yīng)該執(zhí)行:
# 有可能會(huì)讓你輸入用戶名、密碼。
git push --force
這樣遠(yuǎn)程代碼也就被回退了。
補(bǔ)救
如果我們通過git reset --hard將版本回退到之前的版本了,那我們還是可以補(bǔ)救的,先通過git reflog命令,找到要回退的commitId,然后通過命令:git reset --hard commitId來恢復(fù)。
git revert命令
revert說明
??由于某些文章說的說法可能不是很明確,所以導(dǎo)致一部分小袁同志們對(duì)revert有一定的誤解,一開始我也很難理解revert到底是干什么的。畢竟用于版本回退的都已經(jīng)有g(shù)it reset了,為什么還要再出一個(gè)git revert?
??其實(shí)呢,revert它不會(huì)想reset一樣”帶你回到“那個(gè)你指定的提交,并假裝那個(gè)提交之后的后續(xù)提交都沒有發(fā)生。它是用于單個(gè)提交的邏輯否定 -并且單獨(dú)提交- 保留后續(xù)提交。
舉例
比如:
我們有一個(gè)文件里面寫了:
提交A
提交B
提交C
提交D
第一次我們把它改成:
提交A
2提交
提交C
提交D
并提交 假設(shè)commitId是tijiao1
第二次我們把它改成:
提交A
2提交
提交C
4提交
并提交 假設(shè)commitId是tijiao2
之后我們進(jìn)行revert:
git revert tijiao1
此時(shí)結(jié)果會(huì)變成:
提交A
提交B
提交C
4提交
所以我們要知道revert是只撤回指定的提交,并保留后續(xù)的提交。
如果你想讓版本直接回退到tijiao1并且取消后續(xù)所有提交那你應(yīng)該使用reset。
命令
revert分兩種,因?yàn)閏ommit分兩種。
一種是常規(guī)的 commit,也就是使用 git commit 提交的 commit;
另一種是 merge commit,在使用 git merge 合并兩個(gè)分支之后,你將會(huì)得到一個(gè)新的 merge commit,merge commit 和普通 commit 的不同之處在于 merge commit 包含兩個(gè) parent commit,代表該 merge commit 是從哪兩個(gè) commit 合并過來的。
常規(guī)的revert:文章來源:http://www.zghlxwxcb.cn/news/detail-605572.html
//撤回指定的任意提交
git revert commitId
//撤回最后一次提交
git revert HEAD
//撤回倒數(shù)第二次提交
git revert HEAD^
merge commit 的revert:加上-m表示撤回哪一個(gè)分支的。它的數(shù)據(jù)是1或2.文章來源地址http://www.zghlxwxcb.cn/news/detail-605572.html
//保留第一個(gè)分支為主線
git revert -m 1 commitId
到了這里,關(guān)于git reset 命令詳解 git revert命令詳解。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!