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

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

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

這個坑基本每個人都會踩一遍:

剛 commit 完,順手 push 了。

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

但問題是——

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

這篇就講一件事:

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

公共提交避免使用這個方法,如果你是獨立開發(fā),那沒問題?。。?/strong>

先說人話版結(jié)論

如果你只是:

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

直接用這兩步就夠了:

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

執(zhí)行完:

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

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

這兩條命令到底干了啥

第一條

git reset HEAD~1

意思是:

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

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

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

所以你會看到:

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

第二條

git push --force-with-lease origin main

意思是:

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

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

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

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

?? 我要回到哪個提交

那可以用 commit id。

第一步:查 commit id

最簡單:

git log --oneline

比如看到:

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

?? 記住:你要的是前一個“正確提交”的 id

如果想看得更清楚一點:

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

第二步:本地回退到這個 id

git reset --mixed ff775f6

效果:

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

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

git reset --soft ff775f6

第三步:遠端也強制回退

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

這句的意思很直白:

?? 把遠端 main 指向 ff775f6

到這里為止,你得到什么

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

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

那什么時候要用“三段式寫法”?

你可能見過這種寫法:

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

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

它通常用于:

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

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

為什么不推薦用 git revert

很多教程會說用:

git revert

但它做的事情是:

新增一個“反向提交”

也就是說:

  • 原來的錯誤提交還在
  • 只是多了一次“撤銷它”的提交

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

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

那就不要用 revert。

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

有,而且必須說清楚。

因為你用了:

git push --force-with-lease

這叫改寫歷史。

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

如果你 push 之前:

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

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

風(fēng)險 2:別人本地會“亂掉”

你改了遠端歷史之后:

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

怎么盡量安全一點

幾個簡單建議:

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

尤其是 main 正在被多人提交的時候。

2. 一定用這個

git push --force-with-lease

而不是:

git push --force

前者至少會幫你檢查遠端有沒有被別人改過。

3. 操作前看一眼遠端

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

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

這種時候更建議:

git revert

最后給你一個記憶版本

如果你只是:

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

記這一套就夠了:

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

如果你想完全可控(明確回到哪個點):

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

總結(jié)一下

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

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

理解這一點,Git 基本就通了。

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

相關(guān)文章

  • Git 2.27.0詳細安裝步驟詳解

    Git 2.27.0詳細安裝步驟詳解

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

    Git撤銷命令revert與reset區(qū)別全面對比

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

    如何給MD5加上salt隨機鹽值

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

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

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

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

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

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

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

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

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

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

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

    HTTP 2.0 詳細介紹

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

    關(guān)于target目錄在idea沒顯示的問題

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

最新評論

平度市| 巫溪县| 平江县| 镇雄县| 清流县| 盖州市| 嵊州市| 澜沧| 本溪| 安陆市| 日照市| 三门峡市| 昌邑市| 长葛市| 林西县| 岐山县| 竹山县| 蒲城县| 凯里市| 长阳| 尤溪县| 镇远县| 金塔县| 登封市| 富平县| 清水河县| 堆龙德庆县| 壶关县| 黑山县| 禹州市| 泸州市| 从化市| 湖北省| 巨野县| 诏安县| 黎川县| 兴业县| 沙洋县| 浦城县| 景东| 南丹县|