# Git筆記 ## Git指令 | 功能 | Code | | ------ | ----------- | | 使用者:名稱 | `git config --global user.name "Stella-X"` | | 使用者:信箱 | `git config --global user.email "xxx@gmail.com"` | | config清單 | `git config --list` | | 將指令自定縮寫 | `git config --global alias.xx xxxxxxxxx` | | 初始化這個目錄,<br>讓 Git 對這個目錄開始進行版控 | `git init` | | 將檔案加至暫存區(Staging Area) | `git add <檔案名>` ex.`xxx.html`、`*.html`、`--all`| | 把暫存區的內容移至儲存庫<br>(Repository)。| `git commit -m "message"` | | 省略add步驟,直接commit<br>(限已在Repository之內容) | `git commit -a -m "content"` <br>對新加入的檔案(也就是 Untracked file)是無效的。 | |複製整份專案,用於第一次佈置專案資料夾|`git clone <HTTPS or SSH>`| |設定專案連接之remote(GitHub專案)位置|`git remote add <設定HTTPS or SSH代名詞,預設origin> <HTTPS or SSH>`| |更新專案內容為GitHub上最新版的內容|`git fetch`| |`git pull` = `git fetch` + `git merge`|`git pull`| |先拉(Github上的版本合併後)再推(上Github),用於**多人開發衝突**狀況|`git pull --rebase` | |PUSH至Github|`git push <remote代名詞> <分支名>`| |強制PUSH(覆蓋)Github上的版本|`git push -f`| |查看所有分支|`git branch`| |新增分支|`git branch <分支名>`| |切換分支|`git checkout <分支名>`| |合併<分支名>到目前分支|`git merge <分支名>`| |修改分支名|` git branch -m <改前分支名> <改後分支名>`| |刪除分支|`git branch -d <分支名>`| |強制刪除未合併的分支|`git branch -D <分支名>`| ## Git流程 (Git flow) **定義開發流程的分支名**,主要的分支有 `master`、`develop`、`hotfix`、`release` 、 `feature` 這五種分支,各種分支負責不同的功能。其中 Master 以及 Develop 這兩個分支又被稱做長期分支,因為他們會一直存活在整個 Git Flow 裡,而其它的分支大多會因任務結束而被刪除。 ![](https://i.imgur.com/G2Gwlfw.png) [分支說明](https://gitbook.tw/chapters/gitflow/why-need-git-flow.html) ## 常用命令列指令 <table> <thead> <tr> <th>Windows</th> <th>MacOS / Linux</th> <th style="text-align: left">說明</th> </tr> </thead> <tbody> <tr> <td>cd</td> <td>cd</td> <td style="text-align: left">切換目錄</td> </tr> <tr> <td>cd</td> <td>pwd</td> <td style="text-align: left">取得目前所在的位置</td> </tr> <tr> <td>dir</td> <td>ls</td> <td style="text-align: left">列出目前的檔案列表</td> </tr> <tr> <td>mkdir</td> <td>mkdir</td> <td style="text-align: left">建立新的目錄</td> </tr> <tr> <td>無</td> <td>touch</td> <td style="text-align: left">建立檔案</td> </tr> <tr> <td>copy</td> <td>cp</td> <td style="text-align: left">複製檔案</td> </tr> <tr> <td>move</td> <td>mv</td> <td style="text-align: left">移動檔案</td> </tr> <tr> <td>del</td> <td>rm</td> <td style="text-align: left">刪除檔案</td> </tr> <tr> <td>cls</td> <td>clear</td> <td style="text-align: left">清除畫面上的內容</td> </tr> </tbody> </table> ## 檔案操作指令 * cd * `cd ..`目錄往上一層 * `cd /xxx`切換至xxx目錄 * `cd xxx`切換至當前目錄內之xxx子目錄 * cp * `cp index.html about.html`把檔案 index.html 複製一份成 about.html * mv * `mv index.html info.html`把檔案 index.html 更名成 info.html * rm * `rm *.html`刪除在這個目錄裡所有的 html 檔 ## 新增 SSH Key 至GitHub ### 設定 ssh 金鑰 :::info   在我們正式上傳到 github 以前,我們需要先設定 ssh 金鑰。為什麼要設定這個金鑰呢?這是為了讓 github 知道,拿著這個金鑰的操作者是屬於那一個帳號,以賦予上傳等等的權限。如果是第一次使用 ssh key,會需要先產生 ssh 的金鑰,在 Bash 輸入以下指令以產生金鑰 ::: ``` $ ssh-keygen # 產生金鑰 Generating public/private rsa key pair. Enter file in which to save the key (/home/jaycelin/.ssh/id_rsa): # 金鑰存放路徑,直接按 Enter Created directory '/home/jaycelin/.ssh'. Enter passphrase (empty for no passphrase): # 密碼,可設定可不設定,設定的話每次上傳會多需要輸入一次密碼 Enter same passphrase again: # 再輸入一次密碼 The key fingerprint is: # 之後會顯示你的 fingerprint,到這裡就完成 key 的產生了 ``` 金鑰生成以後會放在剛剛前面的金鑰存放路徑,我們要複製 id_rsa.pub 的內容到 github,可以使用 cat 的讀檔指令: ``` $ cat /home/jaycelin/.ssh/id_rsa.pub # 讀取檔案內容 ssh-rsa ~一連串金鑰~ jaycelin@HOME-PC # 從 ssh-rsa 複製到 username@pc-name ``` 接著到 github 的設定頁面將剛剛複製的金鑰輸入進去,參考下圖流程 ![](https://blog.jaycetyle.com/images/2018/02/github-settings.png) ![](https://blog.jaycetyle.com/images/2018/02/github-new-sshkey.png) ![](https://blog.jaycetyle.com/images/2018/02/github-enter-sshkey.png) 輸入完畢後就完成金鑰設定了。對於不同的 git server,例如 bitbucket 或 gitlab 等等,流程都是類似的,只是匯入金鑰的網頁介面稍有不同而已,重點就是要將 id_rsa.pub 的內容提供給伺服器。 參考網頁:https://blog.jaycetyle.com/2018/02/github-ssh/ ## VIM編輯器 https://gitbook.tw/chapters/command-line/vim-introduction.html --- 參考網頁:https://gitbook.tw