Git 學習筆記
位於索引中的檔案 : Tracked files(追蹤的檔案) 不再索引內的檔案 : Untracked files(未被追蹤的檔案)
- working tree 是工作目錄
- 只要 被索引中的檔案內容 跟 工作目錄中的檔案內容一致 就會被稱為一個 “Stage“狀態
- 只要 被索引中的檔案內容 跟 工作目錄中的檔案內容不一致 就會被稱為一個 “Unstage“狀態
Git 指令
Command: git
-m
= messageinit
= 建立add
= 加入 GIT 索引rm
= 刪除status
= 看目前狀態
git diff
顯示差異
-
HEAD
= 比對變更與目前最新版的變更差異 -
-cached
= 索引裡的變更與本地儲存庫最新的變更差異 -
--binary
= 比對二進位檔案差異 -
--name-only
= 比對工作目錄檔案,列出檔案名稱 -
--name-status
= 列出工作目錄及索引之間有多少檔案是被異動的git diff 'src-commit' 'tgt-commit'
commit 與 commit 比較差異git diff 'commit'
與目標 commit 差異
git reset
重置索引
-p
= 選取索引中的那些變更有哪些內容要從索引中移除HEAD
= 重置索引及分支(加 ~1 是恢復前一版本,以此類推)--mixed
= 重置 HEAD 及索引(預設值)--hard
= 重置 HEAD,索引及工作目錄--hard ORIG_HEAD
= 回復前版本(永遠回復 reset 之前的版本)
git revert
還原歷史上的版本,做相反的 commit
-h
= help 列出功能--abort
= 取消--continue
= 繼續--quit
= 停止
git clone
下載遠端儲存庫
git clone --no-checkout 'URL' 'Filename'
會以 filename 為主並且不做 checkoutgit clone --bare 'url'
把儲存庫的本身下載下來
git log
看紀錄
-
--oneline
= 短的 log 版本 -
--oneline --graph
= log 版本+線圖可加 “-數字” 以顯示筆數git log --oneline --graph --all -10
全部的歷史資料取 10 筆
git reflog
會記錄工作目錄底下做過的每一次的版控紀錄
git checkout
取出/取回
-
-- 'name'
= 從索引裡面把 name 檔案的內容整個複製回工作目錄 -
--orphan
= 建立全新分支且沒有 parentscheckout -b "Filename"
可以新增分支後切換
git switch
切換分支
git clean
清除工作目錄
-f
= 強制刪除-d
= 刪除整個工作目錄-x
= 執行清除任務,並忽略.gitignore 設定-n
= 看那些檔案會被清除
git stash
暫存工作目錄的變更
save 'message'
= 暫存pop
= 取回暫存
git branch
查看分支/新增分支
-
-d
= 刪除分支(只能刪除已經合併的分支) -
-D
= 強制刪除分支 -
-r
= 列出所有遠端追蹤分支 -
-a
= 列出所有遠端+本地分支git branch --merged
列出所有已合併過的分支git branch --no-merged
列出所有未合併過的分支git branch --merged | egrep -v "(^\*|master|develop)" | xargs git branch -d
刪除所有已合併過的分支(CMD/Powershell 不可用)
git merge
合併分支
-
--ff
= 快轉合併(預設) -
--no-ff
= 非快轉合併 -
--ff-only
= 僅有快轉合併 -
--no-commit
= 不提交的合併 -
--abort
= 放棄合併 -
--squash
= 壓縮後合併(不可以與關閉快轉機制一起使用,且不會有合併線圖出現)git merge --no-ff --no-commit 'branchName'
合併可以不 commit
git rebase 'commit_id'
重訂基底合併
-i
--continue
= 繼續--skip
= 跳過--abort
= 取消
git cherry-pick
正向挑選合併
--continue
= 繼續--quit
= 停止--abort
= 取消
git push
推送至遠端
-
--all
= 全部分支推送git push -u origin master
將本地分支(master)與遠端分支(origin)建立連結git push origin --delete
‘branchName’ 刪除遠端分支(要先把本地刪除)
git fetch
將遠端儲存庫的變更下載回來
--prune
將遠端已刪除的分支剪除
git pull
將遠端儲存庫拉下來
pull
=git fetch
+git merge
git pull --rebase
=git fetch
+git rebase
git remote
遠端
-
-v
= 列出網址 -
-h
= remote 的 help -
set-url
= 更改網址git remote set-url origin 'new url'
將舊網址改成新網址
git commit
建立版本
git apply
套用版本(進版)
--check
= 確認檔案--reverse
= 退版(簡寫-R)
git config
GIT 的設定
加上
--global
可以設定
-
core.quotepath
= 改 false 可顯示中文 -
core.editor
= 查看目前編輯器git 只能顯示 ASCII 的字元
-
git bash 以外的環境要改中文
set LC_ALL=C.UTF-8
- 更改環境變數 (永久儲存)
setx LC_ALL C.UTF-8
- MAC/Linux
export LC_ALL=C.UTF-8
- 更改環境變數 (永久儲存)
衝突問題
顯示訊息:
-
content = 內容衝突
建議用手動合併