Git 基礎指令筆記
一個初學者的小小筆記本
Git vs. Github
Git : 一個版本管理的「工具」,可以幫你記錄每個重生點,或是把記錄下來的內容分享給別人進行共同開發。
Github : 一個呈現Git內容的「平台」,讓內容可視化更方便管理、瀏覽。
Git 還有一個問題:當你在進行程式開發的時候用Git做版本管理只能控制本地端的版本紀錄,但是當你在別的電腦進行開發或是要與別人協作的時候要怎麼取得當前的工作進度呢?這時候就要依賴一個遠端的host repository,也就是Github 負責存放的東西。
簡單說明了Git與Github後,接下來就要開始介紹當你想要使用這項工具讓你的開發更有秩序時,不得不學會的一些基礎指令:
git init
將一個普通的資料夾變成一個git repository(注意:此時的repository只是單純在電腦上被git所管理而已,並未與github上的內容有任何關係,也並未對資料夾內的任何檔案進行追蹤)
git status
顯示當前repository下的所有檔案跟上一次commit不同的部分。
git log
顯示commit 之紀錄。
git add + <filename>
將輸入的filename檔案所有做過的變更(包含這個檔案的創建)加到追蹤的狀態下。
git add . :可將所有檔案一次加入追蹤。
git commit (vscode : ctrl + enter)
對目前為止的修改(有add進來的檔案)進行存檔。
-m + "commit message":直接將" "內的內容做為commit message(不須透過文字編輯器)
git remote
對遠端repository(放在Github上)進行操作的相關指令,單純輸入此指令會顯示本地端所有已加入的遠端repository。
git remote add origin https://…:在本地端建立一個名為origin的遠端repository,其遠端的目的地即為https那串網址的位置。
git push
將目前的commit push到遠端的repository上。
git push -u origin master:"-u"表示將後面的origin設為預設push到的遠端repository,將來不指定remote repository時皆會push至此,master指的是你在本地端想要push上去的branch。
-f:強制將當前git log裡的commit記錄 push上去,即使會改變github上歷史的commit 記錄(強烈建議不要在master上面做,避免影響其他branch上的開發者)
git clone
git clone + 網址:可將網址所對應的repository完整複製到電腦中(包含commit 紀錄),並且不須重新做一次git init。
git reset(vscode檔案旁的" — "號)
git reset --<filename>
將add過的檔案取消add,即下一次commit時不會記錄該檔案所做的變更。
git reset --soft HEAD~1(數字代表回到幾個commit前)
往前退一個commit(會保留修改的部分,只是當作這些東西沒做過commit)
git checkout
git checkout -- <filename>(vscode檔案旁的"復原"符號)
將修改後但還沒做commit的檔案回復到上一次commit的狀態(必須確保檔案不在add狀態)
git checkout -b <branch name>
建立新的branch並切換過去(可在vscode左下角看到自己目前所在的branch)
git pull
把remote(Github端)的新commit抓下來。
此為一種解決conflict簡單暴力的方法,如果此專案是你獨自一人維護,只是你可能會在不同電腦上做開發,建議在每次進行開發時先pull下來最新的更動再進行修改,免得最後要push上去時才發現有一堆conflict要解決。
git branch
查看電腦上的branch(按q離開)
-a:查看包含remote的所有branch。
-d <branch name>:刪除電腦上的分支(如果有推到github,github上的不會刪掉)。
git switch <branch name>
切換分支進行作業(也可切到master)。
注意:切換時須先將當前所有進度保存並commit,若工作尚未到一段落可先隨便統整commit一次,下次切回來再undo last commit即可。
git rebase <要rebase到哪個分支>
把目前的branch起始點移到rebase 分支的最新進度。
※當github做create pull request時無法自動merge就必須先rebase並解完衝突後才可再提出pull request,最後再merge pull request。
注意:rebase前要把base的那個branch做git pull到最新進度。
--continue:解完conflict後繼續rebase。
git merge <要整併回的分支>
把目前branch整併到另一個分支(做完後現在的分支會消失)。
git mv <filename> <folder name>/
將file移動到folder底下,意思等同:
1. 先mv <filename> <folder name>/把檔案移到folder之下
2. 用git rm <filename> 取消追蹤已被移除的檔案
3. 用git add <folder name>/ 將新增的資料夾以及其內所有內容加入追蹤