From: 011netservice@gmail.com Date: 2024-09-29 Subject: git, github 備忘 File: https://github.com/github-honda/GitPratice/blob/main/readme-GitHub.txt CodeHelper\GitHub\readme-GitHub.txt 歡迎來信交流, 訂購軟體需求. 以指令操作 git, 較能了解 git 的運作細節. Resources: https://github.com/ https://backlog.com/git-tutorial/tw/ 繁體中文(入門、進階、命令參考) https://git-scm.com/docs https://git-scm.com/download/gui/windows 推薦工具清單 https://sourcetreeapp.com/ 網路上最常使用的工具. https://git-scm.com/ 本文使用這個工具 git-gui, 包含指令模式 git bash 工具 and Open source. 版本更新指令: winget install --id Git.Git -e --source winget, 更新 git-gui, git bash 工具 $ git --version git version 2.39.0.windows.1, 2022-12-14 git version 2.36.0.windows.1 啟動執行方式: 檔案總管選擇目錄後, 按滑鼠右鍵, 選擇 Git Bash Here 或 Git GUI here. git 檔案的三種狀態: Modified: 已修改. 檔案已修改. Staged: 已暫存. 檔案標記為已暫存修改, 可準備 commit 提交. Committed: 已提交. 檔案已存入本地資料庫. git 三個區域: Working Directory: 工作目錄. 在檔案系統中的工作目錄. Staging Area(Index Area): 暫存區 或 索引區. 儲存(可準備 commit 提交)的資訊. Repository: 儲存檔案變更的資料庫. HEAD 代表指向(目前的分支)的(commit 指標). 以下 #### 標記段落, **** 標記常用(流程、設定、備忘) #### 2023-01-24 git command reference: *代表 常用 CLI (Command-Line Interface) 指令下載及使用方式, 可參考 https://cli.github.com/ $ git | git usage help. *$ git --version | 檢視 git 版本 *$ git add | 將檔案加入(暫存區)管理. Add file contents to the index $ git add -A | 同 git add --all *$ git add --all | 將檔案及路徑加入(暫存區)管理. Update the index not only where the working tree has a file matching but also where the index already has an entry. This adds, modifies, and removes index entries to match the working tree. $ git add --no-ignore-removal | 同 git add --all *$ git add | 將加入(暫存區)管理. *$ git add *.html | 將所有的.html檔案加入(暫存區)管理. *$ git add . | 將資料夾中所有檔案加入(暫存區)管理. 不包含空目錄. 空目錄習慣上可以放一個.keep 或 .gitkeep 檔案後進行提交. *$ git add . && git commit -m "Message" | 將資料夾中所有新檔案, 加入本地資料庫後, 再 Commit 目前所有的變更. *$ git add | 將加入(暫存區)管理. 空目錄是無法被提交的. 空目錄習慣上可以放一個.keep 或 .gitkeep 檔案後進行提交. *$ git add -f | 將加入(暫存區)管理. -f為忽略 .gitignore 設定. *$ git add -f | 將加入(暫存區)管理. -f為忽略 .gitignore 設定. $ git archive -o latest.zip HEAD | 取得目前分支的全部最新壓縮檔案. Create a Zip archive that contains the contents of the latest commit on the current branch. Note that the output format is inferred by the extension of the output file. $ git archive --remote= | tar -t | 取得遠端檔案, 不會clone, 也不會有本地目錄.git $ git archive --remote= | tar -t --exclude="*/*" | 取得第一層遠端檔案 If you need folders and files just from the first level: $ git archive --remote= | tar -t --exclude="*/*" | grep "/" | 只取得第一層目錄清單 To list only first-level folders of a remote repo: $ git blame | 查詢檔案修改內容. $ git blame -L | 查詢( 第line_num_from列 到 line_num_to列)的修改. $ git blame -L 40,+1 | 查詢( 第40列)的修改. $ git blame -L 40,+21 | 查詢( 第40列到60列)的修改. $ git blame -L 40,60 | 查詢( 第40列到60列)的修改. $ git blame -L 5,10 | 查詢( 第5 到10列)的修改. *$ git branch | 查詢本地分支. 標示為綠色*就是目前的分支. *$ git branch | 建立分支. 建立新分支後, 記得要切換到新分支(git checkout ), 否則仍在原分支不變. $ git branch -d | 刪除分支. $ git branch -f | Shortcut for --force. $ git branch --force | 強制建立分支 Reset to , even if exists already. $ git branch -M | Shortcut for --move --force $ git branch -m | Shortcut for --move $ git branch -m | 將本地分支 改為 $ git branch --move | 修改分支名稱及相關的 reflog. Move/rename a branch and the corresponding reflog. *$ git branch -r | 查詢遠端分支. *$ git branch --set-upstream-to= | 設定本地分支與遠端分支的關聯. 執行 git pull 或 git push 時可不需要指定遠端分支. *$ git branch --set-upstream-to=origin/ main | 設定本地分支main與遠端分支origin/的關聯範例. $ git branch --show-current | 查詢目前本地分支, 建議使用 git branch 就好. $ git branch --unset-upstream [] | 取消本地分支與遠端分支的關聯 *$ git branch -vv | 檢視 upstream 設定, -vv = doubly verbose. 輸出綠色*代表本地分支, 藍色代表遠端分支. 範例: * master 28b359c1 [origin/master] CodeHelper memo. 以上綠色為(* master), 藍色為 origin/master. $ git checkout | 還原目前本地分支所有(已 commit)的檔案. Switch branches or restore working tree files *$ git checkout | 還原(指定版本)的檔案. *$ git checkout | 切換到分支. Switch to a branch. 若分支不存在, 則錯誤訊息. *$ git checkout -b | 切換到新分支, 若新分支不存在, 則建立新分支. $ git checkout | 還原(已 commit)的檔案. $ git clean -f | 還原工作目錄檔案 Untracked files. -f=--force Cleans the working tree by recursively removing files that are not under version control, starting from the current directory. $ git clean -n | 查詢將被 git clean -f 還原的清單 Untracked files. -n=--dry-run Cleans the working tree by recursively removing files that are not under version control, starting from the current directory. *$ git clone | Fork 複製遠端資料庫 到 新子目錄(遠端資料庫名稱)中. Clone a repository into a new directory. 本機中可存放多個相同的資料庫, 各自獨立運作, 互不影響. *$ git clone https://github/com/git/git | 下載更新 git 軟體為最新版本, 若需要一併更新 git-gui, git bash 工具, 則應使用 winget install 指令. $ git commit --amend --no-edit | 將本次commit 併入最後一次 commit 中. --no-edit 代表不修改訊息. *$ git commit --amend -m "Message" | 修改最後一次提交的訊息. $ git commit --signoff | Sign-off is requirement for getting patches into the Linux kernel, but most projects don't actually use it. *$ git commit -a | 將變更存入本地資料庫, -a = All. 不包含未納入管理的檔案. $ git commit -a --alow-empty -m "Commit Message" | 沒有任何檔案變更卻執行提交. $ git commit -a --alow-empty-message | 將變更存入本地資料庫, -a = All, 備註文字為空白. *$ git commit -a -m "Message" | 將變更存入本地資料庫, -a = All, -m 加入備註文字, 否則會要求輸入. *$ git commit -m "Message" | Commit 目前變更進本地資料庫. *$ git config -l | 檢視設定清單. 同 --list *$ git config --list | 檢視設定清單. $ git config --global gc.reflogExpire 'never' | 修改 reflog 保存時間 (存在分支線上,預設 90 天改為無限) $ git config --global gc.reflogExpireUnreachable 'never' | 修改 reflog 保存時間 (不存在分支線上,預設 30 天改為無限) *$ git config --global init.defaultBranch main | 將預設(建立本地資料庫分支名稱)設為 main. $ git config --global user.email "you@example.com" $ git config --global user.name "Your Name" $ git diff | 查詢 commit 版本的差異. *$ git fetch origin/master | 下載指定的分支, 但是不會 merge *$ git help | Help command. $ git help | Help concept. 例如: attributes, cli, core-tutorial...可從 git help -g 取得 concept 清單ㄡ $ git help -a | Help available subcommands. $ git help -g | Help concept guides. $ git init --initial-branch=main | 同 git init -b main *$ git init -b main | 建立本地資料庫, branch=main. 舊版預設建立 master branch, 新版Git 2.28.0(2020-10-01起)響應黑人平權運動, 將 master 改為 main. *$ git init | 建立本地資料庫及預設branch=main. $ git log | 查詢 commit 紀錄. 不包含 HEAD 移動紀錄. *$ git log --oneline --graph | 查詢 commit 紀錄. 不包含 HEAD 移動紀錄. $ git log --oneline -n | 查詢 commit 紀錄. n是最近提交的次數. $ git log --stat --summary | 查詢 commit 紀錄. 狀態摘要明細. *$ git log | 查詢(檔案 commit 紀錄). 建議使用 GitGui 比較容易檢視, 只要在log清單畫面上選擇檔案HighLight. *$ git ls-files -s | 檔案清單, 包括GitMode, commit紀錄. *$ git merge | 將合併入目前分支. 快轉合併 fast-forward 將 分支併入目前的分支. *$ git merge --allow-unrelated-histories | 將合併入目前分支. 允許合併沒有共同祖先的分支. $ git mv | 變更檔案名稱並將變更移到 Staging Area. 等於先( $ mv ), 再 $ git add -A). $ git prune [-n] [-v] [--progress] [--expire