Git 命令小抄,你學會了嗎?
Git 是一個功能強大的版本控制系統(tǒng),允許開發(fā)人員跟蹤變更、與他人協(xié)作并有效管理項目歷史。
Git 由 Linus Torvalds 于 2005 年發(fā)明,用于支持 Linux 內(nèi)核的開發(fā)。創(chuàng)建 Git 的主要動機是解決現(xiàn)有版本控制系統(tǒng)(VCS)的不足,并提供一個更強大、更高效、更靈活的源代碼管理系統(tǒng)。
圖片
01 Git 與其他版本控制工具的區(qū)別
- 分布式架構(gòu)
集中式系統(tǒng)(如 CVS、Subversion)只有一個中央版本庫,而 Git 則不同,它允許每個用戶都擁有一個完整的版本庫克隆。這種分散性意味著用戶可以離線工作,系統(tǒng)對服務(wù)器中斷也有很強的適應(yīng)能力。
- 數(shù)據(jù)完整性和安全性
Git 使用內(nèi)容可尋址文件系統(tǒng)來存儲其對象,確保所有數(shù)據(jù)都經(jīng)過校驗和處理,在不更改相應(yīng)標識符的情況下無法更改。這種機制為防止數(shù)據(jù)損壞提供了強有力的保障。
- 高效的分支和合并
Git 可以輕松創(chuàng)建、切換和合并分支。它的輕量級分支模型鼓勵在獨立分支中開發(fā)功能、修復(fù)和實驗的工作流程。這與舊系統(tǒng)的分支和合并復(fù)雜且容易出錯形成鮮明對比。
- 速度
Git 的設(shè)計旨在快速執(zhí)行。涉及歷史記錄的操作(如日志、歸咎、差異)由于是在本地執(zhí)行,因此速度特別快。與需要通過網(wǎng)絡(luò)訪問才能進行類似操作的舊版系統(tǒng)相比,這種速度是一項重大改進。
- 內(nèi)容跟蹤
Git 跟蹤的是內(nèi)容變化,而不僅僅是文件變化。這意味著即使文件被移動或重命名,Git 仍能準確跟蹤其歷史記錄。而其他一些 VCS 則無法做到這一點,它們只能通過文件路徑來跟蹤文件。
- Snapshots vs. Deltas
Git 的存儲模型基于給定時間點上整個版本庫的快照,而不是一系列文件的差異(deltas)。這種模式更容易理解任何給定提交時的版本庫狀態(tài),并簡化了歷史記錄的表示。
- Staging Area
Git 引入了暫存區(qū)(也稱索引)的概念,允許用戶通過選擇特定的改動來準備提交。與一次性提交所有改動的系統(tǒng)相比,這一功能提供了對提交過程更精細的控制。
02 Git 基本命令
- 初始化和克隆
git init: 在當前目錄下初始化一個新的 Git 倉庫。
git clone <repository_url>: 將遠程服務(wù)器上的現(xiàn)有倉庫克隆到本地計算機上。
- 暫存和提交
git add <file>: 為下一次提交暫存指定文件中的更改。
git commit -m “<message>”: 提交暫存的改動,并附上描述性信息。
- 分支
git branch <branch_name>: 用指定的名稱創(chuàng)建一個新分支。
git checkout <branch_name>: 切換到指定的分支。
git merge <branch_name>: 將指定的分支合并到當前分支。
- push 和 pull
git push: 將本地提交推送到遠程倉庫。
git pull: 從遠程倉庫抓取改動并整合到當前分支。
03 典型開發(fā)工作流程
- 創(chuàng)建分支
首先為您正在開發(fā)的功能或錯誤修復(fù)創(chuàng)建一個新分支。這樣就能將您的修改與主代碼庫(通常是主分支或主分支)分開。
git checkout -b feature/new-feature
- 開發(fā)和提交修改
進行修改并頻繁提交,同時附上有意義的信息。這有助于跟蹤歷史并了解變更的來龍去脈。
git add .
git commit -m "Add new feature implementation“
- 合并改動
功能完成并經(jīng)過測試后,將改動合并回主分支。首先,切換到主分支,然后合并。
git checkout main
git merge feature/new-feature
- 推送修改
把主分支推送到遠程倉庫,與他人分享你的改動。
git push origin main
04 沖突解決
當文件中的同一行在不同分支中被改動,Git 無法自動合并改動時,就會發(fā)生沖突。下面是解決沖突的方法:
- 識別沖突
合并過程中發(fā)生沖突時,Git 會在文件中標記沖突區(qū)域。例如
<<<<<<< HEAD
這是原始內(nèi)容。
=======
這是來自另一個分支的新內(nèi)容。
>>>>>>> feature/new-feature
- 解決沖突
手動編輯文件以解決差異。選擇一個版本,合并它們,或根據(jù)需要重寫部分。
- 將沖突標記為已解決
解決沖突后,將更改分階段提交。
git add <文件
git commit -m "Resolve merge conflict"