# [GIT101] Git 超新手入門(筆記) ###### tags:`Lidemy學院` `[GIT101] Git 超新手入門` ## 在開始學習 Git 前的預備知識 ### 什麼是版本控制? 說穿了其實大家都曾經做過版本控制,因為改了檔案之後想要保存上一次的歷史紀錄嘛 例如說:report.doc, report2.doc, report_final.doc, report_finalfinal.doc..... 其實這樣子就是版本控制了,但是會碰到哪些問題? 1. 多人協作有困難 2. 檔案多了、時間久了以後很難管理 所以你需要一套專門來做版本控制的軟體,沒錯,就是 Git! * 甚麼是版本控制 * 為甚麼要學版本控制 版本控制可以分一人或多人,基本上我們希望,將每一個檔案不同的版本,都保存下來。 多人(團隊)版本控制,就會需要一個穩定版的版本,將他放在遠端,個人的檔案會在本地端,這樣遠端有一個穩定版,個人本地端,有個人去撰寫程式,程式完成在放到遠端,供他人使用。 ==Git : 就是幫忙做版本控制的程式== ___ ### 如何安裝 Git - Windows 在 Windows 上面要安裝 Git 很簡單,只要去官網上面下載即可 [git下載](https://git-scm.com/) 右邊 Downloads 點下去,一直下一步就好了 安裝完以後可以在 git-bash 試著輸入:git --version 並且按 enter,看有沒有印出什麼訊息就知道是否成功了! ### 如何安裝 Git - Mac 在 Mac 底下的話請你打開 Terminal(右上角搜尋的按鈕按下去,輸入 terminal 就找得到了),並且輸入 git --version,按下 enter。 如果你的 MacOS 版本是 10.9 以上,就會自動跳出視窗指引你去安裝,或是你也可以參考 Git 官網的教學,直接下載安裝檔。 ___ ## 看穿 Git 的把戲 ### 其實都一樣啦:從資料夾到 Git 這一個單元是讓你輕鬆理解 Git 的最好機會,你千萬不要把 Git 想成是什麼超級困難的軟體,絕對不是,它其實是很直覺的,你會覺得困難是因為你對那些指令不熟悉,以及你以為 Git 帶來一些新的概念。 不是的,其實那些概念你早就知道了,只是你沒有注意過而已。 這一個單元會從「自己來做版本控制」開始,一步步推導出一個版本控制應該要有哪些功能,只要你能理解我們這個單元在做的事情,你之後一定能搞懂 Git! ==先自己思考,怎麼做版本控制== 總結: 1. 需要新版本 : 開一個資料夾 2. 不想加入版本控制 : 不要加入資料夾 3. 避免版本號衝突 : 用看似亂碼的東西當作資料夾名稱 4. 知道最新版本 : 用一個檔案來存 ==其實Git就是做這些事== ___ ### 一元復始:git init 講完了 Git 的運作模式以後,終於要進入到實際的操作了,這一個單元要介紹的是最簡單的指令:git init。 ``` //git 初始化 git init ``` ___ ### 你還好嗎:git status ``` //版本控制的狀態 git status ``` ___ ### 選我選我選我:git add * untracked : 不加入 * staged : 加入版本控管 ``` //決定是否加入版本控制 git add <file> //回到上一個狀態 git rm --cached <file> //全部加入檔案版本控制 git add . ``` ___ ### 把你寫進我的故事裡:git commit ``` //新建一個版本,會進入vim視窗,編輯敘述 git commit //新建一個版本,並加入敘述 git commit -m"敘述" //加入版本控制跟新建一個版本 git commit -am"敘述" ``` ___ ### 歷史紀錄一目了然:git log ``` //看commitID跟歷史紀錄... git log //簡短的歷史紀錄 git log --oneline ``` ___ ### 想回到過去:git checkout ``` //回到某一個版本 git checkout <版本號> //回到 master 這個 branch 的最新版本 git checkout master ``` ___ ### 不重要的邊緣人:.gitignore * .gitignore裡加的檔案名稱後,要Enter多留一行空行,用git status看時才會被忽略掉 ``` //要忽略的檔案 .gitignore ``` ___ ### Git 基本指令複習 ``` //第零步 git init //第一步-建立.gitignore忽略不要的檔案 touch .gitignore //第二步-將所有檔案加入版本管理 git add . //第三步-建立第一個commit git commit -am"init" ``` ``` //專案建立後: //假設1:有新檔案 //記得將檔案加入版本管理 git add . //想要一個新版本 git commit -am"msg" ``` ``` //模擬git 1.加入版本控制(git add) => 把東西放入temp資料夾 2.新建版本(git commit) => 把temp資料夾複製改名為版本名稱 3.切換版本(git checkout) => 去到某一個資料夾底下 ``` ___ ## Git 的平行時空:branch ### 為什麼我們需要 branch? git 重要的2個觀念 * commit * branch **為甚麼需要branch**(分支) : 是為了將修改記錄的整體流程分開儲存,讓分開的分支不受其他分支的影響,所以在同一個數據庫裡可以同時進行多個不同的修改。 分開的分支還是可以和其他分支合併的。 >[分支 (branch)](https://backlog.com/git-tutorial/tw/stepup/stepup1_1.html) ___ ### 一眼看穿 branch **來思考該怎麼實作branch** 假設 : 用資料夾去模擬,有兩條branch,main跟new-feature,開發後,commit進度都不同,思考如何開發與merge等等問題。 ___ ### 給我一個新的宇宙:git branch ``` //建立分支 git branch <branch-name> //查看有甚麼分支 git branch -v //刪除分支 git branch -d <branch-name> ``` ___ ### 跨越宇宙:git checkout ``` //切換分支 git checkout <branch> ``` ___ ### 當兩個宇宙合併:git merge ``` //合併分支 git merge <branch> ``` ___ ### 當世界崩塌:conflict 當merge後,遇到conflict(衝突)要怎辦,到需要修改的檔案,修改程式,為合併後,須保存的程式。 1. 保留要保存的程式 2. `git commit -am"msg"` 3. 如本地跟遠端conflict,在將本地跟遠端同步`git push origin main` ___ ## GitHub:全球最大工程師交友平台 ### 我跟 Git 到底什麼關係? Git : 版本控制的程式 GitHub : 放 Git repository 的地方(其實還有很多功能) ___ ### GitHub 導覽:視覺化的 repository branch : 有機個branch commits : 有機個commit commitsID : 可以看這commit改了甚麼 點個別檔案 : 可以看檔案內容,點blame,分別哪一行是誰修改的,可以知道是誰修改的 new pull request : 可以在GitHub做merge,給檔案建議,審核 lssues : 問題討論區 contributor : 看有誰跟你協作專案 files changed : 可以看檔案改了甚麼,可以幫助審核程式 ___ ### 如何把 code 放上 GitHub 到[GitHub](https://github.com/),new repository,git101_test,做練習,將本地端的檔案,放到GitHub的repository。 ``` git remote add origin https://github.com/tonytoolsn/git101_test.git git branch -M main git push -u origin main ``` [GitHub以Main取代Master作為新Git儲存庫預設名稱](https://www.ithome.com.tw/news/140094) ___ ### 我就是潮流:git push ``` //將本地最新改變放到GitHub git push origin main //如將新分支,放置GitHub git push origin <branch> ``` ___ ### 跟隨潮流:git pull ``` //將GitHub最新改變抓下來 git pull origin <branch> ``` ___ ### 抓到你了:git clone * Fork : 能將他人公開專案,複製到自己的github下 ``` //到github的專案下,複製https或ssh git clone <https://...> ``` ___ ### GitHub 整合實戰 ``` //第一步-github開新的repository //第二步-將資料push上,github //第三步-如github上有新資料,就pull //第四步-如將本地分支程式push上github,可以使用github的pull request,進行git merge ``` ___ ### 免費的網頁空間:GitHub Pages 1. GitHub任一repository,點setting 2. 到GitHub Pages,假設放在master branch上,save 3. GitHub會給一個網址,點入網址,並在網址後輸入檔案名稱,能看到網頁 ___ ### 工程師之間的協作:GitHub Flow GitHub Flow : GitHub建議的開發流程 1. 開新branch : `git branch <branch>` 2. 切到新branch : `git checkout <branch>` 3. 將檔案做改動後 : `git commit -am"msg"` 4. push上GitHub : `git push origin <branch>` 5. GitHub上 : 點caeate pull request操作,可以指定誰review你的程式碼 6. GitHub上 : 點files change,可以看程式改動,或加入留言 7. GitHub上 : 確定程式修改完後,可以點review change,的Approve 8. GitHub上 : 點merge pull request,並點delete branch,刪除分支 9. 本地端回到master : `git checkout master` 10. 同步下來 : `git pull origin master` 11. 刪除本地端的branch : `git branch -d <branch>` >[GitHub Flow](https://guides.github.com/introduction/flow/) >[讓我們來了解 GitHub Flow 吧!](https://medium.com/@trylovetom/%E8%AE%93%E6%88%91%E5%80%91%E4%BE%86%E4%BA%86%E8%A7%A3-github-flow-%E5%90%A7-4144caf1f1bf) >[三種版控流程](https://medium.com/@lf2lf2111/%E4%B8%89%E7%A8%AE%E7%89%88%E6%8E%A7%E6%B5%81%E7%A8%8B-29c82f5d4469) ___ ### GitHub 的死對頭們:GitLab 與 Bitbucket >[GitLab](https://gitlab.com/gitlab-org/gitlab) >[GitLab維基百科](https://zh.wikipedia.org/wiki/GitLab) >[Bitbucket](https://bitbucket.org/) >[Bitbucket維基百科](https://zh.wikipedia.org/wiki/Bitbucket) ___ ## Git 狀況劇 ### 我 commit 了但是想改 commit message ``` //改 commit message git commit --amend ``` ___ ### 我 commit 了可是我又不想 commit 了 ``` //不會保留改動後的狀態,回到 commit 前一步。 git reset HEAD^ --hard //會保留改動後的狀態,回到 commit 前一步。 git reset HEAD^ --soft //會保留改動後的狀態,回到 commit 前一步, git reset HEAD^ --mixed 但是檔案是 Untracked 或 Modified,mixed預設可省略。 ``` [Git reset 的三種模式( soft mixed hard )比較](https://ithelp.ithome.com.tw/articles/10187303) ___ ### 我還沒 commit,但我改的東西我不想要了 ``` //回到上一個commit的狀態 git checkout --<file> //或 git restore <file> ``` ___ ### 我想改 branch 的名字 ``` //改branch的名稱 git branch -m <branch> ``` ___ ### 想摘下遠端的 branch 給你 ``` //遠端的branch存到本地端 git checkout <遠端的branch> ``` ___ ## 客製化各個階段:Git hook ### hook 是什麼? 在程式裡的意思指,發生某事的時候通知我 例如: 1. 有人commit,通知我 2. 有人push,通知我,等等 ___ ### Git hook 簡介加簡單示範 常用在檢查commit前或push前,有甚麼資訊不能保存等等 ``` cd .git/ cd hooks/ //去設計些hook,使用 例如: //新增pre-commit檔案 //輸入 echo "輸入錯誤..." //輸出訊息 #if(){}... //條件判斷 exit 0 //通過,1為不通過 ``` ___ ## 使用者設定 要開始使用 Git,首先要做的第一件事(應該也只要做一次就好),就是設定使用者的 Email 信箱以及使用者名稱。請打開你的終端機視窗,輸入下面這兩行指令: ``` $ git config --global user.name "Eddie Kao" $ git config --global user.email "eddie@5xruby.tw" ``` 輸入完成之後,可以再檢視一下目前的設定: ``` $ git config --list user.name=Eddie Kao user.email=eddie@5xruby.tw ``` [使用者設定 - git](https://gitbook.tw/chapters/config/user-config) ___ ## 總結 了解commit跟branch的觀念,如何解決conflict,git與github是甚麼,如何push跟pull,開發時需要注意甚麼跟流程等等,還有許多git指令須學習,但等有需要再查詢即可。 >[為你自己學 Git](https://gitbook.tw/) >[Git教學](https://backlog.com/git-tutorial/tw/contents/) [為你自己學 Git](https://gitbook.tw/) ___ ## 如何上傳到,github。 1.new repository  2.填 Repository name,按 Create repository。  3.先依照用第一個流程走。  4.先 cmd 到 (Desktop/)桌面 ``` pwd cd Desktop/ ```    5.新增 20220113/ 資料夾 ``` mldir 20220113 cd 20220113/ ```  6.下 github 指令。 `3. 這地方`如果你的也是 master。 把 main 要改成 master。 ``` echo "# 20220103" >> README.md git init git add README.md git commit -m "first commit" git branch -M master git remote add origin https://github.com/tonytoolsn/20220103.git git push -u origin master ```  沒登入過的要登入。 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up