基本操作

建立 Git (init)

# 建立一個新的資料夾,名稱為 GitExample
mkdir GitExample

# 移動到指定的路徑
# 路徑可以用拖拉的方式貼上
# 也可以打個 git 之後按下 tab 讓系統自動補完
cd 路徑

# 初始化一個空的 Git 版本庫
git init

新增紀錄點 (版本)

修改檔案

# 如果在 MacOS 不會新增文件,可以下指令
#
# "" 裡面包含要寫入檔案的內容
# > 標準化輸出
# 把字串寫入 file1.txt ,不存在時會自動建立
echo "" > file1.txt

查看狀態 (status)

# 會看到 On branch name (目前在哪個分支)
# 分支預設會是 main or master (以前預設是 master,現在通常是 main)
git status

更改狀態 (add / mv / rm / restore)

# 把 file1.txt 添加到暫存區
git add file1.txt

# 把所有變更添加到暫存區
# . 代表的是現在目錄位置
git add .

# 把檔案重新命名 or 調整位置
# file1.txt 更名成 file2.txt
git mv file1.txt file2.txt

# 把 file1.txt 從紀錄中移除
# 會進入暫存區,讓你添加一個刪除他的紀錄
git rm --cached file1.txt

# 把 file1.txt 移到未暫存區
git restore --staged file1.txt

提交變更 (commit)

# 建立一個紀錄點 (版本)
# -m 讓我們能為提交了什麼做說明
git commit -m "docs: added file1.txt"

忽略檔案 (ignore)

查看紀錄 (log)

# 顯示目前分支的詳細提交紀錄,查看完按 q 離開
# 例如: 
#
# commit 59cef07c6cbc7cfa7d270f4363873ee79457d1b1
# Author: BR <snkp002@gmail.com>
# Date:   Fri Dec 20 15:16:30 2024 +0800
# 
#     docs: 添加了 file1.txt
git log

# 顯示一行的簡單紀錄
# 例如:
#
# 59cef07 docs: 添加了 file1.txt
git log --oneline

暫存紀錄

添加 (stash)

# 將所有變更建立一個儲物櫃
git stash

# 將所有變更建立一個儲物櫃,且自訂訊息
git stash -m "message"

查看 (stash list)

# 列出所有儲物櫃,按 q 退出
git stash list

# 查看特定儲物櫃的變更內容
git stash show stash@{0}

# 查看特定儲物櫃更詳細的變更內容
git stash show stash@{0} --patch

讀取 (stash apply /stash pop)

# 套用最新的儲物櫃 (stash@{0})
git stash apply

# 套用特定的儲物櫃
git stash apply stash@{n}

# 套用最新的儲物櫃 (套用後刪除)
git stash pop

# 套用特定的儲物櫃 (套用後刪除)
git stash pop stash@{n}

刪除 (stash drop)

# 刪除最新的儲物櫃 (stash@{0})
git stash drop

# 刪除特定的儲物櫃
git stash drop stash@{n

讀取紀錄點

切換版本 (checkout)

# 還原到 59cef07 這個版本
# 59cef07 是提交版本的哈希值 (可以是完整或前幾位)
git checkout 59cef07

# 只有將 file1.txt 還原到 59cef07 版本
git checkout 59cef07 -- file1.txt

# 切換分支到 main 的最新提交
git checkout main

# 切換到標籤 v1.0.0
git checkout v1.0.0

修正紀錄點

修正 (amend)

# 將最後的提交說明替換掉
git commit --amend -m "新的提交訊息"

恢復版本 (revert)

# 會依據當次提交的內容,自動產生逆操作來還原
git revert 59cef07

重設提交 (reset)

# 僅切換版本,但保留暫存區與檔案變更
git reset --soft HEAD~1

# 僅切換版本,並將變更移到未暫存區
git reset --mixed HEAD~1

# 切換版本,並且完全捨棄變更
git reset --hard HEAD~1

重新修改 (rebase)

# 從最新的提交,一直修改到指定的提交
# 會用到 vim 編輯器
# 按一下 i 進入編輯模式,去修改文字檔
# esc 能退出編輯模式
# shift+: 能輸入操作指令
# wq 儲存後退出,q! 不儲存直接退出
git rebase -i 59cef07

# 將目前分支的所有提交,接枝到 dev/br 分支
# 有人會用這方法接回 main,但回到 main 建議用 marge
# marge 會留下一個合併的紀錄,代表一個項目的結束
git rebase dev/br

複製紀錄點

採櫻桃 (cheey-pick)

# 複製特定提交到當前分支
git cherry-pick 59cef07

# 複製一個範圍的提交,由舊的到新的
git cherry-pick 59cef07^..1fe252e

分支

建立分支 (branch)

# 建立一個名為 dev 的分支
git branch dev

# 從指定提交建立新的分支
git branch dev 59cef07

# 建立一個名為 dev 的分支,並且切換到該分支
git branch -b dev

# 查看所有分支
# 有 * 的代表當前分支
git branch

合併分支 (merge)

# 合併 dev 到當前的分支
git merge dev

索引