# 什麼是 Git ,什麼是版本控制? 可以想像成,建立新資料夾(但還是有差別),備份你所有修改過的檔案,可以輕鬆找到舊版本 * 好處和用途: 一個人的版本控制:可以讓你輕易的存取和備份 團隊的版本控制:如果版本太多可以避免搞混 ## Git vs Github Git 版本控制的程式 Github 放 Git repository 的地方 ## Git:幫你做版本控制的程式 1. 需要新版本:開一個資料夾 2. 不想加入版本控制:不要加入資料夾 3. 避免版本號衝出:用看似亂數的東西當作資料夾名稱 4. 知道最新版本:用一個檔案來存 ## Git 指令 * $ git init - 初始化 -rm -r .git(刪除 git ) * $ git status - 查看狀況(看檔案是否有加入資料夾) * $ git add - 把還沒追蹤的檔案加入版本控制,$ git add . -把全部檔案加入追蹤 $git rm --cached '檔案名稱' 可以把檔案取消追蹤 * $ git commit - m '敘述' - 新的版本 (可以把一個 commit 想成一個資料夾) * $ git log - 歷史紀錄,$ git log --oneline - 顯示比較短的代碼 * $ git checkout + '版本號'- 回到之前版本 or + 'branch name' or -b 'branch name' -直接切換過去 * .gitignore - 可以把不想要被加入版本控制的檔案放進去, git 就不會進行追蹤 * $ git diff - 可以看出新版本和舊版本差異 * $ git branch + '名稱' - 新增 branch, -v 查看 所有 branch , -d 刪除 branch * $ git merge + 'branch 名稱' - 把分支合併進來 >Tips:把 add + commit = git commit -am '檔案名稱',但是如果是新的檔案則不會加入暫存區 # 從零開始用 Git 1. $git init (先讓資料夾被 git 版本控制) 2. 建立 .gitignore 忽略不要的檔案可以想像成這檔案會被排除在資料夾外 3. $git add . 把全部檔案加入版本控制(可以把東西放進資料夾內) 4. $git -commit -m or -am (推薦) 新增一個新的版本(可以想像建立一個新資料夾,把東西放進去) 5. 成功放入暫存區 ## 如何回到舊版(切換資料夾) 如果回到舊版本,首先: 1. $ git log 查詢版本號 2. $ git checkout + '版本號' 4. 完成 > 如果需要切換回原版本 $ git checkout master - 回到現在版本 ## 為什麼需要 branch (分支) 我們需要其他的 branch 做其他的事 如一條 branch 可以 bug fix,一條做新功能開發 P.S. 做任何新的作業時,要養成開一個新的 branch 的好習慣 ## 如果 branch(分支)有衝突的話 需要手動去修改衝突,決定是否要留下或是刪除,修改完後 commit # Github的基本功能 * 創建倉庫 * Push code * Pull request * Clone files ## 如果沒有倉庫 1. 先建立倉庫 $ git init 2. $ git add README.md (可以用別的檔案) 3. $ git commit -m 'first commit' 4. $ git remote add origin(可改名稱) ' github 倉庫網址' 5. $ git push -u origin master(github 上的 master) ## 如果有倉庫 1. $ git romote add origin(可改名稱) ' github 倉庫網址' 2. $ git push -u origin master(github上的 master) ## 如何上傳一個新的 branch? 1. 在本地創建一個新的 branch 2. Checkout 到新的 branch 3. $ git push origin 'branch 名稱' ## 如何從你的倉庫下載最新的檔案? 1. $ git pull origin master ## 如何從別人的倉庫下載檔案? 1. $ git clone + 'github 提供的網址' P.S. 因為是別人的倉庫,如果本身沒有權限是無法做 push 的動作,如果需要修改,可以使用 fork 之後做修改和 push # Git 狀況劇 ## Commit 錯字如何修改 * 輸入 $ git commit --amend 即可修改 P.S 如果已經 push 就沒救了,所以在 push 前最好多檢查一次 ## 我已經 commit 了 但是我又不想了 * $ git reset HEAD^ -- hard or --soft (回到上一個 commit 的狀態) * $ git reset HEAD^ -- hard (當作完全不存在) * $ git reset HEAD^ -- soft (檔案還是會在) P.S. 如果沒有輸入 hard or soft 預設值會是 --mixed (變成 Modifiedor Untracked ,內容一樣是新版本) 參考資料:[Git reset 的三種模式( soft mixed hard )比較](https://ithelp.ithome.com.tw/articles/10187303) ## 我不想要檔案了(如何回覆到原始狀況) * $ git checkout -- '檔案名稱' P.S. 如果 -- '.' ,把所有改過卻還沒 commit 的檔案 回到原始狀況 ## 修改 branch 名稱 * $ git branch -m '新的 branch 名稱' ## 把遠端 branch 抓下來 * $ git checkout ('遠端 branch 名稱') P.S 有些舊版本也許不行 ## 什麼是 Hook? * 發生事情的時後的通知