鍍金池/ 問答/Linux/ git 撤銷 commit

git 撤銷 commit

是這樣,本地文件和遠(yuǎn)程倉(cāng)庫(kù)發(fā)生沖突了,關(guān)鍵我還提交了,然后經(jīng)歷一系列復(fù)雜的操作之后,整個(gè)變得很亂。于是我想把本地文件回滾到遠(yuǎn)程倉(cāng)庫(kù)的某一版本,然后重新修改提交推送,于是我還原了文件,關(guān)鍵是提交卻沒有變,如果這時(shí)候推送,將會(huì)把還原之前的提交給推送了,怎么把提交的全部清除?

圖片描述

(圖片來自阮老師的博客,(傳送門)[http://www.ruanyifeng.com/blo...])

也就是Remote 和 workspace 都已經(jīng)同步了,而 repository那里還存著上次的 '提交' (commit),如果這時(shí)候推送,將會(huì)把上次的 '提交' (commit) 給推送出去,這樣同步就白搭了。怎么把那些 '提交' 清空呢?

回答
編輯回答
執(zhí)念

不知道理解對(duì)了你的問題沒= =

假設(shè),現(xiàn)在你的情況是有五個(gè) commit,其中 D 和 E 是你自己加上去,但又不想要的 commit:
A - B - C - D - E

現(xiàn)在你要變成這樣:
A - B - C

對(duì)么?

如果是,那就:

git reset --hard C
git push -f yourRemote yourBranch

直接 git reset 不行,因?yàn)?reset 的默認(rèn)是 git reset --mixed。


樓上說的 git revert,雖然執(zhí)行 git revert C 之后,代碼和上面的一樣,但你的歷史記錄會(huì)變成

A - B - C - D - E - E'。其中 E' 包含回滾 D 和 E 的代碼改動(dòng)

2017年3月9日 15:38
編輯回答
我以為

本地通過 git reset 清空 commit,然后 git push --force,強(qiáng)制覆蓋掉遠(yuǎn)程的

或者 本地執(zhí)行那個(gè)commit的反響操作,叫 git revert {commit},然后push

2017年7月1日 23:31
編輯回答
做不到

問題描述的不是很明確啊,如果想從遠(yuǎn)程倉(cāng)庫(kù)的某個(gè)版本重新開發(fā)的話,重新clone一個(gè)最簡(jiǎn)單了,但是這樣之前的修改都沒有了。

2017年11月12日 10:47