最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Git撤回已經(jīng)提交(甚至已push)的代碼,但把改動(dòng)留在本地的解決

 更新時(shí)間:2026年05月29日 17:23:19   作者:程序員大龍蝦  
這篇文章主要介紹了Git撤回已經(jīng)提交(甚至已push)的代碼,但把改動(dòng)留在本地的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

這個(gè)坑基本每個(gè)人都會(huì)踩一遍:

剛 commit 完,順手 push 了。

過(guò)了兩分鐘發(fā)現(xiàn):這提交現(xiàn)在不該上去。

但問(wèn)題是——

代碼你還要留著,得繼續(xù)改,而不是直接刪掉。

這篇就講一件事:

怎么把提交從歷史里“抹掉”,但代碼還留在本地

公共提交避免使用這個(gè)方法,如果你是獨(dú)立開(kāi)發(fā),那沒(méi)問(wèn)題?。?!

先說(shuō)人話版結(jié)論

如果你只是:

  • 剛 push
  • 想撤回最近一次提交
  • 代碼還要留著

直接用這兩步就夠了:

git reset HEAD~1
git push --force-with-lease origin main

執(zhí)行完:

  • 遠(yuǎn)端沒(méi)有這次提交
  • 本地 git log 也沒(méi)有
  • 代碼還在(變成未提交狀態(tài))

很多時(shí)候,到這一步就結(jié)束了。

這兩條命令到底干了啥

第一條

git reset HEAD~1

意思是:

把當(dāng)前分支往前退一個(gè)提交

但注意,它不會(huì)刪你的代碼,只是把:

  • commit 里的內(nèi)容
  • ?? 變回工作區(qū)改動(dòng)

所以你會(huì)看到:

  • 文件還在
  • 只是變成“未提交”

第二條

git push --force-with-lease origin main

意思是:

用你當(dāng)前本地的 main,覆蓋遠(yuǎn)端 main

也就是把剛才“回退后的狀態(tài)”同步到遠(yuǎn)端。

如果你更想“精確控制”,可以指定 commit id

有些人不太喜歡這種“當(dāng)前分支推上去”的方式,更希望明確寫(xiě):

?? 我要回到哪個(gè)提交

那可以用 commit id。

第一步:查 commit id

最簡(jiǎn)單:

git log --oneline

比如看到:

070505c github page   ← 這個(gè)是你想撤回的
ff775f6 first commit  ← 這個(gè)是你要回退到的

?? 記?。耗阋氖?strong>前一個(gè)“正確提交”的 id

如果想看得更清楚一點(diǎn):

git log --oneline --graph --decorate -5

第二步:本地回退到這個(gè) id

git reset --mixed ff775f6

效果:

  • 提交記錄回退
  • 代碼還在
  • 不在暫存區(qū)

如果你希望改動(dòng)還在暫存區(qū):

git reset --soft ff775f6

第三步:遠(yuǎn)端也強(qiáng)制回退

git push --force-with-lease origin ff775f6:main

這句的意思很直白:

?? 把遠(yuǎn)端 main 指向 ff775f6

到這里為止,你得到什么

  • GitHub 上看不到那次錯(cuò)誤提交
  • 本地歷史也沒(méi)有
  • 代碼還在你本地,可以繼續(xù)改

這就是很多人想要的“撤回但保留代碼”。

那什么時(shí)候要用“三段式寫(xiě)法”?

你可能見(jiàn)過(guò)這種寫(xiě)法:

git reset --hard <commit>
git push --force-with-lease origin <commit>:main
git cherry-pick --no-commit <某個(gè)提交>

這套其實(shí)是補(bǔ)救方案,不是常規(guī)操作。

它通常用于:

  • 你已經(jīng) reset --hard 把代碼清掉了
  • 或者你想只恢復(fù)某一次提交的內(nèi)容

正常情況下(尤其是剛提交就反悔),用不到這么重。

為什么不推薦用 git revert

很多教程會(huì)說(shuō)用:

git revert

但它做的事情是:

新增一個(gè)“反向提交”

也就是說(shuō):

  • 原來(lái)的錯(cuò)誤提交還在
  • 只是多了一次“撤銷(xiāo)它”的提交

如果你的目標(biāo)是:

?? 讓這次提交徹底從歷史里消失

那就不要用 revert。

一個(gè)很現(xiàn)實(shí)的問(wèn)題:這操作有風(fēng)險(xiǎn)嗎?

有,而且必須說(shuō)清楚。

因?yàn)槟阌昧耍?/p>

git push --force-with-lease

這叫改寫(xiě)歷史。

風(fēng)險(xiǎn) 1:可能覆蓋別人的提交

如果你 push 之前:

?? 別人已經(jīng)往 main 提交了新代碼

那你這一推,有可能把對(duì)方的提交頂?shù)簟?/p>

風(fēng)險(xiǎn) 2:別人本地會(huì)“亂掉”

你改了遠(yuǎn)端歷史之后:

  • 別人本地還是舊歷史
  • pull / push 可能沖突
  • 甚至把你刪掉的提交再帶回來(lái)

怎么盡量安全一點(diǎn)

幾個(gè)簡(jiǎn)單建議:

1. 盡量別在多人共用分支亂搞

尤其是 main 正在被多人提交的時(shí)候。

2. 一定用這個(gè)

git push --force-with-lease

而不是:

git push --force

前者至少會(huì)幫你檢查遠(yuǎn)端有沒(méi)有被別人改過(guò)。

3. 操作前看一眼遠(yuǎn)端

git fetch origin
git log --oneline --graph --decorate --all -10

4. 如果已經(jīng)被別人用了,別改歷史

這種時(shí)候更建議:

git revert

最后給你一個(gè)記憶版本

如果你只是:

?? “剛 push,想撤回,但代碼要留著”

記這一套就夠了:

git reset HEAD~1
git push --force-with-lease origin main

如果你想完全可控(明確回到哪個(gè)點(diǎn)):

git log --oneline
git reset --mixed <commit-id>
git push --force-with-lease origin <commit-id>:main

總結(jié)一下

這件事本質(zhì)其實(shí)就一句話:

 刪的是提交記錄,不是代碼內(nèi)容。

理解這一點(diǎn),Git 基本就通了。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Git 2.27.0詳細(xì)安裝步驟詳解

    Git 2.27.0詳細(xì)安裝步驟詳解

    這篇文章主要介紹了Git 2.27.0詳細(xì)安裝步驟,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Git撤銷(xiāo)命令revert與reset區(qū)別全面對(duì)比

    Git撤銷(xiāo)命令revert與reset區(qū)別全面對(duì)比

    在Git中g(shù)it revert和git reset都可以用來(lái)撤銷(xiāo)更改,但它們的工作方式和影響有很大的不同,這篇文章主要介紹了Git撤銷(xiāo)命令revert與reset區(qū)別全面對(duì)比的相關(guān)資料,需要的朋友可以參考下
    2025-12-12
  • 如何給MD5加上salt隨機(jī)鹽值

    如何給MD5加上salt隨機(jī)鹽值

    不知道大家知不知道,在開(kāi)發(fā)的時(shí)候如果直接給密碼散列,黑客可以通過(guò)查散列值字典(例如MD5密碼破解網(wǎng)站),得到某用戶的密碼。但如果加上salt后就會(huì)難上很多,即便是你獲得了其中的salt和最終密文,破解也是相當(dāng)麻煩的。下面跟著小編通過(guò)這篇文章來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • 阿里開(kāi)源低代碼引擎和生態(tài)建設(shè)實(shí)戰(zhàn)及思考

    阿里開(kāi)源低代碼引擎和生態(tài)建設(shè)實(shí)戰(zhàn)及思考

    這篇文章主要為大家介紹了阿里開(kāi)源低代碼引擎和生態(tài)建設(shè)實(shí)戰(zhàn)及思考,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 算法系列15天速成 第一天 七大經(jīng)典排序【上】

    算法系列15天速成 第一天 七大經(jīng)典排序【上】

    今天是開(kāi)篇,得要吹一下算法,算法就好比程序開(kāi)發(fā)中的利劍,所到之處,刀起頭落
    2013-11-11
  • 判斷Email地址是否正確的幾個(gè)函數(shù)(asp/php/javascript)

    判斷Email地址是否正確的幾個(gè)函數(shù)(asp/php/javascript)

    今天總結(jié)了幾個(gè)判斷Email地址的函數(shù),和大家分享一下
    2010-08-08
  • 一文徹底理清session、cookie、token的區(qū)別

    一文徹底理清session、cookie、token的區(qū)別

    session和token本質(zhì)上是沒(méi)有區(qū)別的,都是對(duì)用戶身份的認(rèn)證機(jī)制,只是他們實(shí)現(xiàn)的校驗(yàn)機(jī)制不一樣而已,下面這篇文章主要給大家介紹了關(guān)于session、cookie、token區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • git驗(yàn)證線上的版本是否符合預(yù)期

    git驗(yàn)證線上的版本是否符合預(yù)期

    當(dāng)我們想知道部署項(xiàng)目的哪個(gè)版本有問(wèn)題?當(dāng)我們想知道線上運(yùn)行的版本是否是我們預(yù)期的版本?當(dāng)我們想把部署的版本與代碼進(jìn)行關(guān)聯(lián)?如果是你用git來(lái)做版本管理,那就可以使用git-commit-id-maven-plugin插件來(lái)實(shí)現(xiàn)上述功能
    2022-07-07
  • HTTP 2.0 詳細(xì)介紹

    HTTP 2.0 詳細(xì)介紹

    本文主要介紹 HTTP 2.0的知識(shí),這里整理了詳細(xì)的資料,并對(duì)HTTP2.0的知識(shí)做了詳解,有需要的小伙伴可以參考下
    2016-09-09
  • 關(guān)于target目錄在idea沒(méi)顯示的問(wèn)題

    關(guān)于target目錄在idea沒(méi)顯示的問(wèn)題

    這篇文章主要介紹了關(guān)于target目錄在idea沒(méi)顯示的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論

昭苏县| 渝北区| 锦屏县| 马尔康县| 突泉县| 陆良县| 珠海市| 高平市| 临沧市| 南岸区| 蓬莱市| 和平区| 凤山县| 德清县| 重庆市| 藁城市| 太康县| 苍山县| 南召县| 万山特区| 台前县| 镶黄旗| 睢宁县| 克什克腾旗| 元谋县| 南召县| 汤阴县| 旺苍县| 石泉县| 沁水县| 花莲县| 平邑县| 佳木斯市| 上杭县| 呼伦贝尔市| 海阳市| 瓦房店市| 长丰县| 双鸭山市| 阿拉善右旗| 南部县|