├── .gitignore ├── README.md ├── credential └── README.md ├── git_rebase └── README.md ├── git_reset ├── README.md └── images │ ├── pic1.png │ ├── pic2.png │ └── pic3.png ├── github └── README.md ├── github常遇的錯誤訊息 ├── README.md └── images │ ├── pic1.png │ ├── pic10.png │ ├── pic2.png │ ├── pic3.png │ ├── pic4.png │ ├── pic5.png │ ├── pic6.png │ ├── pic7.png │ ├── pic8.png │ └── pic9.png ├── source ├── amendai.ai ├── content.ai ├── gitignore.ai ├── reset.ai ├── 分支合併使用recursive.ai ├── 新增commit.ai └── 新增和合併branch.ai ├── ssh ├── README.md └── images │ └── image1.png ├── tag └── README.md ├── 不想被追蹤的檔案 ├── README.md └── images │ └── pic1.png ├── 使用master主要分支 ├── README.md └── images │ ├── pic1.png │ ├── pic2.png │ └── pic3.PNG ├── 修改目前commit ├── README.md └── images │ └── pic1.png ├── 分支 ├── README.md └── images │ ├── pic10.png │ ├── pic11.png │ ├── pic12.png │ ├── pic13.png │ ├── pic14.png │ ├── pic15.png │ ├── pic16.png │ ├── pic17.png │ ├── pic1_1.png │ ├── pic2.png │ ├── pic3_1.png │ ├── pic4.png │ ├── pic5.png │ ├── pic6.png │ ├── pic7.png │ ├── pic8.png │ └── pic9.png ├── 回復被刪除的檔案或被編輯的內容 ├── README.md └── images │ ├── pic1.PNG │ ├── pic2.png │ └── pic3.png ├── 檢查先前修改的檔案 └── README.md ├── 測驗 └── README.md ├── 環境安裝與設定 ├── README.md └── images │ ├── pic1.png │ └── pic3.png ├── 課程 └── README.md └── 開始使用Git ├── README.md └── images ├── pic1.png ├── pic10.png ├── pic3.png ├── pic4.png ├── pic5.png ├── pic6.png ├── pic7.png ├── pic8.png └── pic9.png /.gitignore: -------------------------------------------------------------------------------- 1 | 參考文案.pdf 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 使用Git一起工作 2 | 3 | ## 基本設定 4 | - ### [環境安裝與設定](./環境安裝與設定) 5 | - ### [開始使用Git](./開始使用Git) 6 | - ### [使用master或main主要分支](./使用master主要分支) 7 | - ### [回復被刪除的檔案或被編輯的內容](./回復被刪除的檔案或被編輯的內容) 8 | - ### [不想被追蹤的檔案.gitignore](./不想被追蹤的檔案) 9 | 10 | ## git checkout 11 | - [檢查先前修改的檔案](檢查先前修改的檔案) 12 | 13 | ## commit的修改 14 | - ### [修改目前commit --amend](./修改目前commit) 15 | - ### [git reset (--hard,--soft,--mixed)](./git_reset/) 16 | - ### [git rebase](./git_rebase) 17 | - #### 修改commit message 18 | - #### 刪除commit 19 | - #### 合併commit 20 | - #### 切割commit 21 | 22 | ## branch單元 23 | - ### [分支](./分支) 24 | - ### [標籤-tag](./tag) 25 | ## GitHub 26 | ### 1. [GitHub基本操作](./github) 27 | ### 2. 使用github cli建立github repo 28 | ### 3. 使用github網站建立repo 29 | - ### 本地端資料夾(有資料) 30 | - ### 本地端資料夾(沒有資料) 31 | 32 | ### 4. [建立GitHub專用的憑證](./credential) 33 | ### 5. [建立GitHub專用的ssh](./ssh/) 34 | 35 | ## [整合github常遇的錯誤訊息](./github常遇的錯誤訊息) 36 | 37 | 38 | ## 共同開發PR 39 | ### 1. fork 40 | ### 2. Pull request 41 | 42 | ## [課程](./課程) 43 | ## [測驗](./測驗) 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /credential/README.md: -------------------------------------------------------------------------------- 1 | ## 0. 有關於GitHub Token 說明 2 | 3 | ### 0.1 [GitHub Access Tokens explained](https://devopsjournal.io/blog/2022/01/03/GitHub-Tokens) 4 | 5 | ## Personal Access Token(PATs) 6 | 7 | 設置 Git 的憑證幫助程序可以簡化身份驗證過程,特別是在使用 GitHub 時。這樣你不必每次推送或拉取時都輸入用戶名和密碼。以下是手動設置 Git 憑證幫助程序的步驟: 8 | 9 | ## 1. 設置憑證幫助程序 10 | 11 | 12 | Git 提供了幾種不同的憑證幫助程序,你可以根據操作系統選擇最合適的。 13 | 14 | ### 1.1 `credential.helper cache` 15 | 16 | 17 | 這種方式適用於所有操作系統,但只會在短時間內緩存憑證(默認15分鐘)。 18 | 19 | ```other 20 | git config --global credential.helper cache 21 | ``` 22 | 23 | 24 | 你可以設置緩存的時間(單位是秒),例如緩存1小時: 25 | 26 | ```other 27 | git config --global credential.helper 'cache --timeout=3600' 28 | ``` 29 | 30 | 31 | ### 1.2 `credential.helper store` 32 | 33 | 34 | 這種方式會將憑證以純文本形式存儲在磁盤上,適用於所有操作系統。它比 `cache` 更加持久,但安全性較低。 35 | 36 | ```other 37 | git config --global credential.helper store 38 | ``` 39 | 40 | 41 | 第一次輸入憑證後,它們會被保存到 `~/.git-credentials` 文件中。 42 | 43 | ### 1.3 `credential.helper osxkeychain`(適用於 macOS) 44 | 45 | 46 | 這種方式會將憑證存儲在 macOS 的鑰匙串中,安全性較高。 47 | 48 | ```other 49 | git config --global credential.helper osxkeychain 50 | ``` 51 | 52 | 53 | 如果你還沒有安裝 `osxkeychain` 助手,可以使用以下命令安裝: 54 | 55 | ```other 56 | git credential-osxkeychain 57 | ``` 58 | 59 | 60 | ### 1.4 `credential.helper wincred`(適用於 Windows) 61 | 62 | 63 | 這種方式會將憑證存儲在 Windows 憑證存儲區中。 64 | 65 | ```other 66 | git config --global credential.helper wincred 67 | ``` 68 | 69 | 70 | 如果你還沒有安裝 `wincred` 助手,可以下載安裝 Git for Windows,這個助理工具會自動包含在內。 71 | 72 | ## 2. 配置 GitHub 憑證 73 | 74 | 75 | 設置好憑證幫助程序後,你需要配置 GitHub 憑證。 76 | 77 | ### 2.1 使用 Personal Access Token (PAT) 78 | 79 | 80 | 從2021年8月13日開始,GitHub 停止接受帳戶密碼進行身份驗證,推薦使用 Personal Access Token (PAT)。 81 | 82 | ### 2.2 創建 Personal Access Token 83 | 84 | 1. 登錄你的 GitHub 賬戶。 85 | 2. 前往 [Settings](https://github.com/settings/profile)。 86 | 3. 在左側欄中選擇 [Developer settings](https://github.com/settings/developers)。 87 | 4. 選擇 [Personal access tokens](https://github.com/settings/tokens)。 88 | 5. 點擊 `Generate new token` 按鈕。 89 | 6. 設置名稱和過期時間,並選擇所需的權限(例如,repo, workflow 等)。 90 | 7. 生成並複製 token。 91 | 92 | ### 2.3 使用 Personal Access Token 93 | 94 | 95 | 首次推送或拉取時,Git 會提示輸入用戶名和密碼: 96 | 97 | 98 | - 用戶名:你的 GitHub 用戶名。 99 | - 密碼:剛剛生成的 Personal Access Token。 100 | 101 | 這樣,憑證會被憑證幫助程序存儲,未來不需要再次輸入。 102 | 103 | ## 3. 檢查配置 104 | 105 | 106 | 你可以檢查你的憑證幫助程序配置是否正確: 107 | 108 | ```other 109 | git config --list 110 | ``` 111 | 112 | ## 4. 手動編輯git config 113 | 114 | ```bash 115 | git config --global --edit 116 | ``` 117 | 118 | 119 | ## 總結 120 | 121 | 122 | 通過設置憑證幫助程序,你可以簡化使用 GitHub 的身份驗證過程。根據你的操作系統選擇合適的憑證幫助程序,並使用 Personal Access Token 進行身份驗證,確保你的工作流程更加順暢和安全。 123 | -------------------------------------------------------------------------------- /git_rebase/README.md: -------------------------------------------------------------------------------- 1 | ## git rebase 2 | 3 | ### 重新修改多個commit 4 | 5 | ``` 6 | #修改目前的前3個commit 7 | 8 | $ git rebase -i HEAD~3 9 | ``` 10 | 11 | ### 重新修改多個commit的message 12 | 13 | 1. #### 增加3個commit 14 | 15 | ``` 16 | $ echo 'f4.html' >> f4.html 17 | $ git add f4.html 18 | $ git commit -m "add f4.html" 19 | [main (root-commit) ef76d6a] add f4.html 20 | 1 file changed, 1 insertion(+) 21 | create mode 100644 f4.html 22 | 23 | $ echo 'ht.html' > f5.html 24 | $ git add f5.html 25 | $ git commit -m "add f5.html" 26 | [main c75f677] add f5.html 27 | 1 file changed, 1 insertion(+) 28 | create mode 100644 f5.html 29 | 30 | $ echo 'h6.html' > f6.html 31 | $ git add f6.html 32 | $ git commit -m "ad h6.html" 33 | [main 560225d] ad h6.html 34 | 1 file changed, 1 insertion(+) 35 | create mode 100644 f6.html 36 | $ git log --oneline 37 | 560225d (HEAD -> main) ad h6.html 38 | c75f677 add f5.html 39 | ef76d6a add f4.html 40 | ``` 41 | 42 | 2. #### 一次修改3個commit message 43 | 44 | ``` 45 | $ git rebase -i HEAD~3 #修改前3個 46 | ---------------------------------------- 47 | #將pick改為reword改為reword(修改commit message) 48 | #執行後,會分別出現2次新的commit message修改對話框 49 | 50 | reword 807884e 新增f4.html 51 | reword d0a9f5a 新增f5.html 52 | reword 0c8d81f 新增f6.html 53 | 54 | # Rebase 0abe09e..ac95c93 onto 0abe09e (3 commands) 55 | # 56 | # Commands: 57 | # p, pick = use commit 58 | # r, reword = use commit, but edit the commit message 59 | ``` 60 | 61 | 62 | ### 將3個commit,擠壓成為1個 63 | 64 | ``` 65 | $ git rebase -i HEAD~3 #修改前3個 66 | ------------------------------------ 67 | #將第2個和第3個改為squash(向前擠壓) 68 | #第1個保持pick 69 | #會開啟一個對話框,可以修改新的commit message 70 | 71 | pick 144a0e8 新增f4.html修改 72 | squash 949e35b 新增f5.html修改 73 | squash b86cfdf 新增f6.html修改 74 | ``` 75 | 76 | ### 將1個commit,拆解為2個 77 | 78 | ``` 79 | $ git log --oneline 80 | e341558 (HEAD -> main) add h7.html 81 | b92cb0f add f5.html-modify add h6.html modify #將要拆解中間這個 82 | ef76d6a add f4.html 83 | ``` 84 | 85 | 1. #### 開始拆解 86 | 87 | ``` 88 | $ git rebase -i HEAD~2 89 | 90 | #將要拆解的改為edit 91 | pick b92cb0f add f5.html-modify add h6.html modify 92 | pick e341558 add h7.html 93 | ``` 94 | 95 | 2. #### 拆解說明 96 | - git commit --amend 97 | - git rebase --continue # 拆解完成要執行這個指令 98 | 99 | ``` 100 | Stopped at b92cb0f... add f5.html-modify add h6.html modify 101 | You can amend the commit now, with 102 | 103 | git commit --amend 104 | 105 | Once you are satisfied with your changes, run 106 | 107 | git rebase --continue 108 | 109 | ``` 110 | 111 | 3. #### 先使用git status開查stage 和 working directory內的狀態 112 | - 無任何東西 113 | ``` 114 | $ git status 115 | interactive rebase in progress; onto ef76d6a #現在正在rebase中 116 | Last command done (1 command done): 117 | edit b92cb0f add f5.html-modify add h6.html modify 118 | Next command to do (1 remaining command): 119 | pick e341558 add h7.html 120 | (use "git rebase --edit-todo" to view and edit) 121 | You are currently editing a commit while rebasing branch 'main' on 'ef76d6a'. 122 | (use "git commit --amend" to amend the current commit) 123 | (use "git rebase --continue" once you are satisfied with your changes) 124 | 125 | nothing to commit, working tree clean 126 | 127 | ``` 128 | 129 | 4. #### 將目前的commit內容,分解至working directory 130 | 131 | ``` 132 | $ git reset HEAD^ 133 | $ git status 134 | interactive rebase in progress; onto ef76d6a 135 | Last command done (1 command done): 136 | edit b92cb0f add f5.html-modify add h6.html modify 137 | Next command to do (1 remaining command): 138 | pick e341558 add h7.html 139 | (use "git rebase --edit-todo" to view and edit) 140 | You are currently editing a commit while rebasing branch 'main' on 'ef76d6a'. 141 | (use "git commit --amend" to amend the current commit) 142 | (use "git rebase --continue" once you are satisfied with your changes) 143 | 144 | Untracked files: # 已經被拆解至working directory 145 | (use "git add ..." to include in what will be committed) 146 | f5.html 147 | f6.html 148 | 149 | nothing added to commit but untracked files present (use "git add" to track) 150 | ``` 151 | 152 | 5. #### 建立2個新增的commit 153 | 154 | ``` 155 | $ git add f5.html 156 | $ git commit -m "add f5.html" 157 | $ git add f6.html\ 158 | $ git commit -m "add f6.html" 159 | ``` 160 | 161 | 6. #### 結束rebase,和檢查commit 162 | 163 | ``` 164 | $ git rebase --continue 165 | $ git log --oneline 166 | 167 | #已經被拆解為2個了 168 | cfb65c5 (HEAD -> main) add h7.html 169 | 859de98 add f6.html 170 | 09b96cf add f5.html 171 | ef76d6a add f4.html 172 | ``` 173 | 174 | ### rebase的fixup 和 squash是相似的,也是向前組合commit,但不會要求更改commit的message 175 | 176 | 1. #### 執行rebase 177 | 178 | ``` 179 | $ git rebase -i HEAD~3 180 | 181 | #將後面2個組合至第1個 182 | pick 09b96cf add f5.html 183 | fixup 859de98 add f6.html 184 | fixup cfb65c5 add h7.html 185 | ``` 186 | 187 | 2. #### 檢查commit內容 188 | 189 | ``` 190 | $ git log --oneline 191 | b500edb (HEAD -> main) add f5.html 192 | ef76d6a add f4.html 193 | ``` 194 | 195 | -------------------------------------------------------------------------------- /git_reset/README.md: -------------------------------------------------------------------------------- 1 | # git reset (--hard,--soft,--mixed) 2 | > 注意 小心會修改工作目錄內的檔案和內容 3 | > 回到前面記錄點(commit) 4 | > 有3種模式 --hard,--soft,--mixed 5 | 6 | ## 預設模式(—mixed) 7 | 8 | > 回到指定的commit,先前commit拆解的檔案,進入尚未commit的工作區 9 | 10 | ![](./images/pic1.png) 11 | 12 | ``` 13 | $ touch i1.html 14 | $ git add i1.html 15 | $ git commit -m “增加i1.html” 16 | 17 | $ touch i2.html 18 | $ git add h2.html 19 | $ git commit -m “增加i2.html” 20 | 21 | $ git log --oneline 22 | ______________________________________ 23 | 24 | fa7a416 (HEAD -> master) 增加i2.html 25 | f6679ed 增加i1.html 26 | 3c24296 修改.gitignore 27 | cca5666 增加h.cer檔案和hfloder目錄 28 | cd28b1e 增加.gitignore 29 | d2600eb 新增f1.html,f2.html 新增f3.html 30 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 31 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 32 | 63d60eb 建立b3.html 33 | 58718cc 建立b2.html 34 | 6421101 建立b1.html 35 | 454c953 建立3個a檔案 36 | 37 | 38 | $ git reset 3c24296 #回到3c24296 39 | 40 | $ git status 41 | ________________________________________ 42 | On branch master 43 | Untracked files: 44 | (use "git add ..." to include in what will be committed) 45 | i1.html 46 | i2.html 47 | 48 | nothing added to commit but untracked files present (use "git add" to track) 49 | 50 | $ git log --oneline 51 | _____________________________________ 52 | 3c24296 (HEAD -> master) 修改.gitignore 53 | cca5666 增加h.cer檔案和hfloder目錄 54 | cd28b1e 增加.gitignore 55 | d2600eb 新增f1.html,f2.html 新增f3.html 56 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 57 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 58 | 63d60eb 建立b3.html 59 | 58718cc 建立b2.html 60 | 6421101 建立b1.html 61 | 454c953 建立3個a檔案 62 | 63 | ``` 64 | 65 | - HEAD回到3c24296 66 | - 先前commit拆解的檔案回到尚未commit的工作區域 67 | 68 | ## 回復到原來的commit 69 | 70 | > commit 實際是沒被拆解!只要記的先前的commit識別碼.就可以回復 71 | 72 | ``` 73 | $ git reset fa7a416 #復原到最先的commit 74 | $ git log --oneline 75 | _______________________________ 76 | fa7a416 (HEAD -> master) 增加i2.html 77 | f6679ed 增加i1.html 78 | 3c24296 修改.gitignore 79 | cca5666 增加h.cer檔案和hfloder目錄 80 | cd28b1e 增加.gitignore 81 | d2600eb 新增f1.html,f2.html 新增f3.html 82 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 83 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 84 | 63d60eb 建立b3.html 85 | 58718cc 建立b2.html 86 | 6421101 建立b1.html 87 | 454c953 建立3個a檔案 88 | ``` 89 | 90 | - 回復到原先的commit 91 | 92 | ## soft模式(--soft) 93 | 94 | > 回到指定的commit,先前commit拆解的檔案,進入尚未commit的staged區 95 | 96 | ![](./images/pic2.png) 97 | 98 | ``` 99 | $ git log --oneline 100 | _____________________________ 101 | fa7a416 (HEAD -> master) 增加i2.html 102 | f6679ed 增加i1.html 103 | 3c24296 修改.gitignore 104 | cca5666 增加h.cer檔案和hfloder目錄 105 | cd28b1e 增加.gitignore 106 | d2600eb 新增f1.html,f2.html 新增f3.html 107 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 108 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 109 | 63d60eb 建立b3.html 110 | 58718cc 建立b2.html 111 | 6421101 建立b1.html 112 | 454c953 建立3個a檔案 113 | 114 | $ git reset c324296 --soft 115 | $ git status 116 | ____________________________________ 117 | On branch master 118 | Changes to be committed: 119 | (use "git restore --staged ..." to unstage) 120 | new file: i1.html 121 | new file: i2.html 122 | 123 | $ git log --oneline 124 | _______________________________________ 125 | 3c24296 (HEAD -> master) 修改.gitignore 126 | cca5666 增加h.cer檔案和hfloder目錄 127 | cd28b1e 增加.gitignore 128 | d2600eb 新增f1.html,f2.html 新增f3.html 129 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 130 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 131 | 63d60eb 建立b3.html 132 | 58718cc 建立b2.html 133 | 6421101 建立b1.html 134 | 454c953 建立3個a檔案 135 | 136 | ``` 137 | 138 | - 回到commit 3c24296 139 | - 被拆解的commit檔案,進入staged內 140 | 141 | ## 回復到原來的commit 142 | 143 | > commit 實際是沒被拆解!只要記的先前的commit識別碼.就可以回復 144 | 145 | ``` 146 | $ git reset fa7a416 #復原到最先的commit 147 | $ git log --oneline 148 | _______________________________ 149 | fa7a416 (HEAD -> master) 增加i2.html 150 | f6679ed 增加i1.html 151 | 3c24296 修改.gitignore 152 | cca5666 增加h.cer檔案和hfloder目錄 153 | cd28b1e 增加.gitignore 154 | d2600eb 新增f1.html,f2.html 新增f3.html 155 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 156 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 157 | 63d60eb 建立b3.html 158 | 58718cc 建立b2.html 159 | 6421101 建立b1.html 160 | 454c953 建立3個a檔案 161 | ``` 162 | 163 | - 回復到原先的commit 164 | 165 | 166 | ## hard模式(--hard) 167 | 168 | > 回到指定的commit,捨棄先前commit拆解的檔案 169 | 170 | ![](./images/pic3.png) 171 | 172 | ``` 173 | $ git log --oneline 174 | _____________________________ 175 | fa7a416 (HEAD -> master) 增加i2.html 176 | f6679ed 增加i1.html 177 | 3c24296 修改.gitignore 178 | cca5666 增加h.cer檔案和hfloder目錄 179 | cd28b1e 增加.gitignore 180 | d2600eb 新增f1.html,f2.html 新增f3.html 181 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 182 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 183 | 63d60eb 建立b3.html 184 | 58718cc 建立b2.html 185 | 6421101 建立b1.html 186 | 454c953 建立3個a檔案 187 | 188 | $ git reset --hard 189 | $ git status 190 | __________________________________ 191 | On branch master 192 | nothing to commit, working tree clean 193 | 194 | $ git log --oneline 195 | ___________________________________ 196 | fa7a416 (HEAD -> master) 增加i2.html 197 | f6679ed 增加i1.html 198 | 3c24296 修改.gitignore 199 | cca5666 增加h.cer檔案和hfloder目錄 200 | cd28b1e 增加.gitignore 201 | d2600eb 新增f1.html,f2.html 新增f3.html 202 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 203 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 204 | 63d60eb 建立b3.html 205 | 58718cc 建立b2.html 206 | 6421101 建立b1.html 207 | 454c953 建立3個a檔案 208 | ``` 209 | 210 | 211 | 回到指定的commit,捨棄先前commit拆解的檔案 212 | 213 | ## git reflog 214 | 215 | > 可以查詢到所有commit的動作記錄!就可以查到先前被拆解的commit識別碼 216 | 217 | ``` 218 | $ git reflog 219 | __________________________________ 220 | fa7a416 (HEAD -> master) HEAD@{0}: reset: moving to fa7a416 221 | 3c24296 HEAD@{1}: reset: moving to 3c24296 222 | fa7a416 (HEAD -> master) HEAD@{2}: reset: moving to fa7a416 223 | 3c24296 HEAD@{3}: reset: moving to 3c24296 224 | fa7a416 (HEAD -> master) HEAD@{4}: reset: moving to fa7a416 225 | 3c24296 HEAD@{5}: reset: moving to 3c24296 226 | fa7a416 (HEAD -> master) HEAD@{6}: commit: 增加i2.html 227 | f6679ed HEAD@{7}: commit: 增加i1.html 228 | 3c24296 HEAD@{8}: commit: 修改.gitignore 229 | cca5666 HEAD@{9}: commit: 增加h.cer檔案和hfloder目錄 230 | cd28b1e HEAD@{10}: commit: 增加.gitignore 231 | d2600eb HEAD@{11}: commit (amend): 新增f1.html,f2.html 232 | aa7edbe HEAD@{12}: commit (amend): 新增f1.html,f2.html 233 | fcf905a HEAD@{13}: commit: 新增f1.html 234 | 059c439 HEAD@{14}: reset: moving to 059c439 235 | 59b62a4 HEAD@{15}: commit: 新增H1.html 236 | 0a7a99e HEAD@{16}: commit (amend): 重新修改commit說明 237 | c1a6019 HEAD@{17}: reset: moving to c1a6019 238 | d4e1b24 HEAD@{18}: reset: moving to d4e1b24 239 | c1a6019 HEAD@{19}: reset: moving to c1a6019 240 | d4e1b24 HEAD@{20}: commit: 刪除e1.html,e2.html,e3.html 241 | c1a6019 HEAD@{21}: reset: moving to c1a6019 242 | 6633812 HEAD@{22}: reset: moving to 6633812 243 | c1a6019 HEAD@{23}: commit: 新增e1.html,e2.html,e3.html 244 | 059c439 HEAD@{24}: reset: moving to 059c439 245 | 6633812 HEAD@{25}: reset: moving to 6633812 246 | 247 | ``` -------------------------------------------------------------------------------- /git_reset/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/git_reset/images/pic1.png -------------------------------------------------------------------------------- /git_reset/images/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/git_reset/images/pic2.png -------------------------------------------------------------------------------- /git_reset/images/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/git_reset/images/pic3.png -------------------------------------------------------------------------------- /github/README.md: -------------------------------------------------------------------------------- 1 | 2 | # GitHub基本使用方法 3 | ## 0. 申請一個Github個人帳號 4 | 5 | ## 1. 編輯git的config 6 | 7 | ### 1.1 配置使用者名稱和電子郵件 8 | Git需要知道你的身份。使用以下命令配置你的名稱和電子郵件: 9 | 10 | ```bash 11 | git config --global user.name "你的名字" 12 | git config --global user.email "你的電子郵件" 13 | ``` 14 | 15 | ### 1.2 查看配置 16 | 檢查你的配置設定是否正確: 17 | 18 | ```bash 19 | git config --list 20 | ``` 21 | 22 | ## 2. git的credential.name 23 | 24 | ### 2.1 設置憑證幫助程序 25 | Git可以使用憑證幫助程序來管理你的密碼。設置憑證幫助程序: 26 | 27 | ```bash 28 | git config --global credential.helper cache 29 | ``` 30 | 31 | ### 2.2 查看已保存的憑證 32 | 檢查Git已保存的憑證: 33 | 34 | ```bash 35 | git credential-cache exit 36 | ``` 37 | 38 | ## 3. git remote的使用 39 | 40 | ### 3.1 添加遠端倉庫 41 | 添加遠端倉庫URL: 42 | 43 | ```bash 44 | git remote add origin <遠端倉庫URL> 45 | ``` 46 | 47 | ### 3.2 查看遠端倉庫 48 | 查看已添加的遠端倉庫: 49 | 50 | ```bash 51 | git remote -v 52 | ``` 53 | 54 | ### 3.3 刪除遠端倉庫 55 | 刪除遠端倉庫: 56 | 57 | ```bash 58 | git remote remove origin 59 | ``` 60 | 61 | ## 4. git fetch 62 | 63 | ### 4.1 拉取最新改動 64 | 從遠端倉庫獲取最新的改動: 65 | 66 | ```bash 67 | git fetch origin 68 | ``` 69 | 70 | ## 5. git pull 71 | 72 | ### 5.1 拉取並合併 73 | 從遠端倉庫拉取最新改動並合併: 74 | 75 | ```bash 76 | git pull origin main 77 | ``` 78 | 79 | ## 6. merge 和 rebase 的區別 80 | ### Merge(合併) 81 | 當你執行 git pull 時,如果使用的是合併策略(默認行為),Git 會創建一個新的合併提交,這個提交包含了本地和遠端分支的所有變更歷史。 82 | 83 | ```bash 84 | git pull origin main 85 | # 等同於: 86 | git fetch origin 87 | git merge origin/main 88 | ``` 89 | 90 | #### 優點: 91 | - 保留了完整的歷史記錄,包括所有分支和合併點。 92 | - 更容易理解每個變更是如何進行的。 93 | 94 | #### 缺點: 95 | - 歷史記錄可能會變得複雜,特別是在有很多分支和合併的情況下。 96 | 97 | ### Rebase(重排) 98 | 當你執行 git pull --rebase 時,Git 會將本地的提交暫存,然後將遠端的提交應用到本地分支,最後重新應用本地的提交。 99 | 100 | ```bash 101 | git pull --rebase origin main 102 | # 等同於: 103 | git fetch origin 104 | git rebase origin/main 105 | ``` 106 | 107 | #### 優點: 108 | - 生成更線性的提交歷史,便於閱讀和理解。 109 | - 沒有合併提交,歷史記錄更簡潔。 110 | 111 | 112 | 113 | #### 缺點: 114 | - 需要小心處理衝突,因為重排可能會改變提交的順序和內容。 115 | - 可能會覆蓋他人的工作歷史,導致協作困難。 116 | 117 | 118 | 119 | ## 7. git push 120 | git push 是 Git 的一個命令,用來將本地的提交(變更)推送到遠端倉庫。這個操作會將本地的分支更新同步到遠端分支,使得其他協作者可以看到和合併這些變更。以下是有關 git push 的詳細說明以及如何執行它的步驟。 121 | 122 | ### 7.1 git push 基本概念 123 | - **推送(Push)**:將本地倉庫中的變更上傳到遠端倉庫。 124 | - **遠端倉庫(Remote Repository)**:GitHub、GitLab、Bitbucket 等托管服務上的倉庫。 125 | - **本地分支(Local Branch)**:你的電腦上的 Git 分支。 126 | - **遠端分支(Remote Branch)**:遠端倉庫中的 Git 分支。 127 | - 128 | ### 7.2 基本用法 129 | #### 7.2.1 配置遠端倉庫 130 | 在推送之前,需要確保你的本地倉庫已經配置了遠端倉庫。通常在git clone倉庫時會自動設置遠端倉庫,如果沒有,可以手動添加: 131 | 132 | ```bash 133 | git remote add origin <遠端倉庫URL> 134 | ``` 135 | 136 | #### 7.2.2 推送到遠端倉庫 137 | 138 | 將本地的 main 分支推送到遠端的 main 分支: 139 | 140 | ```bash 141 | git push origin main 142 | ``` 143 | 144 | 這個命令中的 origin 是遠端倉庫的預設名稱,main 是你要推送的分支名稱。 145 | 146 | #### 7.2.3 推送所有分支 147 | 148 | 如果你想推送所有本地分支,可以使用以下命令: 149 | 150 | ```bash 151 | git push --all origin 152 | ``` 153 | 154 | #### 7.2.4 強制推送 155 | 156 | 有時候你可能需要強制推送(注意:這可能會覆蓋遠端分支上的變更,應謹慎使用): 157 | 158 | ```bash 159 | git push --force origin main 160 | ``` 161 | 162 | #### 7.2.5 推送標籤 163 | 如果你創建了標籤,也可以推送它們到遠端倉庫: 164 | 165 | ```bash 166 | git push origin --tags 167 | ``` 168 | 169 | ### 7.3 步驟示例 170 | #### 7.3.1 假設情景 171 | 你在本地倉庫進行了一些變更,並且想要將這些變更推送到 GitHub 上的遠端倉庫。 172 | 173 | #### 7.3.2 詳細步驟 174 | 175 | ##### 1. 初始化本地倉庫(如果還沒有) 176 | ```bash 177 | git init 178 | ``` 179 | 180 | ##### 2. 添加遠端倉庫 181 | 182 | ```bash 183 | git remote add origin https://github.com/yourusername/your-repo.git 184 | ``` 185 | 186 | ##### 3. 添加文件到暫存區 187 | 188 | ```bash 189 | git add . 190 | ``` 191 | 192 | ##### 4. 提交變更 193 | 194 | ```bash 195 | git commit -m "描述你的變更" 196 | ``` 197 | 198 | ##### 5. 推送到遠端倉庫 199 | 200 | ```bash 201 | git push origin main 202 | ``` 203 | 204 | 這樣,你的變更就會被推送到 GitHub 上的 main 分支,其他協作者就可以看到這些變更了。 205 | 206 | #### 7.3.3 推送過程中的常見問題 207 | ##### 1. 認證問題 208 | 209 | 在推送過程中,你可能會被要求輸入 GitHub 的用戶名和密碼。為了避免每次都輸入,可以配置 SSH 密鑰或者使用憑證幫助程序。 210 | 211 | ##### 2. 分支衝突 212 | 如果遠端分支有其他人的變更,你在推送時可能會遇到衝突。在這種情況下,你需要先拉取遠端的變更並解決衝突: 213 | 214 | ```bash 215 | git pull origin main 216 | ``` 217 | 218 | 然後再次推送: 219 | 220 | ```bash 221 | git push origin main 222 | ``` 223 | 224 | ##### 3. 未跟踪分支 225 | 如果你創建了一個新的分支,並且該分支還沒有與遠端分支建立跟踪關係,你可以使用以下命令推送並設置跟踪: 226 | 227 | ```bash 228 | git push -u origin new-branch 229 | ``` 230 | 231 | 這樣,下次你只需使用 git push 即可。 232 | 233 | ## 8. git clone 234 | 235 | 236 | ### 8.1 複製遠端倉庫 237 | 從遠端倉庫複製到本地: 238 | 239 | ```bash 240 | git clone <遠端倉庫URL> 241 | ``` 242 | 243 | ## 9. 使用GitHub CLI建立GitHub repo 244 | 245 | ### 9.1 安裝GitHub CLI 246 | 首先,安裝GitHub CLI。參考官方文件進行安裝。 247 | 248 | ### 9.2 登錄GitHub 249 | 使用GitHub CLI登錄: 250 | 251 | ```bash 252 | gh auth login 253 | ``` 254 | 255 | ### 9.3 創建新倉庫 256 | 創建新的GitHub倉庫: 257 | 258 | ```bash 259 | gh repo create <倉庫名稱> --public 260 | ``` 261 | 262 | ## 10. 使用GitHub網站手動建立repo 263 | 264 | ### 10.1 登錄GitHub 265 | 打開[GitHub](https://github.com),並登錄你的賬號。 266 | 267 | ### 10.2 創建新倉庫 268 | 點擊右上角的 "+" 號,選擇 "New repository"。填寫倉庫名稱和描述,選擇可見性,然後點擊 "Create repository"。 269 | 270 | --- 271 | 272 | 這是GitHub基本使用方法的詳細講義,希望這能幫助你理解和使用GitHub進行版本控制和協作開發。如果需要進一步的詳細解說或示範,可以參考官方文檔或教程。 273 | -------------------------------------------------------------------------------- /github常遇的錯誤訊息/README.md: -------------------------------------------------------------------------------- 1 | # 整合github常遇的錯誤訊息 2 | - [push(推送)時出現的錯誤訊息(non-fast-forward error)](#狀況1) 3 | - [push(推送) push時本地端和遠端出現檔案衝突](#狀況2) 4 | - [pull(提取)出現檔案衝突](#狀況3) 5 | - [pull成功完成後取消前一次的pull](#狀況4) 6 | 7 | 8 | ## 狀況1 push(推送)時出現的錯誤訊息 9 | 10 | - 問題是因為遠端 main 分支有新的提交,而你的本地 main 分支落後於遠端版本,導致 Git 拒絕推送 (non-fast-forward error)。 11 | 12 | - 因為在github上不會自動merge 13 | 14 | ``` 15 | roberthsu2003@xuguotangdeMBP test % git push 16 | To https://github.com/roberthsu2003/__git_test__.git 17 | ! [rejected] main -> main (non-fast-forward) 18 | error: failed to push some refs to 'https://github.com/roberthsu2003/__git_test__.git' 19 | hint: Updates were rejected because the tip of your current branch is behind 20 | hint: its remote counterpart. If you want to integrate the remote changes, 21 | hint: use 'git pull' before pushing again. 22 | hint: See the 'Note about fast-forwards' in 'git push --help' for details. 23 | ``` 24 | 25 | - **依command觀察** 26 | 27 | > [!TIP] 28 | > → 使用fetch命令取得remote分支的資訊 29 | 30 | 31 | ```bash 32 | git fetch origin && git status 33 | ``` 34 | 35 | - **依圖型觀察:main和origin/main分叉** 36 | 37 | ![](./images/pic1.png) 38 | 39 | #### 解決方法1 40 | 41 | > [!TIP] 42 | > → 使用命令pull 43 | >> 注意預設會在local自動merge,所以會要求您提供merge的敘述文字\ 44 | >> 預設敘述文字的`#`是註解,被排除為敘述文字 45 | 46 | ```bash 47 | git pull #先pull,要寫敘文字 48 | git push #再push #多了一個merge的commit 49 | ``` 50 | 51 | ![](./images/pic2.png) 52 | 53 | 54 | #### 解決方法2 55 | - rebase (下拉下來的commit,成為本地端commit的parent) 56 | 57 | ```bash 58 | git pull --rebase origin main 59 | ``` 60 | 61 | 62 | ![](./images/pic3.png) 63 | 64 | > [!WARNING] 65 | > → 如果rebase 過程中遇到衝突,Git 會停止並讓你手動解決。 66 | 67 | **1️⃣有衝突的檔案,解決衝突後,執行:** 68 | 69 | ```base 70 | git add <修正過的檔案> 71 | git rebase --continue 72 | ``` 73 | 74 | 75 | **2️⃣如果想要放棄 rebase,可以執行:** 76 | 77 | ```bash 78 | git rebase --abort 79 | ``` 80 | 81 | --- 82 | 83 | 84 | ## 狀況2 push時本地端和遠端出現檔案衝突 85 | 86 | > [!TIP] 87 | > 透過vscode可以快速發現 88 | >> 2種方式 89 | 90 | 91 | ### 第1種方式-正在編輯時發現 92 | 93 | ![](./images/pic8.png) 94 | 95 | 96 | 97 | 98 | **→解決方法:** 99 | 1. 回復至未編輯的狀態(discard changes in working directory)\ 100 | 2. 再git pull 101 | 102 | ```bash 103 | git restore <檔案名稱> #回復衝突檔案 104 | git pull #檔案沒衝突後,將雲端提取下來 105 | ``` 106 | 107 | ### 第2種方式-在原始檔控制內發現 108 | - **本地端還沒有建立commit時,在vscode就可以知道檔案是否衝突** 109 | ![](./images/pic4.png) 110 | 111 | **→解決方法2:** 112 | 1. 回復至未編輯的狀態(discard changes in working directory)\ 113 | 2. 再git pull 114 | 115 | ```bash 116 | git restore <檔案名稱> #回復衝突檔案 117 | git pull #檔案沒衝突後,將雲端提取下來 118 | ``` 119 | 120 | --- 121 | 122 | 123 | 124 | ## 狀況3 pull(提取)出現檔案衝突 125 | 126 | - **由於有分叉,所以先pull下來** 127 | 128 | ![](./images/pic5.png) 129 | 130 | **檔案衝突的訊息** 131 | 132 | - **會告知您那一個檔案衝突** 133 | 134 | ```bash 135 | roberthsu2003@xuguotangdeMBP test % git pull 136 | Auto-merging README.md 137 | CONFLICT (content): Merge conflict in README.md 138 | Automatic merge failed; fix conflicts and then commit the result. 139 | ``` 140 | 141 | - **vscode衝突的畫面** 142 | ![](./images/pic6.png) 143 | 144 | #### 解法方法1-修改衝突 145 | 146 | **修改衝突檔案使用vscode** 147 | 148 | - **1️⃣可以在編輯器4個選擇其中1個** 149 | 150 | ![](./images/pic9.png) 151 | 152 | - **2️⃣自已手動修改** 153 | - 刪除衝突部分 154 | 155 | ![](./images/pic10.png) 156 | 157 | - **建立新的commit** 158 | 159 | ```bash 160 | git add . 161 | git commit -m "修改衝突和合併變更" 162 | ``` 163 | 164 | ![](./images/pic7.png) 165 | 166 | #### 解決方法2-取消pull 167 | 168 | **1.取消pull的動作** 169 | 170 | 當 git pull 遇到衝突時,Git 其實是在執行 git fetch + git merge,如果你想取消這個合併,可以執行: 171 | 172 | ```bash 173 | git merge --abort 174 | ``` 175 | 176 | 這將會 **取消merge**,並讓你的分支回到 git pull 之前的狀態。 177 | 178 | **2.回復至前一個commit,放棄本次修改** 179 | 180 | ```bash 181 | git reset --hard HEAD^ 182 | ``` 183 | 184 | **3.重新pull** 185 | 186 | ```bash 187 | git pull 188 | ``` 189 | 190 | --- 191 | 192 | 193 | ## 狀況4 pull成功完成後撤銷前一次的pull 194 | 195 | #### 解決方法 196 | 197 | 如果 git pull 已經成功執行(即 merge 也完成了),但你想回到 pull 之前的狀態,你可以使用: 198 | 199 | ```bash 200 | git reset --hard ORIG_HEAD 201 | ``` 202 | 203 | 204 | 205 | 206 | -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic1.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic10.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic2.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic3.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic4.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic5.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic6.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic7.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic8.png -------------------------------------------------------------------------------- /github常遇的錯誤訊息/images/pic9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/github常遇的錯誤訊息/images/pic9.png -------------------------------------------------------------------------------- /source/amendai.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/amendai.ai -------------------------------------------------------------------------------- /source/content.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/content.ai -------------------------------------------------------------------------------- /source/gitignore.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/gitignore.ai -------------------------------------------------------------------------------- /source/reset.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/reset.ai -------------------------------------------------------------------------------- /source/分支合併使用recursive.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/分支合併使用recursive.ai -------------------------------------------------------------------------------- /source/新增commit.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/新增commit.ai -------------------------------------------------------------------------------- /source/新增和合併branch.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/source/新增和合併branch.ai -------------------------------------------------------------------------------- /ssh/README.md: -------------------------------------------------------------------------------- 1 | # 設定SSH KEY 連線 2 | ## Mac 3 | ### 此方法可以建立不同github帳號和不同的repo的ssh key 4 | ### 原則為先建立公開和私有SSH金鑰,並先處理SSH Key,再clone repo會比較簡單 5 | ### 步驟1:建立SSH金鑰 6 | 1. **打開Terminal** 7 | 2. **進入~/.ssh的資料夾** 8 | 9 | ```bash 10 | cd ~/.ssh 11 | ``` 12 | 13 | 3.**為每一個帳號和Repo建立不同的SSH Key** 14 | - 以下範例一次建立2個SSH Key 15 | 16 | ```bash 17 | ssh-keygen -t rsa -b 4096 -C "your-email-for-account1@example.com" -f id_rsa_account1 18 | ssh-keygen -t rsa -b 4096 -C "your-email-for-account2@example.com" -f id_rsa_account2 19 | ``` 20 | 21 | > your-email-for-account1@example.com:必需是**github的帳號email** 22 | > 23 | > id_rsa_account1:**建立SSH Key的名稱** 24 | 25 | 輸入後會出現下面幾行,如下所示: 26 | - 會自動將金鑰建立於/Users/you/.ssh/id_rsa 27 | - 取用這個鈕鑰有需要使用驗証碼(passphrase)嗎?(一般我直接按enter) 28 | - 完成後,將產生私有金鑰id_rsa和公有金鑰id_rsa.pub 29 | - 公有金鑰必需要放至github的repo內 30 | 31 | ``` 32 | Generating public/private rsa key pair. 33 | Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter] 34 | Enter passphrase (empty for no passphrase): [Type a passphrase] 35 | Enter same passphrase again: [Type passphrase again] 36 | ``` 37 | 38 | ### 步驟2. 將SSH keys加入至SSH Agent 39 | 1. **啟動SSH agent:** 40 | 41 | ```bash 42 | eval "$(ssh-agent -s)" 43 | ``` 44 | 45 | 2. **加入剛產生的SSH Key(沒有.pub的key)進入agent** 46 | 47 | ```bash 48 | ssh-add ~/.ssh/id_rsa_account1 49 | ssh-add ~/.ssh/id_rsa_account2 50 | ``` 51 | 52 | 3. **檢查加入至SSH Agent的SSH Key** 53 | 54 | ```bash 55 | ssh-add -L 56 | ``` 57 | 58 | ### 步驟3. 將Public key增加至repo內 59 | 60 | 1. **顯示並複制顯示的public key至剪貼簿** 61 | 62 | ```bash 63 | cat ~/.ssh/id_rsa_account1.pub 64 | ``` 65 | 66 | 2. **至Github Repo內的Setting -> Deploy Keys** 67 | 3. **新增SSH key title(自訂一個名稱),貼上public key,並允許read/write** 68 | 69 | ![](./images/image1.png) 70 | 71 | ### 步驟4. 建立ssh的Configuration檔案 72 | 73 | 1. **打開或建立SSH的config檔案** 74 | 75 | ```bash 76 | vim ~/.ssh/config 77 | ``` 78 | 79 | 2. **加入下列的設定內容至config檔內** 80 | 81 | ```config 82 | # Host -是小名,ssh指令將知道這個小名,(小名將被設定至git remote url內) 83 | # HostName和User -組合後就成為git@github.com 84 | # IdentityFile -告知對應的ssh key 85 | # AddKeysToAgent yes -自動將此ssh key加入至key agent 86 | # UseKeyChain yes -如果ssh key使用時,需要使用密碼時,自動使用鑰匙圈內的密碼.由於我們建立ssh key時,並沒有使用密碼可以不設定。樹莓派並沒有鑰匙圈的功能,一定不可以使用,不然會出錯 87 | 88 | Host github-personal 89 | HostName github.com 90 | User git 91 | AddKeysToAgent yes 92 | UseKeyChain yes 93 | IdentityFile ~/.ssh/id_rsa_account1 94 | 95 | # Work account 96 | Host github-work 97 | HostName github.com 98 | User git 99 | AddKeysToAgent yes 100 | UseKeyChain yes 101 | IdentityFile ~/.ssh/id_rsa_account2 102 | 103 | # *的意思是所有使用上面的Host全部會自動套用下面的內容 104 | Host * 105 | AddKeysToAgent yes 106 | UseKeyChain yes 107 | ``` 108 | 109 | 3. **測試** 110 | - **直接使用githbu的位置** 111 | 112 | ```bash 113 | ssh -T git@github.com 114 | ``` 115 | 116 | - **使用小名的名稱** 117 | 118 | ```bash 119 | ssh -T github-personal 120 | ssh -T github-work 121 | ``` 122 | 123 | 124 | 125 | ### 步驟5. 使用小名的方式,clone repo自本機 126 | - **請使用小名方式clone** 127 | - **小名已經定義在config內了** 128 | 129 | ``` 130 | #使用小名的方式clone 131 | git clone github-personal:roberthsu2003/__2024_09_04_tvdi__.git 132 | ``` 133 | 134 | > 注意:小名為github-personal: 135 | 136 | ``` 137 | #使用github官方的方式clone 138 | git clone git@github.com:roberthsu2003/__2024_09_04_tvdi__.git 139 | ``` 140 | 141 | > 注意:官方的位置設定在git@github.com: 142 | 143 | ### 步驟6. 更改每個repo內的local user.name和user.email 144 | 145 | - 全域的要設定--global 146 | 147 | ```bash 148 | git config user.name "Your Name" 149 | git config user.email "your-email-for-account1@example.com" 150 | ``` 151 | 152 | 153 | 154 | 155 | ## Raspberry-樹莓派 156 | 157 | - 設定方法和Mac是一樣的,只要注意樹莓派並沒有鑰匙圈的功能,config檔內的設定不可以有`UseKeyChain yes` 158 | 159 | 160 | ```config 161 | # Host -是小名,ssh指令將知道這個小名,(小名將被設定至git remote url內) 162 | # HostName和User -組合後就成為git@github.com 163 | # IdentityFile -告知對應的ssh key 164 | # AddKeysToAgent yes -自動將此ssh key加入至key agent 165 | # UseKeyChain yes -如果ssh key使用時,需要使用密碼時,自動使用鑰匙圈內的密碼.由於我們建立ssh key時,並沒有使用密碼可以不設定。樹莓派並沒有鑰匙圈的功能,一定不可以使用,不然會出錯 166 | 167 | Host github-personal 168 | HostName github.com 169 | User git 170 | AddKeysToAgent yes 171 | IdentityFile ~/.ssh/id_rsa_account1 172 | 173 | # Work account 174 | Host github-work 175 | HostName github.com 176 | User git 177 | AddKeysToAgent yes 178 | IdentityFile ~/.ssh/id_rsa_account2 179 | 180 | # *的意思是所有使用上面的Host全部會自動套用下面的內容 181 | Host * 182 | AddKeysToAgent yes 183 | ``` 184 | 185 | -------------------------------------------------------------------------------- /ssh/images/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/ssh/images/image1.png -------------------------------------------------------------------------------- /tag/README.md: -------------------------------------------------------------------------------- 1 | # 標籤-tag -------------------------------------------------------------------------------- /不想被追蹤的檔案/README.md: -------------------------------------------------------------------------------- 1 | # 不想被追蹤的檔案 2 | > 在專案中有一些檔案是不想被git管理的.例如一些編輯軟體的暫存檔或是一些token(密鎖) 3 | 4 | > 不想被管理的檔案,可以加人至.gitignore檔案清單中 5 | 6 | ![](./images/pic1.png) 7 | 8 | ## 情境1:一開使就確認檔案不被管理 9 | 10 | ### 增加g.cer檔,gfolder目錄,目錄內加入g1.html,g2.html 11 | 12 | ``` 13 | $ touch g.cer 14 | $ mkdir gfloder 15 | $ cd gfloder 16 | $ touch g1.html g2.html 17 | $ cd .. 18 | $ git status 19 | _________________________________ 20 | 21 | On branch master 22 | Untracked files: 23 | (use "git add ..." to include in what will be committed) 24 | g.cer 25 | gfloder/ 26 | 27 | nothing added to commit but untracked files present (use "git add" to track) 28 | 29 | ``` 30 | 31 | - 以上提醒我們尚未追蹤g.cer和gfloder目錄 32 | 33 | ### 建立.gitignore清單 34 | 35 | ``` 36 | $ vim .gitignore 37 | ______________________ 38 | g.cer 39 | gfloder/* 40 | ~ 41 | ~ 42 | ~ 43 | ~ 44 | ~ 45 | ______________________ 46 | 47 | $ git status 48 | _______________________ 49 | 50 | On branch master 51 | Untracked files: 52 | (use "git add ..." to include in what will be committed) 53 | .gitignore 54 | 55 | nothing added to commit but untracked files present (use "git add" to track) 56 | ``` 57 | 58 | - 剛才的檔案,已經沒有被追蹤! 59 | 60 | ### 將.gitignore加入管理 61 | 62 | ``` 63 | $ git add . 64 | $ git commit -m “加入.gitignore” 65 | ``` 66 | 67 | 68 | ___ 69 | 70 | ## 情境2:已經被追蹤的檔案更改為不再被追蹤 71 | 72 | ### 增加h.cer檔,hfolder目錄,目錄內加入h1.html,h2.html 73 | 74 | ``` 75 | $ touch h.cer 76 | $ mkdir hfloder 77 | $ cd hfloder 78 | $ touch h1.html h2.html 79 | $ cd .. 80 | $ git status 81 | _________________________________ 82 | 83 | On branch master 84 | Untracked files: 85 | (use "git add ..." to include in what will be committed) 86 | h.cer 87 | hfloder/ 88 | 89 | nothing added to commit but untracked files present (use "git add" to track) 90 | 91 | ``` 92 | 93 | - 以上提醒我們尚未追蹤g.cer和gfloder目錄 94 | 95 | ### h.cer檔,hfolder目錄,目錄內加入h1.html,h2.html加入commit 96 | 97 | ``` 98 | $ git add . 99 | $ git commit -m "增加h.cer檔案和hfloder目錄" 100 | _________________________________ 101 | [master cca5666] 增加h.cer檔案和hfloder目錄 102 | 3 files changed, 0 insertions(+), 0 deletions(-) 103 | create mode 100644 h.cer 104 | create mode 100644 hfloder/h1.html 105 | create mode 100644 hfloder/h2.html 106 | 107 | $ git log -p 108 | ________________________________ 109 | commit cca5666f6fe56537a4b2e3e89096ba8527bfaa32 (HEAD -> master) 110 | Author: Robert Hsu 111 | Date: Wed Dec 8 08:47:43 2021 +0800 112 | 113 | 增加h.cer檔案和hfloder目錄 114 | 115 | diff --git a/h.cer b/h.cer 116 | new file mode 100644 117 | index 0000000..e69de29 118 | diff --git a/hfloder/h1.html b/hfloder/h1.html 119 | new file mode 100644 120 | index 0000000..e69de29 121 | diff --git a/hfloder/h2.html b/hfloder/h2.html 122 | new file mode 100644 123 | index 0000000..e69de29 124 | ``` 125 | 126 | - 已經將新加入的檔案和目錄成為commit記錄狀態 127 | 128 | ### 將h.cer檔,hfolder目錄內h1.html,h2.html,成為未追蹤狀態 129 | 130 | ``` 131 | $ git rm —cached h.cer hfloder/h1.html hfloder/h2.html 132 | _______________________________________ 133 | rm 'h.cer' 134 | rm 'hfloder/h1.html' 135 | rm 'hfloder/h2.html' 136 | 137 | $ git status 138 | ________________________________________ 139 | On branch master 140 | Changes to be committed: 141 | (use "git restore --staged ..." to unstage) 142 | deleted: h.cer 143 | deleted: hfloder/h1.html 144 | deleted: hfloder/h2.html 145 | 146 | Untracked files: 147 | (use "git add ..." to include in what will be committed) 148 | h.cer 149 | hfloder/ 150 | 151 | 152 | 153 | ``` 154 | 155 | - 表示檔案和目錄沒有被 156 | 157 | ### 將檔案和目錄加入至清單.gitignore 158 | 159 | ``` 160 | $ vim .gitignore 161 | __________________________ 162 | g.cer 163 | gfloder/* 164 | h.cer 165 | hfloder/* 166 | ~ 167 | ~ 168 | ~ 169 | ~ 170 | ~ 171 | ~ 172 | 173 | $ git status 174 | _________________________ 175 | On branch master 176 | Changes to be committed: 177 | (use "git restore --staged ..." to unstage) 178 | deleted: h.cer 179 | deleted: hfloder/h1.html 180 | deleted: hfloder/h2.html 181 | 182 | Changes not staged for commit: 183 | (use "git add ..." to update what will be committed) 184 | (use "git restore ..." to discard changes in working directory) 185 | modified: .gitignore 186 | 187 | 188 | ``` 189 | 190 | - h.cer和hfolder目錄將不再被追蹤 191 | 192 | 193 | 194 | 195 | 196 | -------------------------------------------------------------------------------- /不想被追蹤的檔案/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/不想被追蹤的檔案/images/pic1.png -------------------------------------------------------------------------------- /使用master主要分支/README.md: -------------------------------------------------------------------------------- 1 | # 使用master主要分支 2 | 3 | 當使用git初始化專案時,便會產生master主要分支, 分支是什麼?我們可以把分支想像為這是我們目前工作的分支,所以也可以說現在我們的工作分支是在master分支. 4 | 5 | ## 將master分支改為main 6 | 7 | ```bash 8 | git config --global init.defaultBranch main 9 | ``` 10 | 11 | ## 建立專案和查看master分支狀態 12 | - 開啟gitBash 13 | 14 | ``` 15 | $ cd ~/Documents #進入文件夾 16 | $ mkdir gitTogether1 #建立gitTogether1資料夾 17 | $ cd gitTogether1 #進入gitTogether1資料夾 18 | $ git init #初始化git 19 | $ git status 20 | 21 | _________________________ 22 | On branch master 23 | 24 | No commits yet 25 | 26 | nothing to commit (create/copy files and use "git add" to track) 27 | ``` 28 | 29 | 上方的On branch master,代表目前的工作分支是在master上. 30 | 31 | 32 | ## 建立三個檔案,產生一個紀錄點(commit) 33 | 34 | ``` 35 | $ touch a1.html 36 | $ touch a2.html 37 | $ touch a3.html 38 | $ git add —all 39 | $ git commit -m “建立3個a檔案“ 40 | $ git log #git log 是觀察commit的歷史資料 41 | 42 | ________________________________________________________________ 43 | commit 454c9536865cfbc883084f3da2c4ec025cc09c85 (HEAD -> master) 44 | Author: Robert Hsu 45 | Date: Wed Dec 1 12:14:23 2021 +0800 46 | 47 | 建立3個a檔案 48 | ``` 49 | 50 | 上方的(HEAD -> master)代表目前的工作分支是在master分支 51 | 52 | ## 查看目前分支 53 | 54 | ``` 55 | $ git branch 56 | 57 | _________________ 58 | * master 59 | ``` 60 | 61 | 上方代表目前專案只有一個分支,「*」是代表目前的工作分支 62 | 63 | 下方是source tree的顯示 64 |  65 | ![](./images/pic1.png) 66 | 67 | ___ 68 | 69 | ## 建立三個紀錄點(commit) 70 | 71 | ``` 72 | $ touch b1.html 73 | $ git add b1.html 74 | $ git commit -m “建立b1.html” 75 | 76 | $ touch b2.html 77 | $ git add b2.html 78 | $ git commit -m “建立b2.html” 79 | 80 | $ touch b3.html 81 | $ git add b3.html 82 | $ git commit -m “建立b3.html” 83 | 84 | $ git log 85 | ____________________________________________________________ 86 | 87 | commit 63d60eb52ca806973f428b93e734cbea34cd3376 (HEAD -> master) 88 | Author: Robert Hsu 89 | Date: Wed Dec 1 12:48:40 2021 +0800 90 | 91 | 建立b3.html 92 | 93 | commit 58718cc8bdddb84634d94935a1ce7317fee9356b 94 | Author: Robert Hsu 95 | Date: Wed Dec 1 12:47:58 2021 +0800 96 | 97 | 建立b2.html 98 | 99 | commit 64211012f1fab196ddf1f55a214c70de8321a270 100 | Author: Robert Hsu 101 | Date: Wed Dec 1 12:47:12 2021 +0800 102 | 103 | 建立b1.html 104 | 105 | commit 454c9536865cfbc883084f3da2c4ec025cc09c85 106 | Author: Robert Hsu 107 | Date: Wed Dec 1 12:14:23 2021 +0800 108 | 109 | 建立3個a檔案 110 | ``` 111 | 112 | - 有4個commit,最新的是在最上面 113 | - HEAD代表目前所在的commit 114 | - master代表目前master所指向的commit 115 | 116 | ![](./images/pic3.PNG) 117 | 118 | _______ 119 | 120 | ## 結論 121 | 122 | - HEAD 代表目前我們所在的commit 123 | - HEAD->master 代表我們所在的commit是master分支 124 | - 當commit一個新的記錄點(commit)時,HEAD和master同時也會更新目前指向的記錄點. 125 | - 依此方法,HEAD和master會永遠在這一串記錄點(commit)的最上方.(以目前所學的是如此) 126 | 127 | ![](./images/pic2.png) 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /使用master主要分支/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/使用master主要分支/images/pic1.png -------------------------------------------------------------------------------- /使用master主要分支/images/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/使用master主要分支/images/pic2.png -------------------------------------------------------------------------------- /使用master主要分支/images/pic3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/使用master主要分支/images/pic3.PNG -------------------------------------------------------------------------------- /修改目前commit/README.md: -------------------------------------------------------------------------------- 1 | # 修改目前commit或重新修改多個commit 2 | ### - *重要*,修改尚未上傳至github上的commit(本機的commit) 3 | ### - *重要*,github pull 下來的commit,切勿修改(會影響開發團隊的其它開發人員) 4 | - 使用時機,在上傳至github是,只想保持1個commit的上傳(不想太多的commit上傳至github) 5 | - 修改目前的commit是一個常見的動作. 所謂修改其實是刪除現有的!建立全新的commit 6 | ### 修改目前commit 7 | - 修改目前的commit 8 | 9 | ``` 10 | $ git commit --amend 11 | ``` 12 | 13 | 14 | 15 | 16 | ### 使用 --amend 17 | 18 | ![](./images/pic1.png) 19 | 20 | #### 新增h1.html,建立commit 21 | 22 | ``` 23 | $ touch f1.html 24 | $ git add f1.html 25 | $ git commit -m “新增h1.html” 26 | $ git log 27 | _____________________________ 28 | commit fcf905a8ad0740a9f04793b42b503660339c5ea8 (HEAD -> master) 29 | Author: Robert Hsu 30 | Date: Mon Dec 6 14:18:33 2021 +0800 31 | 32 | 新增f1.html 33 | 34 | ``` 35 | 36 | - 上面建立新fcf905a的commit 37 | 38 | #### 新增h2.html,修改commit 39 | 40 | ``` 41 | $ touch f2.html 42 | $ git add f2.htmll 43 | $ git commit --amend -m “新增f1.html,f2.html” 44 | $ git log -p # -p是查閱commit儲存的工作狀態 45 | ___________________________ 46 | 47 | commit aa7edbe6960c90de5623c5b3557f36c017caa187 (HEAD -> master) 48 | Author: Robert Hsu 49 | Date: Mon Dec 6 14:18:33 2021 +0800 50 | 51 | 新增f1.html,f2.html 52 | ``` 53 | 54 | - 原本的fcf905a的commit,已經消失 55 | - 建立新的aa7edb的commit 56 | - commit描述已經更改 57 | - commit儲存的工作狀態是原本的commit和新的工作狀態的組合 58 | 59 | #### 新增h3.html,修改commit 沒有-m 60 | - 進入編輯comit message 的畫沒 61 | 62 | ``` 63 | $ touch f3.html 64 | $ git add f3.html 65 | $ git commit --amend #沒有-m是修改原本的描述(vim) 66 | 67 | _______________________________ 68 | 新增f1.html,f2.html 69 | 新增f3.html 70 | 71 | # Please enter the commit message for your changes. Lines starting 72 | # with '#' will be ignored, and an empty message aborts the commit. 73 | # 74 | # Date: Mon Dec 6 14:18:33 2021 +0800 75 | # 76 | # On branch master 77 | # Changes to be committed: 78 | # new file: f1.html 79 | # new file: f2.html 80 | # new file: f3.html 81 | # 82 | ~ 83 | ~ 84 | ~ 85 | ~ 86 | ~ 87 | ~ 88 | ~ 89 | ~ 90 | 91 | _____________________________________ 92 | 93 | $ git log -p 94 | 95 | _____________________________________ 96 | commit d2600ebcd971b337171a4f68e477ed36bc58c3a6 (HEAD -> master) 97 | Author: Robert Hsu 98 | Date: Mon Dec 6 14:18:33 2021 +0800 99 | 100 | 新增f1.html,f2.html 101 | 新增f3.html 102 | 103 | diff --git a/f1.html b/f1.html 104 | new file mode 100644 105 | index 0000000..e69de29 106 | diff --git a/f2.html b/f2.html 107 | new file mode 100644 108 | index 0000000..e69de29 109 | diff --git a/f3.html b/f3.html 110 | new file mode 100644 111 | index 0000000..e69de29 112 | ``` 113 | 114 | - 如果沒有使用-m,將會修改先前的描述 115 | - commit儲存的工作狀態是原本的commit和新的工作狀態的組合 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /修改目前commit/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/修改目前commit/images/pic1.png -------------------------------------------------------------------------------- /分支/README.md: -------------------------------------------------------------------------------- 1 | # branch(分支) 2 | - git branch 3 | - 查詢branch 4 | - git branch 分支名稱 5 | - 建立新的分支 6 | - git branch -D 分支名稱 7 | - 刪除分支 8 | - git branch -M 分支名稱 9 | - 改變分支名稱 10 | - git switch 分支名稱 11 | - 切換分支 12 | - git switch -c 分支名稱 13 | - 同時建立新分支和切換分支 14 | - git merge 15 | - 合併分支(自動,fast forward或--no-ff) 16 | - git merge --no-ff 17 | - 強制不使用fast forward 18 | - git rebase 19 | - 改變基底 20 | 21 | ## master和commit的關係 22 | 23 | ![](./images/pic1_1.png) 24 | 25 | ## master,commit和專案檔案關係 26 | 27 | ![](./images/pic2.png) 28 | 29 | 30 | 31 | ## 主要分支(master) 32 | > 一個專案至少要有一個分支 33 | > 34 | > 預設分支的名稱是master 或 main 35 | > 36 | > master分支是一個指向單一commit的指標,可以想像是一張貼在commit上的貼紙 37 | > 38 | > master是可以移動的貼紙 39 | 40 | ## HEAD是什麼? 41 | 42 | > HEAD代表目前在哪一個commit上 43 | > 44 | > HEAD也是可以移動的標籤 45 | > 46 | > HEAD一般都貼在分支上,當分支移動時,HEAD也會跟著移動 47 | > 48 | > HEAD可以切換到不同分支,HEAD一次只可以貼在一個分支上 49 | 50 | ## 分支是什麼? 51 | > 分支就是在主要分支建立另一條支線,而每一條分支都有特定的任務! 52 | 53 | 比方說開發一個購物網頁有會員功能,購物功能,最新訊息,產品上架….,每一個功能都可以建立一個分支,完成後可以合併至主分支 54 | 55 | 修改一個bug也可以建立一個分支 56 | 57 | 測試一個功能也可以建立一個分支 58 | 59 | 60 | ## 建立分支和切換分支和合併分支 61 | 62 | 63 | ### 檢視目前分支 64 | 65 | ``` 66 | $ git branch 67 | ``` 68 | 69 | ### 新增分支 70 | 71 | ``` 72 | $ git branch 新的分支名稱 73 | ``` 74 | 75 | ### 切換分支 76 | 77 | ``` 78 | $ git switch 分支名稱 79 | ``` 80 | 81 | ### 新增並切換分支 82 | 83 | ``` 84 | $ git checkout -b 新的分支名稱 85 | ``` 86 | 87 | ### 合併分支 88 | 89 | ``` 90 | $ git merge 分支名稱 91 | $ git merge --no-ff 分支名稱 92 | $ git merge --squash 分支名稱 93 | ``` 94 | 95 | ### 刪除分支 96 | 97 | ``` 98 | $ git branch -d 分支名稱 99 | ``` 100 | 101 | ### 實作流程(fast-forward) 102 | 103 | #### 新增專案 104 | 105 | ``` 106 | $ mkdir worktogether1 107 | $ cd worktogether1 108 | $ git init 109 | 110 | $ touch a.html 111 | $ git add a.html 112 | $ git commit -m “新增a.html” 113 | 114 | $ touch b.html 115 | $ git add b.html 116 | $ git commit -m “新增b.html” 117 | 118 | $ touch c.html 119 | $ git add c.html 120 | $ git commit -m “新增c.html” 121 | ``` 122 | 123 | #### 新增分支sub1 124 | 125 | ``` 126 | 127 | $ git branch sub1 128 | $ git branch 129 | 130 | ________________________ 131 | * master 132 | sub1 133 | 134 | ``` 135 | 136 | ![](./images/pic3_1.png) 137 | 138 | 139 | #### 切換分支至sub1 140 | 141 | ``` 142 | #切換分支 143 | 144 | $ git switch sub1 145 | $ git branch 146 | ___________________________ 147 | master 148 | * sub1 149 | ``` 150 | 151 | ![](./images/pic4.png) 152 | 153 | ___ 154 | 155 | #### 在sub1分支增加commit 156 | 157 | ``` 158 | $ touch d.html 159 | $ git add d.html 160 | $ git commit -m “新增d.html” 161 | ``` 162 | 163 | ![](./images/pic5.png) 164 | 165 | ___ 166 | 167 | #### 在sub1分支增加commit 168 | 169 | ``` 170 | $ touch e.html 171 | $ git add e.html 172 | $ git commit -m “新增e.html” 173 | $ ls 174 | _________________________ 175 | a.html b.html c.html d.html e.html 176 | ``` 177 | 178 | ![](./images/pic6.png) 179 | 180 | ___ 181 | 182 | #### 切換回分支master 183 | 184 | ``` 185 | $ git switch master 186 | $ ls 187 | ___________________________ 188 | a.html b.html c.html 189 | ``` 190 | 191 | ![](./images/pic7.png) 192 | 193 | ___ 194 | 195 | #### master合併分支sub1(使用fast-forward) 196 | - 切換回master分支 197 | 198 | ``` 199 | $ git merge sub1 #如果不要fast-forward,要用git merge --no-ff sub1 200 | _____________________ 201 | Updating 40351bf..af5116d 202 | Fast-forward 203 | 204 | d.html | 0 205 | 206 |  e.html | 0 207 | 208 |  2 files changed, 0 insertions(+), 0 deletions(-) 209 | 210 |  create mode 100644 d.html 211 |  create mode 100644 e.html 212 | 213 | $ ls 214 | _____________________________ 215 | a.html b.html c.html d.html e.html 216 | ``` 217 | 218 | 219 | 220 | ![](./images/pic8.png) 221 | 222 | ___ 223 | 224 | #### master目前的commit 225 | 226 | ``` 227 | $ git log --oneline 228 | --------------- 229 | b8ea456 (HEAD -> main, sub1) 新增e.html 230 | 42598c2 新增d.html 231 | 88b7fa3 新增c.html 232 | 6f4f91d 新增b.html 233 | a41b3de 新增a.html 234 | ``` 235 | 236 | #### master新增commit 237 | 238 | ``` 239 | $ touch f.html 240 | $ git add f.html 241 | $ git commit -m “新增f.html” 242 | ____________________________ 243 | a.html b.html c.html d.html e.html 244 | 245 | ``` 246 | 247 | ![](./images/pic9.png) 248 | 249 | ___ 250 | 251 | #### 刪除分支sub1 252 | 253 | ``` 254 | $ git branch -d sub1 255 | ``` 256 | 257 | ![](./images/pic10.png) 258 | 259 | ___ 260 | 261 | ### 實作流程(squash) 262 | 263 | #### 新增sub2分支 264 | 265 | ``` 266 | $ touch g1.html 267 | $ git add g1.html 268 | $ git commit -m “新增g1.html” 269 | 270 | $ touch g2.html 271 | $ git add g2.html 272 | $ git commit -m “新增g2.html” 273 | 274 | $ touch g3.html 275 | $ git add g3.html 276 | $ git commit -m “新增g3.html” 277 | 278 | $ git branch sub2 279 | ``` 280 | 281 | ![](./images/pic11.png) 282 | 283 | ___ 284 | 285 | #### 切換至sub2分支 286 | 287 | ``` 288 | $ git switch sub2 289 | ``` 290 | 291 | ![](./images/pic12.png) 292 | 293 | ___ 294 | 295 | #### sub2分支增加一個commit 296 | 297 | ``` 298 | $ touch h1.html 299 | $ git add h1.html 300 | $ git commit -m “新增h1.html” 301 | ``` 302 | 303 | ![](./images/pic13.png) 304 | 305 | ___ 306 | 307 | #### sub2分支增加一個commit 308 | 309 | ``` 310 | $ touch h2.html 311 | $ git add h2.html 312 | $ git commit -m “新增h2.html” 313 | ``` 314 | 315 | ![](./images/pic14.png) 316 | 317 | ___ 318 | 319 | #### 切換至master分支 320 | 321 | ``` 322 | $ git switch master 323 | ``` 324 | 325 | ![](./images/pic15.png) 326 | 327 | ___ 328 | 329 | #### master分支增加一個commit 330 | 331 | ``` 332 | $ touch i1.html 333 | $ git add i1.html 334 | $ git commit -m “新增i1.html” 335 | ``` 336 | 337 | ![](./images/pic16.png) 338 | 339 | ___ 340 | 341 | #### master 合併 sub2分支(squash) 342 | - 合併後2個來源的commit要結合為一個新的commit 343 | - 會跳出編輯視窗,修改新的commit的message 344 | 345 | 346 | ``` 347 | $ git merge sub2 348 | ``` 349 | 350 | ![](./images/pic17.png) 351 | 352 | 353 | ``` 354 | $ git log --oneline 355 | 356 | ---------- 357 | aed5872 (HEAD -> master) Merge branch 'sub2' #這個為合併後建立的 358 | eb69cf3 新增i1.html 359 | e8c12ca (sub2) 新增h2.html 360 | b5f7dd4 新增h1.html 361 | a8e23d0 新增g3.html 362 | 6c65a56 新增g2.html 363 | 2e43837 新增g1.html 364 | ``` 365 | 366 | ### 實作流程(rebase) 367 | 368 | #### 新增sub2分支 369 | 370 | ``` 371 | $ touch g1.html 372 | $ git add g1.html 373 | $ git commit -m “新增g1.html” 374 | 375 | $ touch g2.html 376 | $ git add g2.html 377 | $ git commit -m “新增g2.html” 378 | 379 | $ touch g3.html 380 | $ git add g3.html 381 | $ git commit -m “新增g3.html” 382 | 383 | $ git branch sub2 384 | ``` 385 | 386 | ![](./images/pic11.png) 387 | 388 | ___ 389 | 390 | #### 切換至sub2分支 391 | 392 | ``` 393 | $ git switch sub2 394 | ``` 395 | 396 | ![](./images/pic12.png) 397 | 398 | ___ 399 | 400 | #### sub2分支增加一個commit 401 | 402 | ``` 403 | $ touch h1.html 404 | $ git add h1.html 405 | $ git commit -m “新增h1.html” 406 | ``` 407 | 408 | ![](./images/pic13.png) 409 | 410 | ___ 411 | 412 | #### sub2分支增加一個commit 413 | 414 | ``` 415 | $ touch h2.html 416 | $ git add h2.html 417 | $ git commit -m “新增h2.html” 418 | ``` 419 | 420 | ![](./images/pic14.png) 421 | 422 | ___ 423 | 424 | #### 切換至master分支 425 | 426 | ``` 427 | $ git switch master 428 | ``` 429 | 430 | ![](./images/pic15.png) 431 | 432 | ___ 433 | 434 | #### master分支增加一個commit 435 | 436 | ``` 437 | $ touch i1.html 438 | $ git add i1.html 439 | $ git commit -m “新增i1.html” 440 | ``` 441 | 442 | ![](./images/pic16.png) 443 | 444 | ___ 445 | 446 | #### 由sub2 rebase master 447 | - 將sub2重新建立基底 448 | 449 | ``` 450 | $ git switch sub2 451 | $ git rebase master 452 | ------------------------ 453 | Successfully rebased and updated refs/heads/sub2. 454 | 455 | $ git log --oneline 456 | ---------------------- 457 | 377f87c (HEAD -> sub2) 新增h2.html 458 | f3df131 新增h1.html 459 | 0e1bf3a (master) 新增i1.html #這裏是由master移進來的 460 | 72bd8f4 新增g3.html 461 | 3df4a30 新增g2.html 462 | 34d9980 新增g1.html 463 | ``` 464 | 465 | #### 由master rebase sub2 466 | - 將master重新建立基底 467 | 468 | ``` 469 | $ git switch master 470 | $ git log --oneline 471 | ----------------------- 472 | 0e1bf3a (HEAD -> master) 新增i1.html 473 | 72bd8f4 新增g3.html 474 | 3df4a30 新增g2.html 475 | 34d9980 新增g1.html 476 | 477 | $ git rebase sub2 478 | ------------------------- 479 | Successfully rebased and updated refs/heads/master 480 | 481 | $ git log --oneline 482 | 377f87c (HEAD -> master, sub2) 新增h2.html 483 | f3df131 新增h1.html 484 | 0e1bf3a 新增i1.html 485 | 72bd8f4 新增g3.html 486 | 3df4a30 新增g2.html 487 | 34d9980 新增g1.html 488 | ``` 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | -------------------------------------------------------------------------------- /分支/images/pic10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic10.png -------------------------------------------------------------------------------- /分支/images/pic11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic11.png -------------------------------------------------------------------------------- /分支/images/pic12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic12.png -------------------------------------------------------------------------------- /分支/images/pic13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic13.png -------------------------------------------------------------------------------- /分支/images/pic14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic14.png -------------------------------------------------------------------------------- /分支/images/pic15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic15.png -------------------------------------------------------------------------------- /分支/images/pic16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic16.png -------------------------------------------------------------------------------- /分支/images/pic17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic17.png -------------------------------------------------------------------------------- /分支/images/pic1_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic1_1.png -------------------------------------------------------------------------------- /分支/images/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic2.png -------------------------------------------------------------------------------- /分支/images/pic3_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic3_1.png -------------------------------------------------------------------------------- /分支/images/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic4.png -------------------------------------------------------------------------------- /分支/images/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic5.png -------------------------------------------------------------------------------- /分支/images/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic6.png -------------------------------------------------------------------------------- /分支/images/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic7.png -------------------------------------------------------------------------------- /分支/images/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic8.png -------------------------------------------------------------------------------- /分支/images/pic9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/分支/images/pic9.png -------------------------------------------------------------------------------- /回復被刪除的檔案或被編輯的內容/README.md: -------------------------------------------------------------------------------- 1 | # 回復被刪除的檔案或被編輯的內容 2 | 3 | > 在有些情景,我們可能會刪除一些檔案或編輯一些內容,如何回復到目前HEAD的原始狀態. 4 | 5 | ![](./images/pic1.PNG) 6 | 7 | 1. 從工作區回復 8 | 2. 從暫存區回復 9 | 10 | ## 從工作區回復 11 | 12 | - 使用git restore 13 | 14 | ### 新增c1.html,c2.html,c3.html,c3.html加入內容 15 | 16 | ``` 17 | $ touch c1.html 18 | $ touch c2.html 19 | $ touch c3.html 20 | $ vim c3.html 21 | ____________________________ 22 | 我是原始狀態 23 | ~ 24 | ~ 25 | ~ 26 | ~ 27 | ~ 28 | ~ 29 | ~ 30 | ~ 31 | ~ 32 | ~ 33 | ~ 34 | ~ 35 | ~ 36 | ~ 37 | ~ 38 | ~ 39 | ~ 40 | ~ 41 | ~ 42 | ~ 43 | ~ 44 | 45 | 46 | # 建立新的commit 47 | 48 | $ git add —all 49 | $ git commit -m “新增c1.html,c2.html,c3.html,c3.html加入內容” 50 | $ git log —oneline #用簡短方式顯示log 51 | 52 | ______________________________ 53 | bfe5b85 (HEAD -> master) 新增c1.html,c2.html,c3.html,c3.html加入內容 54 | 63d60eb 建立b3.html 55 | 58718cc 建立b2.html 56 | 6421101 建立b1.html 57 | 454c953 建立3個a檔案 58 | 59 | $ ls -al #檢示目前的檔案 60 | ____________________________________ 61 | 62 | total 13 63 | drwxr-xr-x 1 User 197121 0 Dec 2 10:25 ./ 64 | drwxr-xr-x 1 User 197121 0 Dec 1 11:46 ../ 65 | drwxr-xr-x 1 User 197121 0 Dec 2 10:27 .git/ 66 | -rw-r--r-- 1 User 197121 0 Dec 1 12:11 a1.html 67 | -rw-r--r-- 1 User 197121 0 Dec 1 12:11 a2.html 68 | -rw-r--r-- 1 User 197121 0 Dec 1 12:11 a3.html 69 | -rw-r--r-- 1 User 197121 0 Dec 1 13:48 b1.html 70 | -rw-r--r-- 1 User 197121 0 Dec 1 13:48 b2.html 71 | -rw-r--r-- 1 User 197121 0 Dec 1 13:49 b3.html 72 | -rw-r--r-- 1 User 197121 0 Dec 2 10:11 c1.html 73 | -rw-r--r-- 1 User 197121 0 Dec 2 10:11 c2.html 74 | -rw-r--r-- 1 User 197121 19 Dec 2 10:12 c3.html 75 | ``` 76 | 77 | - 以上表示我們最新狀態HEAD是在bfe5b85 78 | - 以上新增c1.html,c2.html,c3.html 79 | 80 | ### 刪除c1.html,c2.html和修改c3.html 81 | 82 | ``` 83 | $ rm c1.html 84 | $ rm c2.html 85 | $ vim c3.html 86 | 87 | ________________________________________ 88 | 89 | 我是原始狀態 90 | 這是新編輯的內容 91 | ~ 92 | ~ 93 | ~ 94 | ~ 95 | ~ 96 | ~ 97 | ~ 98 | ~ 99 | ~ 100 | 101 | 102 | ________________________________________ 103 | 104 | $ git status 105 | 106 | ___________________________________________ 107 | 108 | On branch master 109 | Changes not staged for commit: 110 | (use "git add/rm ..." to update what will be committed) 111 | (use "git restore ..." to discard changes in working directory) 112 | deleted: c1.html 113 | deleted: c2.html 114 | modified: c3.html 115 | 116 | no changes added to commit (use "git add" and/or "git commit -a") 117 | 118 | ____________________________________________________ 119 | 120 | ``` 121 | 122 | 以上代表: 123 | - deleted: c1.html 124 | - deleted: c2.html 125 | - modified: c3.html 126 | 127 | 128 | 129 | ### 回復至原來工作區的狀態 130 | 131 | > 使用git restore file file 檔案回復 132 | 133 | > 使用git restore . 全部回復 134 | 135 | 136 | ``` 137 | $ git restore c1.html c2.html 138 | $ git restore . 139 | $ git status 140 | 141 | ________________________ 142 | On branch master 143 | nothing to commit, working tree clean 144 | _____________________________________ 145 | 146 | $ vim c3.html 147 | ________________________________ 148 | 我是原始狀態 149 | ~ 150 | ~ 151 | ~ 152 | 153 | ________________________________ 154 | 155 | $ ls -al 156 | 157 | ________________________________ 158 | total 13 159 | drwxr-xr-x 1 User 197121 0 Dec 2 11:04 ./ 160 | drwxr-xr-x 1 User 197121 0 Dec 1 11:46 ../ 161 | drwxr-xr-x 1 User 197121 0 Dec 2 11:00 .git/ 162 | -rw-r--r-- 1 User 197121 0 Dec 1 12:11 a1.html 163 | -rw-r--r-- 1 User 197121 0 Dec 1 12:11 a2.html 164 | -rw-r--r-- 1 User 197121 0 Dec 1 12:11 a3.html 165 | -rw-r--r-- 1 User 197121 0 Dec 1 13:48 b1.html 166 | -rw-r--r-- 1 User 197121 0 Dec 1 13:48 b2.html 167 | -rw-r--r-- 1 User 197121 0 Dec 1 13:49 b3.html 168 | -rw-r--r-- 1 User 197121 0 Dec 2 11:00 c1.html 169 | -rw-r--r-- 1 User 197121 0 Dec 2 11:00 c2.html 170 | -rw-r--r-- 1 User 197121 20 Dec 2 11:00 c3.html 171 | ________________________________ 172 | ``` 173 | 174 | 以上表示全部回復 175 | 176 | 177 | ## 從暫存區回復 178 | 179 | ![](./images/pic2.png) 180 | 181 | ### 新增d1.html,d2.html,d3.html,d3.html加入內容 182 | 183 | ``` 184 | $ touch d1.html 185 | $ touch d2.html 186 | $ vim d3.html #d3自己加入內容 187 | $ git add . 188 | $ git commit -m “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 189 | $ ls d*.html -al 190 | 191 | ___________________ 192 | -rw-r--r-- 1 User 197121 0 Dec 4 11:13 d1.html 193 | -rw-r--r-- 1 User 197121 0 Dec 4 11:13 d2.html 194 | -rw-r--r-- 1 User 197121 22 Dec 4 11:14 d3.html 195 | 196 | $ git status 197 | On branch master 198 | nothing to commit, working tree clean 199 | ``` 200 | 201 | 202 | ### 刪除d1.html,d2.html,編輯d3.html,加入暫存區 203 | 204 | ``` 205 | $ rm d1.html 206 | $ rm d2.html 207 | $ vim d3.html # 修改內容 208 | $ git add d1.html d2.html d3.html 209 | $ git status 210 | ________________________________ 211 | 212 | -On branch master 213 | Changes to be committed: 214 | (use "git restore --staged ..." to unstage) 215 | deleted: d1.html 216 | deleted: d2.html 217 | modified: d3.html 218 | 219 | $ ls d*.html -al 220 | ________________________________ 221 | -rw-r--r-- 1 User 197121 44 Dec 4 11:32 d3.html 222 | 223 | ``` 224 | 225 | - 以上代表被放入至stage 226 | - 只剩 d3.html 227 | 228 | ### 回復至工作區 229 | 230 | ``` 231 | $ git restore --staged d1.html d2.html d3.html 232 | 233 | ____________________________ 234 | On branch master 235 | Changes not staged for commit: 236 | (use "git add/rm ..." to update what will be committed) 237 | (use "git restore ..." to discard changes in working directory) 238 | deleted: d1.html 239 | deleted: d2.html 240 | modified: d3.html 241 | 242 | no changes added to commit (use "git add" and/or "git commit -a") 243 | 244 | ``` 245 | 246 | - 代表回復至工作區 247 | 248 | ### 回復到HEAD原始狀態 249 | 250 | ``` 251 | $ git restore . 252 | $ git status 253 | ____________________________ 254 | On branch master 255 | nothing to commit, working tree clean 256 | 257 | $ ls d*.* -al 258 | ______________________________ 259 | -rw-r--r-- 1 User 197121 0 Dec 4 11:47 d1.html 260 | -rw-r--r-- 1 User 197121 0 Dec 4 11:47 d2.html 261 | -rw-r--r-- 1 User 197121 23 Dec 4 11:47 d3.html 262 | 263 | ``` 264 | 265 | - 代表回復到HEAD原始狀態 266 | - 檔案回復了 267 | 268 | 269 | ### 如果在working area內的是untracked file,必需使用git clean 270 | 271 | ``` 272 | $ git clean -fd 檔案名稱 273 | ``` 274 | 275 | 276 | ## 從記錄區(commit)回復 277 | 278 | ![](./images/pic3.png) 279 | 280 | ### 新增e1.html,e2.html,e3.html,並建立記錄點(commit) 281 | 282 | ``` 283 | $ touch e1.html 284 | $ touch e2.html 285 | $ touch e3.html 286 | $ git add . 287 | $ git commit -m “新增e1.html,e2.html,e3.html” 288 | $ git status 289 | _______________________ 290 | On branch master 291 | nothing to commit, working tree clean 292 | 293 | ``` 294 | 295 | ### 刪除e1.html,e2.html,e3.html,並建立記錄點(commit) 296 | 297 | ``` 298 | $ rm e1.html e2.html e3.html 299 | $ git commit -a -m “刪除e1.html,e2.html,e3.html” #已經追蹤的檔案可以直接使用 -a 加入暫存庫 300 | 301 | $ git log --oneline 302 | _____________________________________ 303 | d4e1b24 (HEAD -> master) 刪除e1.html,e2.html,e3.html 304 | c1a6019 新增e1.html,e2.html,e3.html 305 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 306 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 307 | 63d60eb 建立b3.html 308 | 58718cc 建立b2.html 309 | 6421101 建立b1.html 310 | 454c953 建立3個a檔案 311 | 312 | ``` 313 | 314 | - 以上代表HEAD識別碼是d4e1b24 315 | - 前一個識別碼是c1a6019 316 | 317 | ### 使用git reset 回到前一個comit(HEAD,master都改為指向c1a6019) 318 | 319 | ``` 320 | $ git reset c1a6019 --hard #--hard將在後面章節講解 321 | _____________________________________________ 322 | HEAD is now at c1a6019 新增e1.html,e2.html,e3.html 323 | 324 | $ git log --oneline 325 | _________________________ 326 | 327 | c1a6019 (HEAD -> master) 新增e1.html,e2.html,e3.html 328 | 059c439 “加入新增d1.html,d2.html,d3.html,d3.html加入內容“ 329 | bfe5b85 新增c1.html,c2.html,c3.html,c3.html加入內容 330 | 63d60eb 建立b3.html 331 | 58718cc 建立b2.html 332 | 6421101 建立b1.html 333 | 454c953 建立3個a檔案 334 | 335 | $ ls e*.html 336 | ___________________________ 337 | e1.html e2.html e3.html 338 | 339 | ``` 340 | 341 | - 上面代表回到前一個記錄點(commit) 342 | - 刪除的檔案救回來了 343 | 344 | -------------------------------------------------------------------------------- /回復被刪除的檔案或被編輯的內容/images/pic1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/回復被刪除的檔案或被編輯的內容/images/pic1.PNG -------------------------------------------------------------------------------- /回復被刪除的檔案或被編輯的內容/images/pic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/回復被刪除的檔案或被編輯的內容/images/pic2.png -------------------------------------------------------------------------------- /回復被刪除的檔案或被編輯的內容/images/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/回復被刪除的檔案或被編輯的內容/images/pic3.png -------------------------------------------------------------------------------- /檢查先前修改的檔案/README.md: -------------------------------------------------------------------------------- 1 | ## 檢查先前修改的檔案 2 | - 建立3個commit 3 | - 每個commit增加一個檔案 4 | - git log 5 | - git checkout 6 | 7 | ``` 8 | $ touch a.txt 9 | $ git add a.txt 10 | $ git commit -m "增加a.txt" 11 | 12 | $ touch b.txt 13 | $ git add b.txt 14 | $ git commit -m "增加b.txt" 15 | 16 | $ touch c.txt 17 | $ git add c.txt 18 | $ git commit -m "增加c.txt" 19 | 20 | $ ls 21 | a.txt b.txt c.txt 22 | ``` 23 | 24 | ### 1. 使用git log檢查目前的log 25 | - #### git log -> 完整的comit說明 26 | 27 | ``` 28 | $ git log 29 | commit 3e0a0bc2a0d21de36143410463b7f5f11f9f57d8 (HEAD -> main) 30 | Author: roberthsu2003 31 | Date: Tue May 14 13:11:32 2024 +0800 32 | 33 | 增加c.txt 34 | 35 | commit 17ce0507430c6e02b38a133d414ae316447c493a 36 | Author: roberthsu2003 37 | Date: Tue May 14 13:10:24 2024 +0800 38 | 39 | 增加b.txt 40 | 41 | commit 674017c76513fce78f1a64b2e8c398ecafdac878 42 | Author: roberthsu2003 43 | Date: Tue May 14 13:08:34 2024 +0800 44 | 45 | 增加a.txt 46 | 47 | ``` 48 | 49 | - #### git log --oneline -> 簡易的commit說明 50 | 51 | ``` 52 | $ git log --oneline 53 | 3e0a0bc (HEAD -> main) 增加c.txt 54 | 17ce050 增加b.txt 55 | 674017c 增加a.txt 56 | ``` 57 | 58 | - #### git checkout [commit hash] -> 切換HEAD至此commit 59 | - #### git log --all -> 檢查所有的commit 60 | 61 | ``` 62 | $ git checkout 674017c #切換至前面2個 63 | 64 | Note: switching to '674017c'. 65 | 66 | $ ls 67 | a.txt 68 | 69 | $ git log --all #注意HEAD已經被改變了 70 | commit 3e0a0bc2a0d21de36143410463b7f5f11f9f57d8 (main) 71 | Author: roberthsu2003 72 | Date: Tue May 14 13:11:32 2024 +0800 73 | 74 | 增加c.txt 75 | 76 | commit 17ce0507430c6e02b38a133d414ae316447c493a 77 | Author: roberthsu2003 78 | Date: Tue May 14 13:10:24 2024 +0800 79 | 80 | 增加b.txt 81 | 82 | commit 674017c76513fce78f1a64b2e8c398ecafdac878 (HEAD) 83 | Author: roberthsu2003 84 | Date: Tue May 14 13:08:34 2024 +0800 85 | 86 | 增加a.txt 87 | 88 | ``` 89 | 90 | - #### git log --all --graph ->檢查所有的commit和圖形化顯示關係 91 | 92 | ``` 93 | $ git log --all --graph 94 | 95 | * commit 3e0a0bc2a0d21de36143410463b7f5f11f9f57d8 (main) 96 | | Author: roberthsu2003 97 | | Date: Tue May 14 13:11:32 2024 +0800 98 | | 99 | | 增加c.txt 100 | | 101 | * commit 17ce0507430c6e02b38a133d414ae316447c493a 102 | | Author: roberthsu2003 103 | | Date: Tue May 14 13:10:24 2024 +0800 104 | | 105 | | 增加b.txt 106 | | 107 | * commit 674017c76513fce78f1a64b2e8c398ecafdac878 (HEAD) 108 | Author: roberthsu2003 109 | Date: Tue May 14 13:08:34 2024 +0800 110 | 111 | 增加a.txt 112 | ``` 113 | 114 | - #### git switch [branch名稱] 115 | 116 | ``` 117 | $ git switch main 118 | Previous HEAD position was 674017c 增加a.txt 119 | Switched to branch 'main' 120 | 121 | $ git log --oneline 122 | 3e0a0bc (HEAD -> main) 增加c.txt 123 | 17ce050 增加b.txt 124 | 674017c 增加a.txt 125 | ``` 126 | 127 | - #### git log --oneline [filename] -> 檢查該檔案有多少commit 128 | 129 | ``` 130 | $ git log --oneline a.txt 131 | 674017c 增加a.txt #目前只有一個 132 | ``` 133 | 134 | ``` 135 | $ git log a.txt #目前只有一個,完整的commit 136 | 137 | commit 674017c76513fce78f1a64b2e8c398ecafdac878 138 | Author: roberthsu2003 139 | Date: Tue May 14 13:08:34 2024 +0800 140 | 141 | 增加a.txt 142 | 143 | ``` 144 | 145 | 146 | -------------------------------------------------------------------------------- /測驗/README.md: -------------------------------------------------------------------------------- 1 | 2 | ## 測驗 3 | 4 | 5 | ### 1. W3Schools Git 測驗:這份測驗包含 25 道題目,沒有時間限制,適合用來評估學生對 Git 的基本知識。 6 |  7 | https://www.w3schools.com/git/git_quiz.asp 8 | 9 | ### 2. Learn Git Branching 平台 10 | 11 | ### 3. GitHub 認證考試:GitHub 提供多種認證考試,例如 GitHub 基礎、GitHub Actions 等,學生可以透過這些考試來驗證他們的技能水平。 12 |  13 | ### 4. LinkedIn 技能測評題庫:該資源包含多個與 Git 相關的測驗題目,可用於評估學生的實際操作能力。 14 |  15 | ### 5. Coursera 的 Git 和 GitHub 入門課程:該課程包含多個練習測驗,涵蓋進階 Git 互動、撤銷操作、分支與合併等主題,有助於學生鞏固所學知識。  16 | 17 | -------------------------------------------------------------------------------- /環境安裝與設定/README.md: -------------------------------------------------------------------------------- 1 | # git環境安裝與設定 2 | 3 | - 安裝git 4 | - 會使用基本命令做檔案的管理 5 | - 會操作nano,Vim 6 | 7 | ## 安裝git 8 | [git官網git-scm.com](https://git-scm.com) 9 | 10 | ## 查詢目前git版本 11 | - windows使用git bash軟體 12 | - mac 做用terminal 13 | - linux 使用terminal 14 | 15 | ``` 16 | $ git --version 17 | git version 2.31.1 18 | ``` 19 | 20 | 21 | ## 查詢git安裝的位置 22 | 23 | ``` 24 | $ which git 25 | /mingw64/bin/git 26 | 27 | ``` 28 | 29 | ## 安裝視窗軟體gitHub Desktop(mac,window) 30 | [github desktop 官網](https://desktop.github.com/) 31 | 32 | ## 安裝視窗軟體SourceTree(mac,window) 33 | 34 | [sourceTree](https://www.sourcetreeapp.com) 35 | 36 | ## 安裝視窗軟體gitk(linux) 37 | 38 | ``` 39 | $ sudo apt-get install gitk 40 | ``` 41 | 42 | ## 安裝 vscode 43 | [vscode 官網](https://code.visualstudio.com/) 44 | 45 | ## 使用者設定 46 | 47 | ### 1.0 建立使用者姓名和使用者email(必設) 48 | 49 | ```bash 50 | $ git config --global user.name "Robert" 51 | $ git config --global user.email "roberthsu2003@gmail.com" 52 | ``` 53 | 54 | ### 說明: `git config` 命令用於設置 Git 的配置選項,而這些選項可以在不同的範圍內設置。 55 | 56 | 主要有三個範圍: 57 | - `--local` 58 | - `--global` 59 | - `--system` 60 | 61 | #### 以下是它們之間的差異: 62 | 63 | #### --local 64 | 65 | - **範圍**:僅適用於當前 Git 儲存庫。 66 | - **配置文件**:設置會保存在儲存庫目錄中的 `.git/config` 文件中。 67 | - **用法**:適用於特定儲存庫的配置,不會影響其他儲存庫。 68 | 69 | ```bash 70 | git config --local user.name "本地儲存庫的名字" 71 | git config --local user.email "local@example.com" 72 | ``` 73 | 74 | #### 例子: 75 | 當你在某個專案中需要不同於全局配置的用戶名稱和電子郵件地址時,可以使用 `--local` 來設置。 76 | 77 | #### --global 78 | - **範圍**:適用於當前用戶的所有儲存庫。 79 | - **配置文件**:設置會保存在用戶主目錄中的 `~/.gitconfig` 文件中。 80 | - **用法**:適用於該用戶所有儲存庫的配置,除非在單個儲存庫中被覆蓋。 81 | 82 | ```bash 83 | git config --global user.name "全局名字" 84 | git config --global user.email "global@example.com" 85 | ``` 86 | 87 | #### 例子: 88 | 當你想在所有儲存庫中使用相同的用戶名稱和電子郵件地址時,可以使用 `--global` 來設置。 89 | 90 | #### --system 91 | 92 | - **範圍**:適用於系統上所有用戶的所有儲存庫。 93 | - **配置文件**:設置會保存在 Git 安裝目錄中的 `etc/gitconfig` 文件中。 94 | - **用法**:需要管理員權限,適用於系統範圍的配置。 95 | 96 | ```bash 97 | git config --system core.editor "vim" 98 | ``` 99 | 100 | #### 例子: 101 | 當你想為整個系統設置 Git 的默認編輯器時,可以使用 `--system` 來設置。 102 | 103 | #### 優先順序 104 | 105 | 當同一配置項目在多個範圍內設置時,優先順序如下: 106 | 107 | 1. **--local**(儲存庫級別)設定的值會覆蓋其他範圍的設定。 108 | 2. **--global**(全局級別)設定的值會覆蓋系統級別的設定。 109 | 3. **--system**(系統級別)設定的值是最基礎的,如果沒有其他設置,會使用系統級別的配置。 110 | 111 | #### 例子: 112 | 113 | 如果你在三個範圍內都設置了 `user.name`,例如: 114 | 115 | ```bash 116 | git config --system user.name "系統名字" 117 | git config --global user.name "全局名字" 118 | git config --local user.name "本地名字" 119 | ``` 120 | 121 | 那麼在特定儲存庫中使用 `git log` 查看提交記錄時,看到的 `user.name` 會是 "本地名字"。如果該儲存庫沒有設置本地配置,則會使用全局配置的 "全局名字"。如果全局配置也沒有設置,則使用系統配置的 "系統名字"。 122 | 123 | 124 | 125 | ### 3 git pull和fetch 更改預設的方式為merge 126 | > [!IMPORTANT] 127 | > 預設其實就是merge,但使用vscode工具時,在下載更新時,時常遇到此**_提示訊息_**,所以使用vscode最好加上這一行設定 128 | 129 | ```bash 130 | $ git config pull.rebase false 131 | ``` 132 | 133 | #### 3.1 檢查當前的 pull.rebase 設定 134 | 135 | ```base 136 | $ git config --get pull.rebase 137 | ``` 138 | 139 | #### 3.2 設定 git config pull.rebase false 的原因是告訴 Git 在執行 git pull 時,不要使用 rebase 的方式來合併從遠端倉庫拉取的變更。具體來說,這個設定會讓 git pull 使用默認的 merge 策略而不是 rebase 策略。 140 | 141 | #### 3.3 什麼是 `git pull`? 142 | git pull 是一個常用的命令,用來從遠端倉庫拉取最新的更改並將它們合併到本地分支中。它實際上是 git fetch 和 git merge 的組合。 143 | 144 | #### 4.0 git 設定default branch name 145 | 146 | ``` 147 | git config --global init.defaultBranch main 148 | ``` 149 | 150 | - ### 查看使用者環境設定 151 | 152 | ``` 153 | $ git config --list 154 | 155 | diff.astextplain.textconv=astextplain 156 | filter.lfs.clean=git-lfs clean -- %f 157 | filter.lfs.smudge=git-lfs smudge -- %f 158 | filter.lfs.process=git-lfs filter-process 159 | filter.lfs.required=true 160 | http.sslbackend=openssl 161 | http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt 162 | core.autocrlf=true 163 | core.fscache=true 164 | core.symlinks=false 165 | pull.rebase=false 166 | credential.helper=manager-core 167 | credential.https://dev.azure.com.usehttppath=true 168 | init.defaultbranch=master 169 | filter.lfs.clean=git-lfs clean -- %f 170 | filter.lfs.smudge=git-lfs smudge -- %f 171 | filter.lfs.process=git-lfs filter-process 172 | filter.lfs.required=true 173 | user.name=roberthsu2003@gmail.com 174 | user.email=roberthsu2003@gmail.com 175 | ``` 176 | 177 | ## 常用命令列 178 | 179 | ``` 180 | #使用者目錄(/home/pi) 181 | pi@raspberrypi:$ ~ 182 | ``` 183 | 184 | ``` 185 | #查看當前所在目錄(print working directory) 186 | pi@raspberrypi: ~ $ pwd 187 | /home/pi 188 | ``` 189 | 190 | ``` 191 | #回到上層目錄 192 | $ cd .. 193 | $ pwd 194 | /home 195 | ``` 196 | 197 | ``` 198 | #絕對路徑(/xxxx/xxxxx/xxxx) 199 | #相對路徑(./xxxx/xxxx/xxx) 200 | ``` 201 | 202 | ``` 203 | #回到電腦根目錄 204 | $ cd / 205 | $ pwd 206 | / 207 | ``` 208 | 209 | ``` 210 | #回到使用者目錄 211 | $ cd ~ 212 | ``` 213 | 214 | 215 | ``` 216 | #檢查目前目錄內容 217 | $ ls 218 | $ ls -l 219 | $ ls -al 220 | ``` 221 | 222 | ### 複製檔案或資料夾 223 | ``` 224 | #建立文字檔 225 | $ echo "hello" > myfile.txt 226 | $ ls 227 | myfile.txt 228 | 229 | #複製文字檔 230 | $ cp myfile.txt myfile2.txt 231 | $ ls 232 | myfile.txt myfile2.txt 233 | 234 | #複製文字檔至別的目錄 235 | $ cp myfile.txt /tmp 236 | 237 | #複製整個目錄和內容 238 | $ cp -r mydirectory mydirectory2 239 | ``` 240 | 241 | 242 | 243 | ### 重新命名檔案名稱或資料夾名稱 244 | 245 | ``` 246 | $ mv my_file.txt my_file.rtf 247 | ``` 248 | 249 | ### 檢視檔案內容 250 | 251 | ``` 252 | $ cat myfile.txt 253 | $ more myfile.txt 254 | $ less myfile.txt 255 | ``` 256 | 257 | ### 建立編輯檔案 258 | 259 | ``` 260 | $ touch my_file.txt 261 | $ nano my_file.txt 262 | ``` 263 | ![](images/pic2.png) 264 | 265 | ### 建立目錄 266 | 267 | ``` 268 | $ cd ~ 269 | $ mkdir my_directory 270 | $ cd my_directory 271 | $ ls 272 | ``` 273 | 274 | ### 刪除檔案或目錄 275 | 276 | ``` 277 | # 刪除檔案 278 | $ cd ~ 279 | $ rm my_file.txt 280 | $ ls 281 | 282 | # 刪除同檔名但不同副檔名的檔案 283 | $ rm my_file.* 284 | 285 | # 刪除所有檔案 286 | $ rm * 287 | 288 | # 刪除目錄和內容 289 | $ rm -r mydir 290 | ``` 291 | 292 | ### 了解檔案權限 293 | 294 | ![](./images/pic3.png) 295 | 296 | ### 改變檔案權限 297 | 298 | ``` 299 | $ chmod u+x file2.txt 300 | # u 代表user 301 | # g 代表group 302 | # o 代表other 303 | 304 | # + 代表增加權限 305 | # - 代表移除權限 306 | 307 | # x 代表可執行的權利 308 | 309 | ``` 310 | 311 | ### Vim基本操作 312 | 313 | Vim 主要是使用模式的切換來進行輸入、移動游標、選取、複製及貼上等操作。在 Vim 主要常用的有幾個模式:Normal 模式以及 Insert 模式: 314 | 315 | ![](./images/pic1.png) 316 | 317 | 1. Normal模式,又稱命令模式,在這個模式下,無法輸入文字,僅能進行複製、貼上、存 檔或離開動作。 318 | 2. 要開始輸入文字,需要先按下 i 、 a 或 o 這三個鍵其中一個進入 Insert 模式,便能 開始打字。其中, i 表示 insert , a 表示 append ,而 o 則是表示會新增一行並開 始輸入。 319 | 3. 在 Insert 模式下,按下 ESC 鍵或是 Ctrl + [ 組合鍵,可退回至 Normal 模式。 320 | 4. 在 Normal 模式下,按下 :w 會進行存檔,按下 :q 會關閉這個檔案(但若未存檔會提 321 | 示先存檔再離開),而 :wq 則是存檔完成後直接關閉這個檔案。 322 | 323 | 5. 在一般模式下,按下shift + v,進入virtual line 模式(選取整行),可使用方向鍵,選取多行, 按下d可以刪除整行 324 | 325 | 326 | 327 | 328 | 329 | -------------------------------------------------------------------------------- /環境安裝與設定/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/環境安裝與設定/images/pic1.png -------------------------------------------------------------------------------- /環境安裝與設定/images/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/環境安裝與設定/images/pic3.png -------------------------------------------------------------------------------- /課程/README.md: -------------------------------------------------------------------------------- 1 | ## 環境安裝 2 | - git安裝 3 | - vscode安裝 4 | - github desktop 5 | - github cli 6 | - python虛擬環境venv,mini-conda 7 | ## linux基本檔案處理指令 8 | ## 樹莓派環境安裝 9 | ## 連線Github 10 | ## 善用AI 11 | - chatGPT 12 | - gemini 13 | 1. 使用網址列直接呼叫gemini 14 | 2. 使用@prompt 15 | 3. 使用查證功能(不要有幻聽) 16 | 4. 輸入網址,找尋重點 17 | - perplexity 18 | - gork 19 | - claude 20 | - notebookLM 21 | 22 | ## 文案主題 23 | - **MarkDown語法** 24 | - **運動環保_AI** 25 | - **旅遊減碳** 26 | - **高雄碼頭發展史** 27 | - 請將上面資料轉成表格😍 28 | - **台灣近代史_AI** 29 | - **台灣北,中,南旅遊景點_AI** 30 | - **python基本語法** 31 | 32 | ## 台中旅遊減碳prompt 33 | - 請創作出一份台中旅遊減碳電子書的文字內容,範圍為5頁,每頁要有標題,每頁字數50字以內,請給我2個版本 34 | - 把每頁增加到100字 35 | - 上面的內容,請增加趣味性,讓讀都感到好玩。 36 | - 請畫一張旅遊減碳的風景圖做為書刊封面。請給我兩個版本 37 | -------------------------------------------------------------------------------- /開始使用Git/README.md: -------------------------------------------------------------------------------- 1 | # 開始使用Git 2 | 3 | ## git是什麼? 4 | 5 | ![](./images/pic1.png) 6 | 7 | 就是在專案開始到結束時, 建立非常多的記錄點(commit),在開發的過程中,我們可以在記錄點上遊走,說簡單點就是我們可以回到記錄點被建立當下的專案檔案的狀態。 8 | 9 | ## 建立記錄點有什麼好處呢? 10 | 11 | ### 1. 當專案測試新功能時,發現程式不對,可以回到測試前的記錄點,重新開始 12 | ### 2. 不怕專案不小心被刪了 13 | ### 3. 可以多人同時開發相同專案 14 | ### 4. 可以記錄每一個檔案是誰修改的,時間點,改了那些東西,簡單的註記說明 15 | ### 5. 可以保存在git server(github) 16 | 17 | ## 使用 「GUI介面」 還是「Command line」介面較好? 18 | 19 | 不會command line介面,基本上就不會使用GUI介面。GUI介面只是一個方便檢視(view)功能,不建議使用GUI操作功能 20 | 21 | ## Git好學嗎? 22 | 好學,難熟練。學20%功能,就可以使用80%功能。所以初學者一開始不要鑽牛角尖。 23 | 24 | ## 開始將專案交給git管理 25 | #### - 建立一個資料夾,這資料夾將是我們的專案 26 | #### - 將資料夾交給git管理 27 | 28 | ``` 29 | $ cd ~/Documents #進入文件資料夾 30 | $ mkdir markdownLag #建立markdownLag 31 | $ cd markdownLag #進入markdownLag資料夾 32 | $ git init #初始化git, 將資料夾交給git管理 33 | ``` 34 | 35 | #### 檢查markdownLag資料夾內的檔案內容: 36 | 37 | 38 | ``` 39 | $ ls -al 40 | 41 | --------------- 42 | drwxr-xr-x 3 roberthsu2003 staff 96 11 29 11:26 . 43 | drwx------+ 19 roberthsu2003 staff 608 11 29 11:25 .. 44 | drwxr-xr-x 9 roberthsu2003 staff 288 11 29 11:26 .git 45 | ``` 46 | 47 | 以上資料夾建立了一個隱藏檔「.git 」,未來所有的git資訊將儲存於.git內,也代表此資料夾目前已經被git管理。 48 | 49 | 下方為您可以想像的圖像: 50 | 51 | - 工作區(就是在這資料內的檔案和目錄),目前是空的 52 | - 暫存區(要將檔案加入至記錄區時,必需先加入至暫存區) 53 | - 記錄區(記錄當時工作區的狀態) 54 | 55 | ![](./images/pic3.png) 56 | 57 | --- 58 | 59 | ## 取消git的管理(直接刪除.git) 60 | 61 | ``` 62 | $ rm -rf .git 63 | ``` 64 | 65 | ## 建立不初git管理的檔案清單(.gitignore) 66 | 67 | ``` 68 | $ touch .gitignore 69 | ``` 70 | 71 | ### .gitignore內容 72 | 73 | ``` 74 | .DS_Store 75 | __pycache__ 76 | .env 77 | .enve 78 | *.pyc 79 | ``` 80 | 81 | 82 | ## 新增1個檔案,並交由git管理 83 | 84 | ``` 85 | $ touch index.txt #建立一個index.txt檔 86 | ``` 87 | 88 | 89 | 90 | --- 91 | 92 | ``` 93 | $ git status 94 | 95 | ------------- 96 | On branch main 97 | 98 | No commits yet 99 | 100 | Untracked files: 101 | (use "git add ..." to include in what will be committed) 102 | index.txt 103 | 104 | ``` 105 | 106 | 代表說明index.txt是新建立的檔案尚未被追蹤 107 | 108 | ![touch index.txt](./images/pic4.png) 109 | 110 | --- 111 | 112 | ``` 113 | $ git add index.txt #git開始追蹤index.txt檔 114 | ``` 115 | 116 | --- 117 | 118 | ``` 119 | $ git status 120 | 121 | -------------------- 122 | On branch main 123 | 124 | No commits yet 125 | 126 | Changes to be committed: 127 | (use "git rm --cached ..." to unstage) 128 | new file: index.txt 129 | 130 | ``` 131 | 132 | 代表index.txt已經被追蹤,等待被加入記錄區 133 | 134 | ![](./images/pic5.png) 135 | 136 | --- 137 | 138 | #### 修改index.txt的內容 139 | 140 | ``` 141 | $ vim index.txt #:wq存檔並離開 142 | 143 | ----------------------------- 144 | 145 | markdown語法介紹 146 | ~ 147 | ~ 148 | ~ 149 | ~ 150 | ~ 151 | ~ 152 | ~ 153 | ~ 154 | ~ 155 | ~ 156 | ~ 157 | 158 | ``` 159 | 160 | --- 161 | 162 | #### 檢查目前git狀態 163 | 164 | ``` 165 | $ git status 166 | 167 | --------------------- 168 | Changes to be committed: 169 | (use "git rm --cached ..." to unstage) 170 | new file: index.txt 171 | 172 | Changes not staged for commit: 173 | (use "git add ..." to update what will be committed) 174 | (use "git restore ..." to discard changes in working directory) 175 | modified: index.txt 176 | 177 | ``` 178 | 179 | 1. 暫存區內有記錄新增了一個檔 180 | 2. 工作區內的index.txt已經被編輯,尚未加入至暫存區內 181 | 182 | ![](./images/pic6.png) 183 | 184 | --- 185 | 186 | #### 將編輯的狀態加入暫存區,並檢目前狀態 187 | 188 | ``` 189 | $ git add --all #代表將工作區內所有有改變的檔案,加入至暫存區 190 | $ git status 191 | 192 | ------------------------- 193 | On branch main 194 | 195 | No commits yet 196 | 197 | Changes to be committed: 198 | (use "git rm --cached ..." to unstage) 199 | new file: index.txt 200 | 201 | ``` 202 | 203 | 1. 暫存區內有記錄index.txt編輯的狀態 204 | 2. 工作區內內目前沒有任何變化 205 | 206 | ![](./images/pic7.png) 207 | --- 208 | 209 | #### 將目前的暫存區建立記錄點並加入至記錄區內,並檢目前狀態和log 210 | 211 | ``` 212 | $ git commit -m "建立新檔index.txt和編輯了內容" 213 | ------------ 214 | [main (root-commit) da39e43] 建立新檔index.txt和編輯了內容 215 | 1 file changed, 1 insertion(+) 216 | create mode 100644 index.txt 217 | 218 | 219 | $ git status 220 | ------------------- 221 | On branch main 222 | nothing to commit, working tree clean 223 | 224 | $ git log 225 | -------------------------- 226 | commit da39e43531f32e40b373deec447f4626520bbe03 (HEAD -> main) 227 | Author: roberthsu2003 228 | Date: Mon Nov 29 13:07:32 2021 +0800 229 | 230 | 建立新檔index.txt和編輯了內容 231 | 232 | 233 | ``` 234 | 235 | 1. 代表建立在記錄區內的第一個記錄點,識別碼前面的7個字元是「da39e43」,記錄點的註解是"建立新檔index.txt和編輯了內容" 236 | 237 | 2. 目前工作區沒有任何改變,暫存區沒有任何暫存 238 | 239 | 3. 說明如下圖: 240 | 241 | ![](./images/pic8.png) 242 | 243 | 244 | ![](./images/pic9.png) 245 | 246 | #### 在source tree出現的畫面 247 | 248 | ![](./images/pic10.png) 249 | 250 | 251 | 252 | 253 | 254 | -------------------------------------------------------------------------------- /開始使用Git/images/pic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic1.png -------------------------------------------------------------------------------- /開始使用Git/images/pic10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic10.png -------------------------------------------------------------------------------- /開始使用Git/images/pic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic3.png -------------------------------------------------------------------------------- /開始使用Git/images/pic4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic4.png -------------------------------------------------------------------------------- /開始使用Git/images/pic5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic5.png -------------------------------------------------------------------------------- /開始使用Git/images/pic6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic6.png -------------------------------------------------------------------------------- /開始使用Git/images/pic7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic7.png -------------------------------------------------------------------------------- /開始使用Git/images/pic8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic8.png -------------------------------------------------------------------------------- /開始使用Git/images/pic9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roberthsu2003/git/d4fdb0c60b0489492101331e4b82db8de3557c4b/開始使用Git/images/pic9.png --------------------------------------------------------------------------------