一、前言
先來認識這三個關鍵字, 因為分散式版本控制就是透過這個概念來實現.
- Repository: 想像成一個倉庫, 將完整的程式碼和開發歷程存放在裡面; 分成 remote 和 local 兩個 repository, 彼此間透過 pull 和 push 來互動.
- Pull: 將 local repository 和 remote repository 的差異 (commit) 拉下來.
- Push: 將 local repository 和 remote repository 的差異 (commit) 推上去.
1 | ——————————————————— |
二、常用指令
列出常用的 Git 指令 (順序無直接關聯性):
1. git init
對資料夾進行 git 初始化, 產生一個隱藏資料夾 .git/ 負責紀錄各種資訊.
2. git clone
clone(克隆) 複製一個 repository 下來.
3. git pull
將 remote repository 和 local repository 的差異 commit 拉下來.
4. git log
印出 repository 所有 commit. (只顯示最後一個: git log -1).
5. git show
印出 commit 的內容. ((顯示最後一個: git show -1)).
6. git status
印出當前 repository 的狀態.
7. git diff
印出當前 repository 狀態和最後 commit 狀態下的差異.
8. git add
將有差異或者要新增的檔案加入.
9. git commit
將有差異或者要新增的檔案都加入完畢之後, 把這些做成一個 commit.
10. git branch
git 分支指令.(顯示當前處在哪一個分支: git branch -ra).
11. git push
將 remote repository 和 local repository 的差異 commit 推上去.
12. git checkout
將特定的檔案退回最後的 commit 的狀態或者切換分支 (branch).
13. git reset
將當前 repository 退回特定的 commit 的狀態. (例如: git reset –hard commit_ID).
14. git revert
可以將 commit 還原.
15. git stash/ git stash pop
將修改到一半的差異檔案先暫存起來/ 拋出來, 修改到一半時要切換分支特別好用.
16. git format-patch
將 commit 輸出成 patch 供其他 repostory 使用.
17. git apply
將差異性檔案帶入目前的 repository.
18. git am
將 patch 檔的資訊完整 commit 進 repository.
三、實例操作
搭配自己架設的 Git 伺服器 (Ubuntu 18.04 LTS + Gitea 架設個人 Git 伺服器) 進行操作.
建立 Repository :
這裡提供兩種建立的方式:
1. Clone remote repository 到 local 端:
- 打開 repository 的頁面後, 找到 Http/ssh 的連結 (如下圖):
- 複製其中的連結然後鍵入命令:輸入帳號與密碼後就開始從 remote repository clone 一份下來.
1
git clone http://172.21.140.140:80/towen.lai/SeleniumCSharp.git
2. 建立新的 repository:
- 從右上角 +新增儲存庫
- 輸入儲存庫名稱: test
- 建立儲存庫
- 產生的 repository 鏈結: http://172.21.140.140:80/towen.lai/test.git
git init
- 新增 README.txt
git add README.txt
git commit -m "first commit"
git remote add origin http://172.21.140.140:80/towen.lai/test.git
git push -u origin master
或者將一個已經存在 local repository 推到新創的 remote repository:
git remote add origin http://172.21.140.140:80/towen.lai/test.git
git push -u origin master
操作 Repository:
1. 無任何修改時輸入 git status
:
提示: nothing to commit, working tree clean
2. 對 README.txt 做修改後輸入git status
:
下圖出現紅色字, 提示 README.txt 被修改了
3. 輸入git diff
看 README.txt 的差異:
提示: 有兩行綠色的 +, 代表新增了以下兩行:
+
+ test
4. 接下來如上面的流程將 commit push 到 remote repository.
git add README.txt
、
git commit -m "insert string test"
、
git push
5. 若 remote repository 比 local repository 有更新的 commit 時輸入 git pull
:
將 local repository 更新到和 remote repository 一樣.
6. 輸入 git log
看開發歷程:
顯示這個 repository 的開發歷程 (由 commit 堆成)
HINT:
不管git push
還是git pull
在互動前都要注意 conflict (專案多人開發, 修改到同一支檔案) 的情況, 如果有的話就要先將 conflict 處理好後再操作.
*以上內容都是自己的理解, 如果有誤煩請指教!