NUK JavaScript Lesson 06:Git、GitHub、還原技巧

這次要介紹 Git 基礎指令、Github,與 Git 的還原技巧。
原本想要再提到兩個認識不久的新同學 SourceTree 與 Bitbucket,但由於篇幅過長的問題,決定擺到下一篇再講。
話說,我其實最近才發現 GitHub 的正確寫法是 GitHub 不是 Github,我以前都寫 Github。

Git

Git 初始設定、Linux 指令、Git 常用指令

Git 初始設定

  • 查詢 Git 版本:git --version
  • 輸入姓名:git config --global user.name "Sealman"
  • 輸入個人的 email:git config --global user.email "sealman234@gmail.com"
  • 查詢 git 設定內容:git config --list

Linux 指令

  • 切換目錄:cd 資料夾位置
  • 取得目前所在位置:pwd
  • 建立新的資料夾:mkdir 資料夾名稱
  • 列出目前的檔案列表:ls

Git 基礎指令

  • 下載遠端數據庫:git clone 數據庫網址
  • 註冊/綁定遠端數據庫:$ git remote add origin 數據庫網址
  • 建立初始化數據庫:git init
  • 建立檔案:touch 檔案名稱
  • 將所有檔案加入索引:git add .
  • 查詢當前狀態:git status
  • 將索引檔案 commit 到本地數據庫,變成一個更新:git commit -m '修改內容'
  • 查詢 commit 歷史紀錄:git log
  • 更新至遠端數據庫:git push origin master

遠端數據庫名稱預設會使用 origin 這個名稱
可以更改,例如 git push -u github master

Git 縮寫

Git 的指令可以透過 alias 設定縮寫
這樣子我們就不需要輸入一長串的完整指令啦,可以加快我們使用 Git 的速度!

設定方式:

1
2
3
4
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.st status
$ git config --global alias.ci commit

GitHub

將檔案 Push 上傳到 GitHub

  1. 在 GitHub 上開新專案
  2. 如果是新專案:可以用 clone 下載這個新專案到一個本地端的空資料夾,並完成與遠端數據庫的綁定。
  3. 如果是新專案,或者本地端已經有進度:可以用 remote 綁定遠端數據庫,然後 push 上 GitHub
    例如:$ git remote add origin git@github.com:sealman234/practice-git.git

要選擇「HTTPS」還是「SSH」就看個人喜好,如果選擇 SSH 的話需要設定 SSH Key

將檔案 Pull 下來更新

  • 下載遠端數據庫:git pull

Pull 指令就是到線上數據庫抓東西下來(Fetch),並且更新本地端的進度(Merge)。

git pull = git fetch + git merge
(Pull 等於 Fetch 加上 Merge)

熱門遠端數據庫比較

  • Github:可以架設 GitHub Pages

    GitHub 被 Microsoft 以 75 億美元收購後,免費帳號也可以開私人專案了!

  • Bitbucket:可以開私人數據庫,免費方案為五人以下的團隊
  • GitLab:一樣可以開 Private 專案,還可以自己架設 Gitlab 在自己的主機上面

還原技巧說明

Clean:清除我不要的垃圾

新增檔案時,檔案還沒加入追蹤時,清空工作目錄

Q:什麼是「檔案還沒加入追蹤」?
A:就是新增/修改的檔案,還沒進到 git 的追蹤範圍內(暫存區),也就是還沒透過 git add 加入索引。

刪除還沒加入索引的檔案:

  • 顯示此次清除的檔案:git clean -n

    只是告訴你哪些檔案會被刪除,還不會真正刪除檔案,只是一個提醒而已

  • 強制清除檔案:git clean -f

    刪除沒有 tracked 過的檔案
    但是不會刪除 .gitignore 裡面指定的檔案,不管那些檔案有沒有被 tracked 過

Checkout:回頭看一下舊版本

回頭觀看舊版本內容

更精準的來說,這個指令會把暫存區(Staging Area)裡的內容或檔案,拿來覆蓋工作目錄(Working Directory)的內容或檔案。

沒特別指定版本的話,它會把檔案/目錄回復到上一次 Commit 的狀態。

1
2
還原工作目錄上已更改的檔案
git checkout -- <filename>

有時候也會用在程式碼被寫爛了,想要重寫的情況
可以放棄前次 commit 之後所有的變更

Reset:拆掉 Commit

還原至前面的版本

剛才的 Commit 後悔了,想要「拆」掉重做
例如:幫我「拆掉」最後 N 次的 Commit

1
2
加入索引的檔案還原到工作目錄
git reset HEAD <filename>

Q:那拆掉的檔案去哪了?
A:這個問題要看以下三種 Reset 模式而定。

hard 模式

git reset --hard 版本

回到指定 commit 之後的狀態,但是該版本後面的修改全都會消失
(commit、add、修改內容通通都沒有了)

Commit 拆出來的檔案:直接丟掉
(即工作目錄以及暫存區的檔案都會丟掉)

mixed 模式(預設)

git reset --mixed 版本

回到指定 commit 後 add 前的狀態,修改內容還在
(不管後面 commit 幾次,修改內容全都還在,但是還沒 add 與 commit)

Commit 拆出來的檔案:丟回工作目錄

soft 模式

git reset --soft 版本

回到指定 commit 後,修改內容也還在
(不管後面 commit 幾次,修改內容全都還在,而且是已經 add 的狀態,只是還沒有 commit)

Commit 拆出來的檔案:丟回暫存區

還原指令整理

checkout

  • 回頭觀看版本內容:git checkout 版本編號
  • 返回最新的版本:git checkout master(分支名稱)
  • 還原工作目錄上已更改的檔案 :git checkout -- <filename>

reset

  • 將加入索引的檔案,還原到工作目錄:git reset HEAD
  • 還原前兩個版本:git reset HEAD^^
  • 還原前兩個版本,且所有更新檔案都放棄:git reset HEAD^^ --hard
  • 觀看詳細歷史紀錄:git reflog

說明:git reset HEAD 會將檔案還原至上一個 commit 後的版本,而且修改的內容都還在,只是還沒 add 上去
因此,我們才會說 git reset HEAD 是把檔案從暫存區取消 add 動作

以上資源是我自己整理過後的筆記,若有錯誤歡迎隨時和我聯繫。