一次git事故的回顧和學習

2021-08-02 02:34:54 字數 1142 閱讀 8739

此次回顧是針對之前在上海開發過程中,呂鵬提交的**被我覆蓋掉的事故。希望通過學習了解事故發生的原因,避免以後在工作中重蹈覆轍。

以下是我自己的理解,可能會有錯誤,大家及時指正。

a) 事件回顧:為了簡便描述,s代表我,l代表呂鵬。

i. l進行了數次提交。

ii. 

s使用pull -merge進行拉取,出現了合併衝突。

iii. 

s在解決合併衝突的過程中,發現l提交的修改出現了自己的待提交區,s以為這些**不需要重複提交,

就對這些修改進行了discard

,然後進行了push。

iv. 

l在使用pull -rebase拉取**以後,發現自己的修改被覆蓋掉了。

b) 原因

分析:

i. git主要有三個區域,工作區,暫存區,本地倉庫。三者的關係就不詳細說了。

ii. 

git merge 和 rebase的區別。merge是git將本地的修改和遠端倉庫的修改做了乙個合併,更新到本地倉庫,是基於本地樹;rebase是先將本地的提交刪除,以遠端倉庫的修改作為基礎,將本地修改作用在上面,是基於遠端樹。

iii. 

git pull 和 git fetch的區別。在本地存在著每乙個分支對應遠端倉庫的指標(以t指代),裡面儲存了最後一次的commit id。這個指標可以理解為遠端倉庫的映象。本地倉庫(l)和遠端倉庫(r)在技術實現上是沒有交集的,兩者是通過t這個橋梁實現的。

雖然從結果上看,git pull = git fetch + git merge,實際上,git pull會將本地庫l更新至遠端庫r的最新狀態,而l中的commit id並沒有發生變化。

iv. 

在s使用了預設的pull merge以後,由於合併衝突,實際上合併中斷了,此時工作區和本地倉庫的樹是存在差異的。s將l提交的修改在本地discard以後,push到t的樹就忽略了這些修改,在push到遠端倉庫r中時,git就認為這些類是被刪掉了,因此之前的修改就被覆蓋掉了。

c) 通過這次回顧和學習,大致了解了git的內部工作原理。建議以後的工作,盡量使用git bash進行操作,先執行git fetch檢視有哪些修改,再執行git rebase。如果使用smartgit的話,將git pull的模式改為 預設 rebase

。避免同樣的事故再次發生。

記錄一次事故 idea,sbt,scala

沒事千萬不要點idea的update啊,就算它自己彈出來的也不要管哦。我們自己的ide在使用過程中總會有各種settting的配置,更新之後這些都沒有了,而且自己本地安裝的外掛程式也就都沒有了,所以更新一定要謹慎。這裡記錄下這次更新,並把更新之後對sbt的配置更改做一次記錄,下次再出現問題就不用去網...

一次刪庫事故總結

在原來的資料庫設計中並沒有進行外來鍵的設計,缺少資料完整性約束。在此專案中,事先沒有進行全量備份,沒有開啟binlog無法恢復原先的資料。萬幸,被覆蓋的表只是一張關係表,關聯了teacher表和course表,而不是儲存著元資料的表。通過select查詢相關表的資料,並且由於在磁碟的路徑能夠體現出記...

一次生產事故的優化經歷

跟蹤web伺服器業務日誌,發現在資料庫更新層報請求不到新的資料庫連線或者資料庫連線已經用完,認為是資料庫的最大連線數太小,於是調整mysql資料庫最大連線數為以往的3倍 下次搶標的時候繼續觀察業務日誌,發現已經不報資料庫鏈結的相關錯誤了,但還是很多使用者反饋搶標時候打不開頁面。在搶標過程中繼續觀察,...