一個新的 git 學習課程(3)倉庫
Git 初使用之倉庫
(如果文章確實地幫助你解決了問題,請點個推薦,讓我開心一下,助人為樂,嘿嘿(▽))
這是我按一個學習課程走的 Git
命令,我全部列出,用作複習所用。
使用遠端倉庫
遠端倉庫
# git remote 命令可以讓你管理遠端倉庫和與之互動
git remote
需要注意的是在你克隆倉庫後的情況。如果你克隆了,那麼你將自動獲得一個遠端倉庫,因為它是從你所提供的 URL 上的倉庫克隆來的。
git remote -v
# 或者
git remote --verbose
新增遠端倉庫
git remote add origin https://github.com/richardkalehoff/RichardsFantasticProject.git # origin 只是自定義的一個名稱 $ git remote add repo-on-GitHub https://github.com/richardkalehoff/RichardsFantasticProject.git
git clone https://github.com/owen/my-travel-plans.git
將更改推送到遠端倉庫
# git push <remote-shortname> <branch>
git push origin master
git push
會同步遠端倉庫與本地倉庫。要執行相反操作(將本地倉庫與遠端倉庫同步),我們需要使用git pull
。git pull
的格式與git push
的非常相似-
提供遠端倉庫的簡寫名,以及你要拉取 commit 的分支名稱。
將遠端倉庫拉取修改
# 執行 git pull origin master 會檢索 origin 遠端倉庫 master 分支中的 commit 。 git pull origin master
在執行git pull
時,會發生以下活動:
- 遠端分支上的 commit 會被複制到本地倉庫
- 本地跟蹤分支(
origin/master
)移到指向最新的 commit - 本地跟蹤分支(
origin/master
)合併到本地分支(master
)
如果你不想自動將本地分支與跟蹤分支合併,則不應使用git pull
,而是使用另一個命令git fetch
。當遠端倉庫包含你沒有的 commit ,但本地倉庫也包含遠端倉庫所沒有的 commit 時,你可能想這麼做。
Pull 與 Fetch
git fetch origin master
執行git fetch
後,會發生以下活動:
- 遠端分支上的 commit 會複製到本地倉庫
- 本地跟蹤分支(例如,
origin/master
)移到指向最新的 commit ,需要注意的一點是,本地分支完全不會被改變。
你可以將git fetch
想象成git pull
它的一半操作,而git pull
的另一半是合併。
使用git fetch
而不是git pull
的一個主要情形是當你的遠端分支和本地分支都擁有對方所沒有的更改時。在這種情況下,你要獲取遠端更改,將它們儲存到本地分支中,然後手動執行合併。最後,你可以將新的合併 commit 推送會遠端倉庫。
使用其他開發者的倉庫
fork 倉庫
檢視現有工作
# 要看到每位貢獻者在此倉庫中添加了多少 commit
git shortlog
git shortlog
顯示了按字母順序排序的人名列表,以及他們對應的提交說明。如果我們只想看到每個開發者的 commit 數量,我們可以新增幾個選項:用-s
僅顯示 commit 的數量(而不是每個 commit 的訊息),以及用-n
來按數量排序(而不是按作者姓名的字母順序)。
git shortlog -s -n
# 按作者篩選
git log --author=Surma
# Paul Irish 和 Paul Lewis 的 commit 都有
git log --author=Paul
# 如果我們只想看到 Paul Lewis 的 commit ,我們需要執行:
git log --author="Paul Lewis"
# 按搜尋內容篩選 commit
git log --grep=bug
# 或者
git log --grep bug
# 包含空格搜尋
git log --grep="unit tests"
Grep 是一個模式匹配工具,它不在本課程教學範圍內。但是簡單介紹一下,如果你執行git log --grep "fort"
,那麼 Git 將顯示順序包含字元f
、o
、r
、t
的 commit 。
確定你的任務
小結
在開始任何工作之前,確保閱讀專案的 CONTRIBUTING.md 檔案。
接下來,檢視專案的 GitHub 問題
- 檢視現有的問題,看是否有哪些內容類似於你想貢獻的更改
- 如有必要,建立一個新的 Issue
- 與專案維護者交流你想要做出的更改
當開始開發後,將所有工作 commit 到特性分支上:
- 不要在主分支上工作
- 確保給特性分支賦予一個清晰、描述性的名稱
以及編寫 commit 的一般最佳實踐
- 頻繁少量 commit
- 使用清晰、具有描述性的提交說明
- 必要情況下,更新 README 檔案
與遠端倉庫保持同步
建立 Pull Request
與源專案保持同步
管理活躍 PR
壓制 commit
git rebase -i HEAD~3
git rebase
命令會將 commit 移動到一個新基底(base)上。在命令git rebase -i HEAD~3
中,我們告訴 Git 使用HEAD~3
作為其他所有 commit (HEAD~2
、HEAD~1
和HEAD
)將連線到的基底。
命令中的-i
代表"互動式"。你可以在非互動模式下執行 rebase。在你學習如何 rebase 時,我明確建議你進行互動式 rebase。
rebase 命令:
來看看你可以使用git rebase
執行哪些不同的命令:
使用 p 或 pick – 使 commit 保持原樣
使用 r 或 reword – 保留 commit 的內容,但修改 commit 說明
使用 e 或 edit – 保留 commit 的內容,但先不要執行 commit,以便:
新增新內容或檔案
刪除內容或檔案
修改即將 commit 的內容
使用 s 或 squash – 將此 commit 的更改結合到之前的 commit 中(列表中位於其上面的 commit )
使用 f 或 fixup – 將此 commit 的更改結合到前一個 commit 中,但刪除提交說明
使用 x 或 exec – 執行 shell 命令
使用 d 或 drop – 刪除 commit
新的嘗試
學到這對 git 的基本使用有了一些瞭解,我在嘗試能不能在自己的U盤上搭建一個移動的 git 倉庫呢?因為 github 免費的倉庫預設是開源的。