1. 程式人生 > >git 進階

git 進階

markdown blog 命令 pos 比較 隱藏 倉庫 ron copy

由一個個case組成:

case 1

場景

在前一家公司的時候遇到過一次,沒有完美解決,今天又重現了:我將部分代碼從倉庫A拆出來,放到新倉庫B中,因為圖方便,我直接使用了copy命令,但是!!!沒有想起來隱藏的.git目錄,於是新倉庫B的初次提交直接更新到了A上。

解決辦法

上一次遇到類似的問題,我是直接一個reset --hard 到錯誤 commit 的前一個 commit,但是自此之後,惡夢開始:因為我們組同學較多,多數從主分支切的代碼已經是被汙染過的,於是經常帶著錯誤的commit回歸!!!
我左思右想,無法找到合適的辦法,好在此次開發的同學不多——並且各自切出去的分支都是沒有被汙染的,我手動reset了所有被汙染的分支,再讓同學們將已經提交的在汙染之後的功能手動合並到主分支上。左右算是解決了。

這種錯誤的commit沒有及時發現,發現時已經在後面提交了許多正常commit的情況應該不算少見,如何在發現之後方便地解決問題?我目前想到的就是使用git rebase的提交規範,保證大家的commit都是連續的,這樣在解決此類錯誤的相對來說還是比較方便的。

case 2

場景

本地 reset 過猛,跑過頭了,像以前我可能直接就把本地的倉庫直接刪了,再下載一個,今天忽然覺得太low了。於是我搜了下,發現一個很好玩的命令,git reflog

git reflog

git reflog 記錄了本地git上的所有操作,並且有對應的索引,可以直接使用git reset 索引的方式,回歸到對應的操作。

140c8eb HEAD@{0}: reset: moving to 140c8ebcf6d

使用 140c8eb 和 Head@{0}都可以回歸。

git 進階