GIT 遺失 commit 後的恢復方法

Git 可透過 resetrevert 來恢復前一個版本,在 commit 沒有 push 之前的話我通常都會使用 reset 來進行,而這次因為操作不熟悉而造成還沒 push 的 commit 遺失了,這時候要怎麼恢復?

Git 會把所有的操作紀錄都保留下來

Git 所有的操作都是在原先的紀錄上做修改,而且所有的紀錄都會留存下來。換句話說,你不管進行任何一種操作,Git 都有辦法讓你進行回滾。

執行 git reflog 即可看到所有操作紀錄

git reflog
9688fed HEAD@{0}: reset: moving to 9688fed
9688fed HEAD@{1}: reset: moving to HEAD
9688fed HEAD@{2}: reset: moving to HEAD^1
912851c (origin/develop, develop) HEAD@{3}: reset: moving to HEAD^1

※你可以加上參數 --stat 顯示異動的檔案。可支援的參數很多,如果想要獲得其他資訊,可以讀一下官方文件。

恢復被刪除的 commit

使用 git reset --hard <commit-id|HEAD> 可以將分支重設為指定的 commit 或是 HEAD(預設為最近一次的 commit)

注意:如果當下有未儲存的異動要先處理掉,不然會消失。(建議先用 git stash 先暫存起來)

git reflog 找到你想恢復的 commit id 後,執行下列指令即可恢復:

git reset --hard 551c724
HEAD is now at 551c724 tmp

Reference: 找回Git中丢失的Commit – 简书

發表留言

[Git] 將檔案加到上一次的 commit

使用 git 的開發者大部分都知道如果要修正上一次的 commit message 只要執行 git commit --amend 就可以了,但是如果是不小心漏掉某些需要一併 commit 的檔案,也可以透過 git commit --amend 將檔案補進去。

git add file-1 file-2
git commit --amend -m 'New commit message'

 
如果不修改 commit message,可以增加 --no-edit 參數:

git commit --amend --no-edit

Reference: 学会这两件事,让你成为 Git 老司机 – 文章 – 伯乐在线

發表留言

[Git] Unable to find remote helper for ‘https’

當使用 git 以 HTTPS 連線 clone repository 時出現 …

Unable to find remote helper for ‘https’

 

可能是在安裝 git 時因為缺少 libcurl 套件所導致

但是環境沒有 libcurl 時一樣可以安裝,只是會不能走 HTTPS 通道而已

 

若要修復這個問題,只需安裝 libcurl 後重新編譯安裝 git 就好:

# 系統為Ubuntu/Debain時,執行以下指令
apt-get install -y libcurl4-openssl-dev 

# 系統為CentOS/RedHat/Fedora時,執行以下指令
yum install -y libcurl-devel.x86_64

# 回到 git 原始碼目錄重新編譯並安裝 git
cd ~/git-2.8.16
./configure
make
make install

Reference: linux – “Unable to find remote helper for ‘https'” during git clone – Stack Overflow

發表留言

[Git] 環境初始設定

 

Git 安裝完之後調整一些小設定協助日常工作

直接在shell內執行即可

# 設定user name與email,以後下commit時Author information會套用這裡的設定值
git config --global user.name "Calos"
git config --global user.email "username@email.com"
# 讓git在顯示這四種指令的output時顯示顏色
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.log auto

Reference: Git 基礎設定 (帳號的環境參數設定) – Tsung’s Blog

發表留言

[Git] 設定editor

有時候單 commit 修改幅度不小,或是需要做長一點的說明時,直接在 command line 打會有點不舒服

個人會習慣叫出 editor 來編輯

git commit -e

今天在新環境時剛好需要用到 commit -e,指令下去之後噴了兩行 error

[Calos.Calos-PC] git commit -e
error: cannot run vi: No such file or directory
error: There was a problem with the editor 'vi'.

core.editor 沒設定,在使用到需要利用 editor 進行的指令時就會出現這種錯誤

core.editor 設為 vim

git config --global core.editor vim

搞定

1 則迴響