Git 常用指令

圖片來源: 網路

操作

基礎設定

查詢版本

1
git version

查詢設定細項

1
git config --list

開啟 git 設定檔案

1
code ~/.gitconfig
1
open ~/.gitconfig

輸入姓名

1
git config -global user.name '名字'

輸入信箱

1
git config -global user.email '信箱'

自訂 git 指令名稱 ( 將git status指令簡短改成git st )

1
git config --global alias.st status

本地資料夾新增數據庫

1
git init

增加/刪除檔案

指令示意圖

  • Untracked => 還沒被add過的檔案(新增的檔案)
  • Tracked not staged => 已被add過,但之後又做過編輯、刪除..等,還沒有再次add的檔案
  • Staged wait commit => 最後一次add版本 (存檔的概念,若之後有問題可以直接做git checkout [該檔名],即可把這個存檔紀錄叫回)

實際操作思路

  • 存檔
    就像小時候玩 gameboy 一樣,好不容易遇到了幻獸而且收服了他,你一定不會希望突然沒電或當機,所以機靈如你一定會立馬把這個里程碑儲存起來。 - 那 Git 呢? 很簡單,今天你的程式碼到一個里程碑了,只需要將關鍵的幾個檔案add,基本上就完成了這個紀錄的儲存,之後隨便你怎麼修改,改爛了直接git checkout [該檔名]即可時光倒流回暫存區的版本 - 那想進一步回到上個 commit 點?而不是暫存區的話呢?
    很簡單,查詢你想回去的 commit 點的commit id,然後git checkout [id] [該檔名]
  • 乾淨的 commit 紀錄
    • 盡量別使用git add . + git commit,比如說這次我新增了一個 navbar,共修改了 index.html 和 all.scss, 但過程中也有修改 all.js 和 member.html,但是這個 commit 的名稱我預計是’add navbar’,那就不須把不相干的其他兩隻檔案也加進這個紀錄中,所以我只需git add index.html all.scss然後git commit -m 'add navbar'就好。

已進入儲存庫的 commit 是很難改變的,請謹慎,也盡量避免個資、商業機密等資料被簽入儲存庫。


將所有檔案加入索引

1
git add .

將單一檔案加入索引

1
git add [檔名]

查詢索引狀態

1
git status

將索引提交到本地數據庫

1
git commit -m '說明文字'

查詢歷史 commit 紀錄

1
2
3
git log
git log --oneline -[n] //最近n次的紀錄
git reflog //查看所有訊息版本 (包含刪除的commit紀錄和reset紀錄)

檔案還原


模式名稱 master 的位置 索引 工作目錄
--soft 回到指定點 不變 不變
--mixed 回到指定點 綠變紅 不變
--hard 回到指定點 清空 清空

註: --mixed為預設


往前一個 commit 點 往前數個 commit 點
HEAD^ HEAD^^^^
HEAD~ HEAD~4

註 1: HEAD 可以用 commit id 取代
git reset de2d32

註 2: 若不加上 HEAD 或是 commit id,系統預設為 HEAD
git reset === git reset HEAD


常用指令

1
2
3
4
git reset --hard HEAD^   // HEAD、工作區、索引皆退回前一個commit點
git reset --soft HEAD^ // HEAD退回一個commit,保留索引和工作目錄
git reset HEAD // HEAD、工作目錄不變、取消索引
git reset HEAD [檔名] // 同上,單一檔案

上面語法刪除錯了可以用此語法還原

1
git reset --hard ORIG_HEAD

恢復到 commit 點 ★

1
2
3
git checkout [檔名]                     // 單一檔案回到最新commit點
git checkout [commit id] // 回到該commit點
git checkout [commit id] --[檔案名稱] // 該檔案回到該commit點

覆蓋最後一次 commit

1
2
git add [檔名]                 // 如果要多加檔案才要執行,單純改commit說明可以只執行下一行
git commit --amend -m '訊息' // 送出後會取代最後一個commit紀錄

查看所有 untracked 檔案

1
git clean -n

刪除所有 untracked 檔案

1
git clean -f

移除特定檔案的工作區變更

1
git checkout -- [目標檔案名稱]

新增本地/遠端數據庫


複製遠端數據庫

1
git clone [url]

如要 clone 最近一次的 history,而且也需要其他 branch,使用如下,

1
git clone [url] --depth 1 --no-single-branch

如要 clone 最近一次的 history,而且不需要其他 branch,使用如下,

1
git clone [url] --depth 1 --single-branch

or

1
git clone [url] --depth 1

查詢遠端數據庫數量及名稱

1
git remote

將本地數據庫與遠端數據庫做連結

1
git remote add [遠端數據庫名稱(預設為origin)] [遠端數據庫 url]

可新增多個遠端數據庫

  • 本地的 Git 數據庫可以同時有擁有多個遠端數據庫,常見的情況為一個遠端數據庫作為測試使用,當測試過通後,再推送至正式版的遠端數據庫,請注意,遠端數據庫稱不可重複。
1
git remote add [自定義數據庫名稱(不重複)] [遠端數據庫 url]

將本地數據庫推送到遠端數據庫

1
git push [遠端數據庫名稱(預設為origin)] [遠端數據庫的分支名稱(預設為master)]

設定預設推送的遠端數據庫

  • 假如擁有多個遠端數據庫,輸入此指令後,未來輸入git push,Git 將會自動預設推送至你所設定的遠端數據庫的 master 分支。
1
git push -u [某個已存在的遠端數據庫名稱] master

將遠端分支拉下來與本地分支進行合併

1
git pull

將遠端儲存庫的最新版下載回來,下載的內容包含完整的物件儲存庫(object storage)。
這個命令不包含「合併」分支的動作。此時你的分支會多一個 FETCH_HEAD 的分支,而這個就是遠端數據庫的分支,可以等到你看過沒問題後,再用git merge FETCH_HEAD做合併。

1
git fetch [遠端數據庫名稱] [遠端分支名稱]

重新命名遠端數據庫

1
git remote rename [修改後的名稱]

分支

只要記住使用 branch 其實就是在說:「我想要包含這一次的 commit 以及它的所有 parent 的 commit。」


顯示分支資訊

1
2
git branch     \\本地
git branch -r. \\遠端

新增分支

1
git branch [分支名稱]

切換分支

1
git checkout [分支名稱]

合併指定分支到目前分支

1
git merge [分支名稱]

合併指定分支到目前分支,並且將合併後的結果產生成一個最新的 commit 紀錄。樹狀圖會呈現一個小耳朵的結構,有利於開發者清楚辨識當時曾進行 merge 的動作

1
git merge [分支名稱] --no-ff

刪除分支

1
git branch -D [分支名稱]

刪除遠端分支

加個 : 即可

1
git push origin :[分支名稱]

標籤

使用情境 : 重大版本里程碑紀錄


查詢標籤

1
git tag

刪除標籤

1
git tag -d [標籤名稱]

新增輕量標籤

1
git tag [標籤名稱]

新增標示標籤

1
git tag -am '標註內容' [標籤名稱]

暫存

當你手上工作還沒做完也不想 commit 時就要切換到別的 branch (PM 說有一個 issue 要在 5 分鐘內解決),手中的修改內容也會跟著移動到新 branch 讓人會很困惑,這時可以把手上工作放到暫存裡,有點像先把這些檔案 ctrl + x 剪下來 (git stash),之後再 ctrl + v 貼回你想要的 branch (git stash pop),另外 git stash pop 後暫存即消失
技巧: 若不切回 master 而在 branch b 進行 pop 也可以將資料帶到該 branch


暫時儲存當前目錄

1
git stash

查詢 stash 列表

1
git stash list

還原暫存

1
git stash pop

清除最新暫存

1
git stash drop

清除全部暫存

1
sit stash clear

注意

  • --global 影響整個電腦中的設定,若不輸入則只影響目前資料夾的.git 設定
  • commit id 可以用git log查詢,需要輸入時可以輸入 id 前四碼,git 即可辨認

參考

細說 git reset 和 git checkout 的不同之處
超詳細 Git 圖解
我想要精通 Git
Git 教學系列 - Youtube
git 練習網站