--- title: Git Hub Note --- [TOC] ## 前情提要 **此筆記整理中** :::info 1. 所有長`這樣`的都是指實際上打在Terminal上的指令,可以複製貼上的意思 2. 所有長`<這樣>`的是會根據不同人或檔案或分支要填入不一樣的內容,而且是**必填** 3. 所有長`[這樣]`的也是填入不一樣的內容,不過是**選填** ::: ## Git Command ### Initial - `git init`:開始對現在的檔案位置(所在的資料夾)使用Git,會自動產生master的分支(branch),並在檔案原地新增`.git`跟`.idea`兩個檔案(原則上不用理它們) - `git clone <repo url>`:從Git Hub網站上複製已經存在的檔案到現有的資料夾 - 在<repo url>後面加上` --depth<n>`n是任何數字,意思是指下載當前這個branch的最新n次commit - 延續上一點,在後面加上` --no-single-branch`可以下載所有branch的最新一次commit - 對於clone大型專案而言是節省速度很重要的步驟喔 - `git config --global user.username <你的 github 使用者名稱>`:連接本機跟遠端 - `git remote add origin <remote HTTP>`:把現在的檔案跟Git Hub上面的Repository連結,**需要在Git hub先建立remote repository,而且要是空的repository** - `git add <file name>`:當你在資料夾裡面新增檔案,而且要把那個檔案放進Git Hub列管的時候使用,有時候第一次跟遠端連接時也要 :::success 這些是每次要開一個新的檔案並放到Git Hub上面的時候可能會用到的指令。 `git clone`是把遠端的檔案拉到本機(通常是別人的) `git remote add`是把本機的檔案放到git hub上,所以這兩個基本上不會共存 ::: ### Branch - `git branch <branch>`:建立新的分支(但留在原地) - - `git branch -M <branch name`:改變現在branch的名字,但注意!如果已經連接到遠端,Git Hub上的branch不會跟著改名,目前我的認知是這兩個branch就從此拆家了 - `git checkout -b <branch>`:建立新的分支並切換過去 - `git checkout <branch or file>`:跳到那個分支(或檔案) - `git branch -d <branch>`:刪除分支 - `git merge <branch>`把`<branch>`:merge進現在的branch,但謹慎使用...:) :::success Branch是個好東西,尤其是很多人合作開發的時候,要嘗試做新的功能時不要在主要的分支(通常叫做master)中嘗試,輕則自己砍掉重練,重則害別人砍掉重練。 merge則是當你在新開的分支(develop)完成了新的功能之後,要跟主要的分支合併時使用的指令,通常會跳出兩個branch裡面有差異的地方問你要用哪一個,但沒用好或是強行merge的話就會發生問題。 ::: ### Commit、Push、Pull - `git commit -m <"commit message">`:要儲存更改後的檔案的指令,可以理解為在本機儲存新的版本,要注意commit message要用雙引號或單引號包起來。 - `git reset -hard Head~1`:不小心commit錯誤想要undo的時候用的...`Head`指的是你現在的位置,`~1`是undo最近一次的commit。**如果那次commit已經push到遠端的話,只會undo本機的部分,並且會導致遠端根本機的版本不統一** - `git push`:把你在本機commit的內容更新到遠端,但是一定要確定你在本機的檔案已經跟遠端同步了(例如你的同學A有push新的內容,就會有版本衝突) - `git push --tag`:把你在本機的tag上傳到遠端 - `git fetch`:幫你把目前遠端新的內容更新到本機端 - `git pull`:如果你git fetch之後發現有版本差異,就用這個指令把遠端的內容拉下來(建議每次打開電腦要做事前都做一次這個動作)。但如果git fetch沒有顯示差異,就不要git pull了,誰知道你會不會因此搞砸團隊的版本控制:) - `git push -u <remote name> <branch name>`:當你在本機新增了branch,在Git Hub上不會自動跑出來,所以push的時候也不會push那個branch的內容。需要用這個指令在遠端新增對應的branch :::success 這些是平常使用git hub最常用的指令(可能是每天?)所以要熟練到不用看筆記 然後`git fetch`跟`git pull`真的真的真的很重要 ::: ### tag - `git tag <tag name>`:在現在的commit上加入標籤 ### 其他 - `git log`:列出現在這個branch上所有commit的紀錄,可以在後面加上`-p`查看每個版本之間的改變的部分;`-n`n是任何數字,這樣可以只顯示最近n筆commit - `git status`:讓你看看目前所在的位置的檔案狀態(在哪個branch、有沒有需要commit的內容......等) - `git --help`:讓官方文件來幫助你XD #### .idea檔案 `.gitignore`:要忽略的檔案清單,這是用來告訴 Git,當在做版本控制記錄的時候,忽略這些檔案。通常一些機密資料,如資料庫帳號密碼或是 server IP 位置等,記得要加入。也可以參考 github 上面的一些範本 在新增 repository 時選取對應的程式語言 #### tab鍵 當你忘記某些檔案的全名(或是懶得打)的時候,可以打出開頭然後按tab鍵,會依序自動打出符合的檔案名稱,或是練續按兩下會列出所有開頭相符的選項 ## 參考資料 [常用基本git指令-Git Command Line](https://medium.com/@brianwu291/basic-git-command-line-collections-2242c03c870e) --- 移植 --- title: Git Control Note --- [TOC] ### Git #### Git Command #### Git Flow `git flow init` `git flow feature <feature>` `git flow feature finish <feature>` ### Git Hub #### git branch `git commit -m <message:string>` `git merge <branch>`把`<branch>`merge進現在的branch `git branch -d <branch>`刪除舊的分支 `git checkout <branch or file>` `git branch <branch>`建立新的分支(但留在原地) `git checkout -b <branch>`建立新的分支並切換過去 #### 連結remote repository `git config --global user.username <你的 github 使用者名稱>` 連結本機跟遠端的資料庫 `git fetch` 更新本機端的commit **需要在Git hub先建立remote repository** `git remote add origin <remote 網址>` #### .git檔案 `.gitignore`:要忽略的檔案清單,這是用來告訴 Git,當在做版本控制記錄的時候,忽略這些檔案。通常一些機密資料,如資料庫帳號密碼或是 server IP 位置等,記得要加入。也可以參考 github 上面的一些範本 在新增 repository 時選取對應的程式語言 ### Git Lab