Git分散式版本控制軟體使用簡單功能豐富,支援windows/macOS/Linux平台,
操作上可使用Git Bash(console指令式),Git GUI(圖形化介面)
GUI也有不少第三方免費/付費的版本像 Sourcetree,GitHub Desktop,我倒覺得官方的就很好用(如下圖)
Git官網有相當完整且豐富的多國語言使用手冊,建議有時間真要閱覽一遍
Git安裝 - Windows
官網下戴安裝檔https://git-scm.com/download/ (目前2023年10月最新版本2.42.0)
然後就一路無腦Next安裝,完成內容如下
預設安裝路徑 C:\Program Files\Git
初次設定
第一次使用須要先設定 使用者名稱 和 e-mail
執行 Git Bash 啟動Git,輸入
$ git config --global user.name "名稱"
$ git config --global user.email 郵件位置
--global設定會儲存在C:\Users\使用者帳號 的 .gitconfig
完成後可用指令查看結果 (包含C:\Program Files\Git\etc\config 的設定)
$ git config --list
專案建立
1. 建立一個資料夾,滑鼠右鍵New > Folder,或在Git Bash用mkdir隨你高興
2. Git Bash路徑切入Folder,輸入指令
$ git init
建立project1的Git repository(儲存倉),資料夾內會多一個 .git 的隱藏資料來,所有project1資料
夾內檔案的變化(新增/修改/刪除)都會儲存在 .git 裡頭
3. 丟個隨意檔案到project1資料夾內,然後輸入指令查看repository狀態
$ git status
剛丟入的檔案被警示為 Untracked files,提醒使用者使用指令 git add 把檔案加入追蹤
4. 輸入指令
$ git add hello.c
或
$ git add .
小點數的功能等同 -A, --all 指所有 Untracked files
檔案已轉為staged,仍須要提交commit確認列入repository的tracking list,輸入指令
$ git commit -m "注解"
這就完成新增檔案時所須要的操作,如果已經tracking的檔案修改或刪除,步驟也是 add 再提交 commit
Local Repository本地儲存庫:個人電腦上建立的Git專案資料夾
Working Directory工作區:儲存庫有檔案異動時(新增/修改/刪除)時都將列在工作區使用者確認
Staging Area預存區:工作區的異動被確認後改為 Staged 存在Staging Area,提交commit後會產生
新的commit節點並清除預存區
Working tree:指Working Directory + Staging Area
Remote Repository:遠端儲存庫,像Github或其它雲端平台
Untracked files:初次加入Repository沒有被Git追蹤控管
Changes not staged for commit:己被追蹤,再次被修改/刪除,會被丟回工作區
Changes to be committed:工作區的檔案 git add後移至 Staging Area 等待提交
Committed:Staging Area的檔案執行 git commit後,清除working tree,產生新的commit
Git的操作指令及流程基本如下圖
每提交一次 git commit 就會產生新的commit節點,Git版本控制就是藉由這許多節點來達成 回溯/還原 分支/版本
commit number每個節點的id,用于還原
HEAD:目前使用者所處的分支及commit節點
main:分支名稱
origin/main:遠端repo所處的分支
origin/HEAD:遠端repo HEAD所在的commit
$ git log
可以查看Repository所有修改的歷史記錄,每個commit number,HEAD位在分支main
這是以Sourcetree顯示Repository整個歷史,
Git指令
指令 | Comment |
---|---|
clone | 複製repository到本地 |
init | 建立空的Git repository儲存庫 |
add | 添加staged files |
mv | 檔案移動/更名 |
restore | 撤銷staged files |
rm | 檔案刪除 |
bisect | |
diff | |
grep | 檢索文件文字 |
log | 查看歷史commit logs |
show | 顯示當前commit的內容 |
status | 查看Repository狀態 |
branch | 查看分支 |
commit | 提交/確認變更至repository |
merge | 分支/遠端合併 |
rebase | |
reset | 重置HEAD所在commit狀態 |
switch | 切換分支 |
checkout | 切換分支(功能上比switch強大) |
tag | |
tag | 查看標籤 |
fetch | 確認遠端是否有更新 |
pull | 從remote下戴/合併至local |
push | 上傳至remote |
remote | 遠端repo操作 |
--version | 查看Git版本 |
clean | 移除未追蹤的文件 |
git init
建立repository儲存庫,路徑切到folder最上層,產生 .git 的專案夾(隱藏)
$ git init
git status
查看完整的working tree狀態
$ git status
查看簡潔的working tree狀態
$ git status -s
第一行綠色是Staging Area,第二行紅色為Working Directory
M:修改, D:刪除, ??:新增未追蹤
沒有要確認/提交的需求:nothing to commit, working tree clean
新增文件:Untracked files
文件修改:Changes not staged for commit - modified
刪除文件:Changes not staged for commit - deleted
git add
repo資料夾內任何有變化的檔案都會在被列在working directory,須指令 git add 確認並改為staged files
$ git add <file name>
一個個檔案確認太慢,在add後加參數dot或--all全部異動確認
$ git add .
$ git add --all
git restore
回溯/還原處于Working Directory,Unstaged狀態的文件 (對新增文件Untracking files無效)
git restore <file name>
git restore .
回溯/還原處于Staging area,staged files狀態的文件至Working Directory為Unstaged files
git restore --staged <file name>
git clean
刪除repo資料夾內處Untracked files
git clean -f
git commit
提交staged文件到repo列入追蹤並新增commit
git commit -m "<comment>"
這個指令等於git add + git commit;但對新增文件無效
git commit -m "<comment>"
在HEAD所在的commit加入新的staged
git commit --amend
git log
查看所有標籤
git tag
新增標籤,tag在當前HEAD所在commit上
git tag -a <tag name> -m <comment>
新增標籤在指定的commit上
git tag -a <tag name> -m <comment> <commit number>
刪除標籤
git tag -a <tag name>
git rm
解除追蹤,保留檔案
git rm --cached <file name>
解除追蹤,刪除檔案
git rm -f <file name>
git branch
查看所有分支
git branch
下圖列出有三個分支,目前HEAD在分支main
刪除分支,merge後才可刪除分支
git branch -d <branch name>
強制刪除分支
git branch -D <branch name>
git switch
建立新的分支,並切換到新分支上
git switch -c <branch name>
切換到指定的branch上
git switch <branch name>
切換到指定的tag
git switch --detach <tag name>
git checkout
HEAD回到上個commit節點
git checkout HEAD^
git checkout HEAD~1
HEAD定位到某個commit節點
git checkout <commit number/tag name/branch name>
git reset
清除staging area所有staged files,退回working directory,commit會消失(小心使用)
git reset
取消head所在commit的內容,並退回到上個commit (不影響repo資料夾內的文件)
(因為本來commit的內容被取消, working directory會多出unstaged file)
git reset HEAD^
git reset HEAD~1
head回到上個/指定的commit版本(repo資料夾的文件內容也會變動)
git reset --hard HEAD^
git reset --hard HEAD~1
git remote
確認local repo是否有註冊遠端伺服器的路徑
git remote -v
註冊遠端伺服器,origin是自行定義路徑的名稱
git retmoe add origin <url>
EX:git retmoe add origin https://github.com/nios71/project_2.git
git clone
從雲端拷貝到local
git clone <url>
EX:git clone https://github.com/user_name/repository_name
git fetch
確認雲端是否有更新
git fetch
git merge
配合git fetch融合更新的部分到local repo
git merge
git pull
等於fetch + merge
git pull
git push
上傳到雲端伺服器,branch name相同遠端可不寫
git push <url> <local branch name>:<remote branch name>
ex:git push origin master:master
ex:git push origin master
忽略檔案變更
在repo folder內創建名為 .gitignore 的檔案,內容列表的檔案Git都會忽略變更,內容示意如下
# 不要追蹤檔名為 .a 結尾的檔案
*.a
# 但是要追蹤 lib.a,即使上面已指定忽略所有的 .a 檔案
!lib.a
# 只忽略根目錄下的 TODO 檔案,不包含子目錄下的 TODO
/TODO
# 忽略 build/ 目錄下所有檔案
build/
# 忽略 doc/notes.txt,但不包含 doc/server/arch.txt
doc/*.txt
# 忽略所有在 doc/ 目錄底下的 .pdf 檔案
doc/**/*.pdf
#忽略檔名/資料夾名稱帶特定字元
*特定字元*
# : 表示註解
/ 結尾:代表目錄
[] : 表示匹配中括弧內的任一個字元
! : 反向規則
Github
GitHub是使用Git作為版本控制軟體的線上軟體原始碼代管服務平台,
當然使用者也可以架設自已的雲端Git管理平台
這邊演示在Github建立一個Repository,下戴到本機,修改,再上傳
1. 第一步當然在Github (https://github.com/)註冊帳號
2. 點擊 New repository 創建儲存庫,
如果你希望這個儲存庫做為網頁使用,名稱須定為 <你的Github使用者名稱>.github.io
如 mygit71.github.io,然後就可以看到一個新的(空空的)Repository
裡面有幾項很重要的訊息,它告知了你上傳/下載所需要的https或SSH地址,以及如何從本機上傳文件到Github
現在Github(雲端)已經有一個名為 者用者名.github.io 的repository
但本機沒有,要嘛使用上圖 git init 的方式在本機建立同名的repository,或者直接從Github clone複製到本機
3. 這裡我使用clone複製到本機
$ git clone https://github.com/<user_name>/<user_name>.github.io.git
現在本機就會出現repo資料夾,Git Bash路徑切到資料夾內,使用 git status 確認這是個Git repository
4. 產生一個 index.html,並且加入repository
T0494@T0500-NB MINGW64 ~/Desktop/mygit71.github.io (main)
$ echo "Hello world!" > index.html
T0494@T0500-NB MINGW64 ~/Desktop/mygit71.github.io (main)
$ git add .
T0494@T0500-NB MINGW64 ~/Desktop/mygit71.github.io (main)
$ git commit -m "add file index.html"
T0494@T0500-NB MINGW64 ~/Desktop/mygit71.github.io (main)
$ git status
On branch main
Your branch is based on 'origin/main', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working tree clean
5. 這裡先為遠端Github的地址建立一個代號origin,之後就不必每次都輸入一串字
git remote add origin https://github.com/<user_name>/<user_name>.github.io.git
可用 remote -v 確認是否完成,或到資料夾查看 ~/.git/config 內容
git remote -v
6. 把本機repository同步到Github
git push
去刷新(F5)你的Github頁面就可以看到檔案新增到雲端
7. 建立你的網頁位址,進入Github頁面,點擊 About 右側的齒輪
<使用者名稱>.github.io 這就是你的網站位址,完成後輸入此位址就能看到 Hello world! 的頁面
參考資料來源 https://git-scm.com/