国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

這篇具有很好參考價值的文章主要介紹了記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

前言

在做項(xiàng)目時遇到了一個問題,就是不知道什么操作,無緣無故把test分支代碼合并到了master,導(dǎo)致花了好長時間去恢復(fù)master分支的代碼,所以研究了一下,到底是什么原因?qū)е碌倪@個問題
PS: 后來分析出來根本原因,確定這確實(shí)是IDEA的一個BUG,在下面會有詳細(xì)描述

復(fù)現(xiàn)方式

  1. 當(dāng)我們在test分支時,通過pull拉取更新代碼,這時候會有一個進(jìn)度條
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  2. 進(jìn)度條走完之前,我們想要去另一個分支看東西,點(diǎn)了checkout分支master,這時候我們切換到master分支
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  3. pull動作走完,這時候會提示合并代碼,這時候有兩種情況

  • 情況一:如果有文件沖突,會彈出合并窗口,沒注意點(diǎn)了合并代碼,就會把test分支的代碼合并到master分支上
    
  • 情況二:如果沒有代碼沖突,這時候會直接合并代碼,也會把test分支的代碼合并到master分支上
    
  1. 這時候可能有的同學(xué)把代碼提交到遠(yuǎn)程

這將是一個很嚴(yán)重的問題
經(jīng)過分析IDEA的日志發(fā)現(xiàn),在點(diǎn)擊更新按鈕時,IDEA并沒有直接執(zhí)行g(shù)it pull,而是拆成了兩步,第一步fetch 同步線上版本,第二步merge origin/test合并遠(yuǎn)程test分支到本地HEAD(這里沒有指定本地分支,所以會直接合并到HEAD分支上)。
這里就出現(xiàn)一個問題,兩個指令就是兩個鎖,這種見有十秒左右的空檔期,在這個空檔期我們不小心切換了分支mater,就會導(dǎo)致HEAD指向了切換后的分支master,再執(zhí)行merge origin/test ,就會導(dǎo)致遠(yuǎn)程test分支合并到master上,假如有沖突就會彈出合并沖突窗口,沒有沖突就直接合并上去了,這里有時候是沒有沖突的(我們很有可能剛剛從master拉出來分支A,A往test上合并時處理過沖突,就導(dǎo)致test分支合并到master分支并沒有沖突)
這里假如底層使用git pull一個指令也是沒有問題的,因?yàn)橐粋€指令就是一個鎖,你在執(zhí)行pull過程中想要切換分支時,因?yàn)橛墟i,會切換失敗,而不是導(dǎo)致合并錯誤

IDEA日志顯示的操作過程
第一步執(zhí)行 :fetch 操作
git -c core.quotepath=false -c log.showSignature=false fetch origin --recurse-submodules=no --progress --prune 
第二步執(zhí)行:merge
git -c core.quotepath=false -c log.showSignature=false merge origin/test --no-stat -v 

記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

解決辦法

下面是分支版本示意圖
記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

情況一:關(guān)掉合并窗口,點(diǎn)git》合并代碼》中止合并

情況二: 已合并,如果沒提交到遠(yuǎn)程倉庫,這時候可以用reset指令將代碼恢復(fù)到指定版本4,就可以

情況三:已合并,并提交到 遠(yuǎn)程倉庫 的情況下,

通過reset和revert指令,將代碼版本恢復(fù)到對應(yīng)版本4,這時候會生成版本6,再提交版本6到遠(yuǎn)程代碼庫
具體的操作驗(yàn)證

  1. 查看日志,記錄需還原的commit版本號, git log --pretty=oneline
    git log --pretty =oneline
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  2. 撤銷已提交的commit,回滾到測試分支誤合并到開發(fā)分支的commit版本
    git reset --mixed 回滾版本號
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  3. 再次使用git log可以看到當(dāng)前HEAD指向了測試分支誤合并到開發(fā)分支的commit版本
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  4. 這時候我們的代碼區(qū)多了很多未暫存的文件
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  5. 把撤銷的代碼文件暫存起來
    git stash save ‘保存撤銷的代碼’
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  6. 再撤銷當(dāng)前commit并且不保留代碼(因?yàn)檫@里的代碼是從測試分支合并過來的,我們不需要這些代碼)
    git revert HEAD^

注: 這里因?yàn)槭莔erge節(jié)點(diǎn)直接使用git revert HEAD^ 會提示指定主分支,這里用git log -5 指令確定一下哪個是我們要恢復(fù)的主分支即可 ,最終確定主分支是第二個merge節(jié)點(diǎn),所以執(zhí)行g(shù)it revert HEAD^ -m 2
記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案

  1. 把貯存區(qū)的代碼重新應(yīng)用出來
    git stash list
    git stash apply stash@{0}
    記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案
  2. 到這里就已經(jīng)去掉了測試分支的代碼,我們就可以push當(dāng)前代碼到遠(yuǎn)程了

最新方法: 直接執(zhí)行 git revert 合并節(jié)點(diǎn)版本號 -m 主分支編號 即可

#這個案例中為
git revert   版本5 -m 2

這里介紹一下reset 和revert區(qū)別,

reset:是移動本地代碼head指針到版本4 ,再pull拉取時會再把所有版本都拉取下來,再移動head指針到最新的節(jié)點(diǎn),提交代碼也會提示無可用的更新
revert:(git revert 節(jié)點(diǎn)5版本號) 進(jìn)行回滾操作,創(chuàng)建一個新版本節(jié)點(diǎn)N,這個版本N是執(zhí)行了一個與節(jié)點(diǎn)5相反的操作抵消調(diào)版本5中的所有操作,但是會保留節(jié)點(diǎn)5后面所有節(jié)點(diǎn)的操作(比如節(jié)點(diǎn)5后面有6、7、8修改的文件都會保留)。而且節(jié)點(diǎn)N是一個新的提交節(jié)點(diǎn),所以revert后再提交到遠(yuǎn)程是可以提交上去的文章來源地址http://www.zghlxwxcb.cn/news/detail-412866.html

到了這里,關(guān)于記錄一個IDEA中使用GIT的嚴(yán)重BUG,導(dǎo)致測試分支合并到主分支,以及代碼恢復(fù)解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • IntelliJ IDEA 上 使用git 合并其他分支,合并某一個提交

    IntelliJ IDEA 上 使用git 合并其他分支,合并某一個提交

    找到git——merge… 選擇需要合并的分支,不能選和當(dāng)前分支一樣噢 合并,推送即可 點(diǎn)擊左下角git——右鍵切換分支——選擇需要合并的分支——選擇需要合并的代碼——ch 推送即可

    2024年02月04日
    瀏覽(239)
  • Idea 開發(fā)環(huán)境不斷切換git代碼分支導(dǎo)致沖掉別人代碼

    Idea 開發(fā)環(huán)境不斷切換git代碼分支導(dǎo)致沖掉別人代碼

    問題分析 使用git reflog查看執(zhí)行命令,以下是發(fā)生事故的切換和提交動作 由于在feature分支和develop分支之前不停切換,導(dǎo)致服務(wù)器端git倉庫的代碼被刪除了。作為一個Java老鳥,遇到這種情況還是很尷尬的。如下圖紅框部分的代碼是將別人提交的代碼直接改回去了,導(dǎo)致代碼丟

    2024年01月22日
    瀏覽(25)
  • idea將一個分支指定的提交記錄push到另一個分支上

    idea將一個分支指定的提交記錄push到另一個分支上

    ?Idea將一個源分支A指定的提交記錄push到另一個目標(biāo)分支B上 首先,切換目標(biāo)分支B; 然后\\\"git history\\\",選中源分支A,例如圖中master,可以看到你需要check-pick的commit記錄; 使用shift 或 Ctrl選擇多個commit,點(diǎn)擊\\\"check-pick\\\"; 把剛才check-pick的commit,git push到目標(biāo)分支上; 可以解決源

    2024年02月16日
    瀏覽(89)
  • 【git】Idea撤回本地分支、或遠(yuǎn)程分支提交記錄的各種實(shí)際場景操作步驟

    【git】Idea撤回本地分支、或遠(yuǎn)程分支提交記錄的各種實(shí)際場景操作步驟

    實(shí)現(xiàn)效果: 撤回這個未push到遠(yuǎn)程的記錄 操作步驟: 最后一次commit到本地的記錄沒有了, 記錄回到了暫存區(qū) 有撤銷記錄的: 實(shí)現(xiàn)效果: 本質(zhì),就是重新提交對 第二次提交 刪除的操作 撤銷后,本地和遠(yuǎn)程分支上有撤銷記錄 操作步驟: 無撤銷記錄的: 實(shí)現(xiàn)效果: 遠(yuǎn)程最后

    2024年02月10日
    瀏覽(30)
  • git :合并某個分支上某次commit記錄到另外一個分支

    需要將A分支的某次提交記錄 ,合并到B分支 1)切回到 A分支 找到提交的commit id 可以使用git log 命令 或者 右鍵上次提交的記錄 copy reversion number???????? git checkout A git log 2)? 切回到 B分支? 使用 git cherry-pick? A的 commitID ,回車 3)最后git status /git push 如果遇到問題,可以使

    2024年02月16日
    瀏覽(95)
  • git的分支的使用,創(chuàng)建分支,合并分支,刪除分支,合并沖突,分支管理策略,bug分支,強(qiáng)制刪除分支

    git的分支的使用,創(chuàng)建分支,合并分支,刪除分支,合并沖突,分支管理策略,bug分支,強(qiáng)制刪除分支

    查看當(dāng)前本地倉庫中有哪些分支 HEAD所指向的分支就是當(dāng)前正在工作的分支 創(chuàng)建一個分支 創(chuàng)建好了,但是目前還是指向 master 用tree命令也可以看到已經(jīng)創(chuàng)建分支成功了 創(chuàng)建出來的分支,和主分支的最新記錄是一樣的 切換分支就是讓HEAD指向我們的dev分支 我們在dev分支上堆R

    2024年02月04日
    瀏覽(125)
  • idea切換分支忘記commit,導(dǎo)致自己辛苦寫的代碼被覆蓋,找不回來,別慌,這里教你一個好辦法找回你未提交的代碼

    idea切換分支忘記commit,導(dǎo)致自己辛苦寫的代碼被覆蓋,找不回來,別慌,這里教你一個好辦法找回你未提交的代碼

    問題描述:寫了很多個接口,沒有commit,然后拉取了同事的分支,發(fā)現(xiàn)自己寫的代碼全部不見了,被覆蓋了. 解決思路:git沒有commit,那么網(wǎng)上說的那些用git reflog git show git merge git reset --soft commmitld等等那些關(guān)于git的命令其實(shí)都沒有意義的.正確的思路應(yīng)該是從本地編輯軟件的log記錄入手

    2024年02月11日
    瀏覽(32)
  • 測試工程師的最大疑問:項(xiàng)目上線出現(xiàn)嚴(yán)重Bug,到底是誰的責(zé)任?

    測試工程師的最大疑問:項(xiàng)目上線出現(xiàn)嚴(yán)重Bug,到底是誰的責(zé)任?

    各位小伙伴們還記上個月小紅書APP崩潰閃退,導(dǎo)致大批用戶卸載APP重裝的事故嗎?閃退Bug從凌晨持續(xù)到第二天上午。 事發(fā)第二天,就有研發(fā)在線承認(rèn)了,因?yàn)樽约旱氖д`導(dǎo)致了這次事件,評論區(qū)也有人擔(dān)心博主會不會失去工作。 這件事會到此為止嗎?有研發(fā)人員承認(rèn)了錯誤

    2024年02月11日
    瀏覽(24)
  • 使用IDEA從git拉取分支

    使用IDEA從git拉取分支

    填充對應(yīng)的鏈接 三、默認(rèn)下載的是master分支,需要選取不同的分支時,可以在VCS-Git -Pull 選擇具體的分支 過一段時間,等待拉取后的情況

    2024年02月11日
    瀏覽(28)
  • git使用某一個分支完全覆蓋另一個分支

    git使用某一個分支完全覆蓋另一個分支

    比如說使用master分支覆蓋dev分支 比如說使用master分支覆蓋dev分支 比如說使用master分支覆蓋dev分支 如果需要用master分支的代碼覆蓋到dev分支上,只需要如下操作: 1、切換到dev分支 2、設(shè)置本地分支代碼的遠(yuǎn)程為master分支 3、本地代碼已覆蓋,強(qiáng)制推送本地分支到遠(yuǎn)程即可 4、

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包