一、說明
版本控制在軟體開發中非常重要,有了版本控制不但可以記錄軟體變動脈絡,還能多線開發、合併、摘取、回遡、差異比對等功能,在團隊合作中尤其重要。
版本控制用指令很多,在只介紹Git在開發中的常用指令。
二、環境準備
於 GitHub 中建立 repository: git-learning
- 登入Github並點選右上角+號,再選New repository
- 填寫資料
取得 repo: git-learning 的uri
- 進入git-learning後點選 clone or download,並複製網址
上圖採用ssh方式與git連線
- 進入git-learning後點選 clone or download,並複製網址
三、指令介紹
環境設定
設定Git操作者的名子與信箱
git使用前,需設定作者資訊
1 | $ git config --global user.name {我的名子} |
註:
{我的名子}
,{我的信箱}
代表變數,在此輸入Git操作者名子,信箱
語系設定
Linux環境下git操作需設定執行語系,以免看到亂碼
1 | $ echo "export LESSCHARSET=utf-8;" | sudo tee -a ~/.bashrc |
原因是 git log 預設是使用 less 這個工具來瀏覽,所以需要額外設定編碼。
編輯器
設定操作git編輯時使用的編輯器,推荐vim或vi
1 | $ git config --global core.editor vim |
將操作Git的編輯器設定成vim,如無vim可改用vi
與遠端協同工作
Git工作分本地端(local)、遠端(remote),自己在本地端的任何變更需推送(push)到遠端,其他人才可以獲取(fetch)自己的變動內容。
下載遠端 repository
下載遠端資源庫至本地端工作目錄中。
- 指令 git clone
1
2
3# 格式:git clone <repo> [<directory>]
# 範例:
$ git clone git@github.com:marshung24/git-learning.git- 克隆目標資源庫
- 克隆成功後,可在執行目錄下看到剛剛克隆的專案目錄
推送至遠端
推送本地端變動至遠端。
- 指令 git push
1
2
3# 格式:git push
# 範例:
$ git push- 將本地commit推送至遠端伺服器
- 強制推送:git push -f
獲取遠端記錄
獲取遠端的變動記錄。當他人有推送變動時,需使用本指令獲取最新記錄。
- 指令 git fetch
1
2
3# 格式:git fetch
# 範例:
$ git fetch- 當多人協同作業時,要看到其他人推送至伺服器的結果時使用 git fetch 取得
獲取並合併
- 指令 git pull
1
2
3# 格式:git pull <branch>
# 範例:
$ git pull mastergit pull 效果等於 git fetch 加 git merge
查看記錄
查看記錄
- 指令 git log
1
2
3# 格式:git log
# 範例:
$ git log
查看HEAD的移動記錄
- 指令 git reflog
1
2
3# 格式:git reflog
# 範例:
$ git reflog- 如果誤操作時,可用此找查之前的記錄
- 有commit過的檔案被蓋掉,可通過git reflog、git reset還原
檔案變動管理
查看目前變動
- 指令 git status
1
2
3
4
5
6
7
8
9
10
11# 格式:git status
# 範例:
# 查看目錄下的檔案清單
$ ls
LICENSE README.md
# 建立空檔案 index.php
$ touch index.php
# 在檔案 README.md 最後增加一新行,文字為test
$ echo "test" >> README.md
# 查看目前變動
$ git status可看到一個檔案變動 README.md ,一個未處理檔案 index.php
暫存變動:
- 指令 git add
1
2
3
4# 格式:git add <file>
# 範例:
$ git add README.md
$ git status暫存變動,使用git status查看目前變動
暫存全部變動:
git add -u不含未處理過的檔案
暫存全部變動:
git add .含未處理過的檔案
暫存路徑變動: git add
含未處理過的檔案
取消暫存變動:
- 指令 git reset HEAD
1
2
3
4# 格式:git reset HEAD <file>
# 範例:
$ git add README.md
$ git status取消不小心 git add 的檔案
收藏
收藏變動
- 指令 git stash
1
2
3# 格式:git stash
# 範例:
$ git stash- 承 查看目前變動 狀況下做git stash,只會收藏Git處理過的檔案,不會收藏Git未處理過的檔案
- 收藏後,檔案會回到變動前的狀況
查看收藏:
- 指令 git stash list
1
2
3# 格式:git stash list
# 範例:
$ git stash list圖中可看到目前有一筆收藏
取出收藏:
- 指令 git stash pop
1
2
3# 格式:git stash pop
# 範例:
$ git stash pop取出收藏後,檔案會回到變動後的狀況
提交:
- 指令 git commit
1
2
3
4# 格式:git commit
# 範例:
$ git add README.md
$ git commit- 提交前(git commit)必需暫存變動(git add)
- 不進編輯器直接提交
- git commit -m “提交內容描述”
- 修改最近的提交記錄
- git commit –amend
分支管理
查看分支
- 指令 git branch
1
2
3# 格式:git branch
# 範例:
$ git branch不加任何參數時為查看分支
建立新分支
- 指令 git branch
1
2
3
4
5
6# 格式:git branch
# 範例:
# 以SHA-1 commit位置為基底建立branch_a
$ git branch branch_a cbbb519abe0b959443c22aab38fe8cab9702eb2b
# 以master位置為基底建立branch_b
$ git branch branch_b master- 不會checkout到該分支
- 推送剛建立的分支new_branch至遠端
- git push origin new_branch
刪除分支
- 指令 git branch -d
1
2
3
4# 格式:git branch -d <branch>
# 範例:
# 刪除分支new_branch (本地端)
$ git branch -d new_branch有未合併資料時不可刪
- 強制刪除:git branch -D
- 刪除遠端分支:git push origin :
- 使用git push 並在分支名前加上冒號(:)
合併分支: git merge
切換分支: git checkout
清除變動檔案: git checkout
清除分支所有變動: git checkout – .
變更工作目錄至commit: git reset
只移動branch位置,不變動檔案
變更工作目錄至commit: git reset –hard
移動branch位置,並重置檔案
建立tag: git tag
推送tag: git push origin
同等: git push origin refs/tags/
刪除tag: git tag -d
刪除遠端tag: git push origin refs/tags/
必需先把本地tag刪除(推送空tag)
變基: git rebase -i
摘取: cherry-pick
worktree
git worktree add -b hotfix ../hotfix master
git worktree prune
git worktree list
git worktree lock