鍍金池/ 問答/Linux/ 怎么刪除git遠(yuǎn)程倉庫上某次commit

怎么刪除git遠(yuǎn)程倉庫上某次commit

不小心用自己的github賬號(hào)連接上公司git遠(yuǎn)程倉庫,而且還提交上去了,怎么刪除掉這次提交啊

回答
編輯回答
哚蕾咪

先補(bǔ)充一下。
樓上說的那個(gè) git reset --hard 是把 HEAD 回滾到某個(gè) commit。如果你要回滾的 commit 是最新的,那可以這么做。同樣,git reset --hard HEAD^ 或者 git reset --hard HEAD~1 都可以起到同樣的效果。
對于 git revert 就不同了。git revert 并不會(huì) 刪除某條 commit,而是會(huì)創(chuàng)建一條新的 commit 用來回滾某條 commit 的改動(dòng)。

個(gè)人覺得,如果你不打算新創(chuàng)建 branch (然后再 cherry-pick),那最省事兒的辦法是用 git rebase --onto

比如目前代碼庫中,master branch 上有如下幾條 commits:

A - B - C - D - E - F - G

你想把 D 那條 commit 刪掉,前面的都要,后面的也都要。那么你應(yīng)該執(zhí)行:

git rebase --onto master~4 master~3 master

之后,你的 commit history 就是:

A - B - C - E' - F' - G'

然后你 git push origin master -f 就行了


要注意的是,這樣做會(huì) 徹底 刪掉那條 commit。唯一的找回方式是通過 git reflog。

問題中你說你用自己的賬戶提交了。如果你只是想改下那條 commit 的 author,那對于上面的情況中的 D:

A - B - C - D - E - F - G

這樣就行:

git rebase -i C

把 D 那條 commit 前面的 pick 改成 edit

然后

git commit --amend --author="xxxxxxxx"

然后

git rebase --continue
2017年1月15日 23:00
編輯回答
舊時(shí)光

如果這次commit你徹底不想要,比如不想讓它顯示在提交歷史中。確保還沒其他人提交之前,進(jìn)行強(qiáng)制回滾。

git reset --hard [commit-id] # 你提交的前一次commitid
git push -f origin branch-name
操作不可挽回,謹(jǐn)慎使用。這樣做了你的提交就徹底找不回來了

撤銷你之前的提交并產(chǎn)生一次新的提交,你的提交還會(huì)保留在提交歷史中。

git revert HEAD~1 # 往前回滾N次
2018年4月2日 19:19