blavince's BLOG

Giving is a reward in itself.

0%

Git 常用基礎指令

網路上有許多好用的 GUI 軟體工具來操作 Git, 但我常用的基礎功能, 習慣用命令行 (Command line) 的方式來操作.

一、前言

先來認識這三個關鍵字, 因為分散式版本控制就是透過這個概念來實現.

  1. Repository: 想像成一個倉庫, 將完整的程式碼和開發歷程存放在裡面; 分成 remote 和 local 兩個 repository, 彼此間透過 pull 和 push 來互動.
  2. Pull: 將 local repository 和 remote repository 的差異 (commit) 拉下來.
  3. Push: 將 local repository 和 remote repository 的差異 (commit) 推上去.
1
2
3
4
5
6
7
8
9
———————————————————
|Remote repository|
———————————————————
| ↑
|Pull | Push
↓ |
———————————————————
|Local repository|
———————————————————

二、常用指令

列出常用的 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 端:

  1. 打開 repository 的頁面後, 找到 Http/ssh 的連結 (如下圖):
  2. 複製其中的連結然後鍵入命令:
    1
    git clone http://172.21.140.140:80/towen.lai/SeleniumCSharp.git
    輸入帳號密碼後就開始從 remote repository clone 一份下來.

2. 建立新的 repository:

  1. 從右上角 +新增儲存庫
  2. 輸入儲存庫名稱: test
  3. 建立儲存庫
  4. 產生的 repository 鏈結: http://172.21.140.140:80/towen.lai/test.git
  5. git init
  6. 新增 README.txt
  7. git add README.txt
  8. git commit -m "first commit"
  9. git remote add origin http://172.21.140.140:80/towen.lai/test.git
  10. git push -u origin master

或者將一個已經存在 local repository 推到新創的 remote repository:

  1. git remote add origin http://172.21.140.140:80/towen.lai/test.git
  2. 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 處理好後再操作.

*以上內容都是自己的理解, 如果有誤煩請指教!