初學 Git 筆記

※本文純屬作者自己個人初學 Git 的小小筆記,內容用語不全然精準正確,請謹慎參考。

創建 Git 程式儲存庫

顯示 Git 版本。

# Git Bash
git --version

設定使用者顯示名稱與email。

# Git Bash

#設定使用者的顯示名稱
git config --global user.name "My Name Here"
#顯示使用者的顯示名稱
git config user.name

#設定使用者的顯示email
git config --global user.email my@email.com
#顯示使用者的顯示email
git config user.name

開啟檔案位置的視窗版檔案管理程式。

#Git Bash

# Mac 的方式:  open  資料夾位置
open .

# Windows 的方式:  start  資料夾位置
start .

一個 Git 的 GUI Client: https://www.gitkraken.com/

創建一個空的 git 的儲存庫(Repository)或是重新初始化既有的 git 儲存庫,執行 git init 之後,將會創建一個 .git 的子資料夾,此資料夾用來儲存 git 於此專案的相關紀錄,即儲存庫。不要在已經執行過 git init 有儲存庫的專案子資料夾下面,再執行其他的 git init 指令,這樣只會創建沒有必要的多於儲存庫而已。刪除 .git 的子資料夾,就會刪除該專案下的 git 儲存庫了。

#Git Bash
git init

#顯示目前的 git 儲存庫狀態
git status

編輯完檔案後,提交到追蹤區,然後進行提交到儲存庫。

#Git Bash
git add file1 file2 file3
git commit -m "備註說明"

#也可以一次提交迄今的所有變更。
git add .
git commit -m "備註說明"

#上兩行可以合併為
git commit -a -m "備註說明"

如果 git commit 沒有加上參數 -m 的備註說明,則會另外跳出編輯器,可以編寫多行說明。

git log 可以顯示儲存庫的變更明細。

#Git Bash 
git log

#或是精簡版
git log --online

git commit --amend 可以修改上一次提交到儲存庫的訊息或是新增更多提交檔案到上一次提交的紀錄。

#Git Bash
git commit --amend

不想被 Git 追蹤的檔案清單可以寫在 .gitignore 檔案內,逐行條列的寫法可以是1. 完整的檔案名稱 2. 資料夾,例如 subFolder/, 3. 透過萬用字元描述的檔案,例如 *.log


創建分支

使用 branch 指令可以在目前 HEAD 所指的位置創建新的分支。

#Git Bash
#查詢所有分支
git branch

#創建目前 Head 所指位置的新分支(但不會自動切換 Head 所指的分支位置)
git branch 新分支名稱

#切換不同分支有以下兩種方法(switch 或 checkout)
git switch 要跳過去的分支名稱
git checkout 要跳過去的分支名稱

#############################################

#創建新分支,並且一併切換 Head 到新分支上。(使用switch)
git switch -c 新分支的名稱

#創建新分支,並且一併切換 Head 到新分支上。(使用checkout)
git checkout -b 新分支的名稱

更改分支的名稱。

#Git Bash
#切換到要更改的分支上面,然後使用 -m (或是 --move)
git switch 舊的分支
git branch -m 要更改的新分支名稱

刪除分支。

#Git Bash
#切換到要更刪除的分支"以外"的其他分支,然後使用 -d,或是 -D (強制刪除)。
git switch 其他的分支
git branch -D 要刪除的分支

合併分支

透過 git merge 可以合併分支,先切換到要加入其他分支資料的分支中(分支A),再把分支B的資料併入分支A。

#Git Bash
git switch 分支A
git merge 分支B

比較內容差異

可以使用 git diff 比較內容差異。

#Git Bash
#比較追蹤區與目前工作區的內容修改差異
git diff [fileName]

#比較 HEAD 與"追蹤區、目前工作區"的差異
git diff HEAD [fileName]

#比較 HEAD 與 追蹤區的差異
git diff --staged [fileName]
#或是
git diff --cached [fileName]

#比較上次存入程式庫的 HEAD 內容與這次 HEAD 內容的差異
git diff HEAD~1
或是
git diff HEAD~1 HEAD

#比較兩分支的差異
git diff branch1 branch2
git diff branch1..branch2

#比較兩分支在特定檔案(fileName)的差異
git diff branch1..branch2 fileName


#比較兩次提交的差異
git diff commit_hash1..commit_hash2

暫時隱藏未提交的內容

暫時隱藏尚未提交到程式庫的暫存區與工作區內容,以方便切換到不同的分支,避免將未提交的內容帶至其他分支,或因為內容衝突而無法切換分支。

#Git Bash
#以下隱藏追蹤已修改未提交的內容到隱藏區
git stash
#或是
git stash save

#由隱藏區取出原先隱藏的內容(若有多次項目,越新的會越先取出。)
git stash pop

#套用隱藏區原先隱藏的內容,但隱藏區的內容不刪除,方便之後可以再次套用到其他的分支。
git stash apply


#把已修改尚未提交的內容,含未追蹤的檔案,都新增放入隱藏區。
git stash -u
或是
git stash --include-untracked

#把已修改尚未提交的內容,不含未追蹤的檔案,放入隱藏區。
git stash --no-include-untracked

#列出隱藏區的多次隱藏內容
git stash list
#顯示結果如下:
# stash@{0} : ......
# stash@{1} : ......
# stash@{2} : ......
# stash@{3} : ......
# 數字越小的,表示是最近期才存到隱藏區的項目,數字越大的是越舊的項目,用 pop 取出時,越新的項目會先取出,越舊的項目會越晚取出。



#(承 list)套用隱藏區的特定隱藏內容
git stash apply stash@{1}

#(承 list)刪除隱藏區的特定隱藏內容
git stash drop stash@{1}

#刪除全部的隱藏區的隱藏內容
git stash clear


分離 HEAD

可以透過 git checkout 指令搭配提交程式庫的 Hash 代碼,來分離 HEAD ,以達到時光旅行回到程式庫中的過去某個提交點。而後再進行新的分支。

#Git Bash
#將 HAED 跳至本分支的上HAED的前一個提交點的位置。
git checkout HEAD~1

#將 HAED 跳至本分支的上HAED的前兩個提交點的位置。
git checkout HEAD~2

#將 HAED 跳至本分支的上HAED的前三個點提交點的位置。
git checkout HEAD~3

#將 HAED 跳至某個提交點(需提該次提交點的 Hash 代碼 )。
git checkout commit_hash_code

當在 HAED 分離模式時,跳回某分支的最新一個提交點的位置。

#Git Bash
git switch -

把目前最後一個提交點的某檔案叫回,以取代目前尚未提交的某檔案內容。

#Git Bash
git chechout HEAD fileName
#或是
git chechout -- fileName

#或是
git restore fileName

#把檔案恢復回到更早的某個提交點的版本(叫出某個提交點的檔案版本)
git restore --source=commit_hash fileName

#把檔案退出準備提交區,變成尚未被追蹤的狀態。
git restore --staged fileName

git restore commit_hash_code 可以跳回之前的提交點,並刪除之後的提交點,但目前已變更的部分,會變成尚未提交的狀態(目前工作區不會被修正回過去)。

git restore --hard commit_hash_code 可以跳回之前的提交點,並刪除之後的提交點,但目前在工作區的尚未提交的部分也將會消失不見。

git revert commit_hash_code 可以讓逆轉到之前的某個提交點,中間被逆轉的提交點沒有被刪除,仍然保留,逆轉後的提交點會變成更新的提交點。(commit1 -> commit2 -> commit3,逆轉到2之後,會變成 commit1 -> commit2 -> commit3 ->same_as_commit_2 )


從遠端複製程式資料庫

從遠端複製一份完整的程式資料庫,包含歷來的修改提交紀錄。

#Git Bash
#記得先用 git status 確認目前沒有在任何的 git 的程式資料庫的資料夾內。然後再用下面的指令。

git clone https://some.url

使用 SSH 連接到 GitHub。

請見: Connecting to GitHub with SSH



留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *