記錄一個壞習慣 XD 我這處女座的個性,大概每隔一陣子就會對專案的 commit 的歷史紀錄感到不順眼,想要對它大刀闊斧地診整頓一番。
如果只有整理 local 端的 commit 倒是簡單,只要用git-rebase
就好,但是如果 commit 已經上遠端了的呢?
只能來硬的了 XDDD
強制更新遠端分支
其實只要一條指令就可以將git-rebase
後的 commit 給送上遠端。
1 |
|
危險的 force 指令(圖片來源: Engineering Tomorrow’s Systems)
使用前請注意!-f
是個非常危險的指令,它可以無視一切先來後到的規則,讓你的 commit,直接取代線上所有內容。不是讓團隊進度付之一炬,不然就是像這些 Jenkins 的開發人員一樣不小心強制更新了 150 多個 github repos。真的做了你應該會被組員拖去套麻布袋 XD
2. 務必確認送出的內容與遠端分支。
3. 務必頭腦清晰確認自己在做啥,不清晰,回去睡飽再回來。
做完才想到一件事。我是一個人開發沒錯,但我在兩台機器上都有程式碼,所以另一台的 repo 怎麼辦?
強制覆蓋本地的分支
在開始抓程式碼覆蓋前,請先確認沒有要保存的程式或 commit,一旦執行了這些都會不見的!
git pull
對相應git push
,pull
當然也有相對應的強制指令:
1 |
|
不過一開始我並沒下完整分支,所以一直跳出 merge 的訊息。所以我回頭看了文件,發現它寫到:
-f, –force
When git fetch is used with <rbranch>:<lbranch> refspec, it refuses to update the local branch <lbranch> unless the remote branch <rbranch> it fetches is a descendant of <lbranch>. This option overrides that check.
似乎是需要完全指定分支才行。
git reset
如過上面一招不行還有另外一招組合技,先取回遠端數據庫的最新歷史紀錄
1 |
|
然後放棄目前所有檔案與 commit,還原成遠端版本
1 |
|
最後重新拉回來
1 |
|
參考資料
- 高見龍 (2017)。【狀況題】聽說 git push -f 這個指令很可怕,什麼情況可以用它呢? 。檢自 為你自己學 Git (2020-02-07)。
- Toh Weiqing (2016-12-01)。A gentler force push on git: Force-with-lease。檢自 Engineering Tomorrow’s Systems (2020-02-07)。
- 10km (2018-11-30)。git:pull –force 強制覆蓋本地的分支 。檢自 10km的专栏-CSDN博客 (2020-02-07)。
- Mike (2019-11-04)。[Git] Git 自學筆記 : 單一檔案(checkout) ,退版(reset) ,重拉(pull), 強推(push)。檢自 Mike’s開發瘋 - 點部落 (2020-02-07)。