Git 版本控制系統的完整指南

發表於2024-03-01

什麼是 Git?

Git 是一個流行的版本控制系統。它是由 Linus Torvalds 於 2005 年建立的,自那時以來由 Junio Hamano 維護。

它用於:

  • 跟蹤程式碼更改
  • 跟蹤誰做出了更改
  • 編寫協作

Git 做什麼?

  • 使用倉庫管理專案
  • 克隆專案以在本地副本上工作
  • 使用暫存和提交來控制和跟蹤更改
  • 分支和合並允許在專案的不同部分和版本上進行工作
  • 將專案的最新版本拉到本地副本
  • 將本地更新推送到主專案

使用 Git

  1. 在資料夾上初始化 Git,使其成為一個倉庫
  2. Git 現在會建立一個隱藏的資料夾,以跟蹤該資料夾中的更改
  3. 當檔案被更改、新增或刪除時,它被視為已修改
  4. 你選擇要暫存的已修改檔案
  5. 已暫存的檔案被提交,這會促使 Git 儲存檔案的永久快照
  6. Git 允許你檢視每個提交的完整歷史。
  7. 你可以恢復到以前的任何提交。
  8. Git 不會在每個提交中儲存檔案的單獨副本,而是跟蹤每個提交中所做的更改!

切換平臺:

  • 將焦點轉向 GitHub
  • 將焦點轉向 Bitbucket
  • 將焦點轉向 GitLab

為什麼使用 Git?

  • 超過 70% 的開發者使用 Git!
  • 開發者可以從世界任何地方協同工作。
  • 開發者可以檢視專案的完整歷史。
  • 開發者可以還原到專案的早期版本。

什麼是 GitHub?

Git 不同於 GitHub。
GitHub 製作使用 Git 的工具。
GitHub 是世界上最大的原始碼託管服務,並自 2018 年起由 Microsoft 擁有。
在本教程中,我們將專注於使用 Git 與 GitHub。

Git 暫存環境

Git 的核心功能之一是暫存環境和提交的概念。

當你工作時,你可能會新增、編輯和刪除檔案。但無論何時你達到一個重要階段或完成工作的一部分,都應該將檔案新增到暫存環境。

已暫存的檔案是準備提交到你正在工作的倉庫的檔案。不久後,你將更多地瞭解提交。

目前,我們已完成了對 index.html 的工作。所以我們可以將它新增到暫存環境中:

git add index.html

檔案應該已被暫存。讓我們檢查狀態:

git status

在主分支上

尚未提交

待提交的更改:

(使用 "git rm --cached ..." 來取消暫存)

新檔案: index.html

現在該檔案已被新增到暫存環境。

Git 新增多個檔案

你還可以一次暫存多個檔案。讓我們向我們的工作資料夾新增 2 個檔案。再次使用文字編輯器。

一個描述倉庫的 README.md 檔案(推薦用於所有倉庫):

# hello-world
Hello World repository for Git tutorial
This is an example repository for the Git tutorial on https://www.w3schools.com

This repository is built step by step in the tutorial.

一個基本的外部樣式表(bluestyle.css):

body {
background-color: lightblue;
}

h1 {
color: navy;
margin-left: 20px;
}

並更新 index.html 以包括樣式表:

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>

</body>
</html>

現在將當前目錄中的所有檔案新增到暫存環境:

git add --all

使用 --all 而不是單個檔名將會將所有更改(新檔案、修改過的檔案和已刪除的檔案)都暫存。

git status

在主分支上

尚未提交

待提交的更改:

(使用 "git rm --cached ..." 來取消暫存)

新檔案: README.md

新檔案: bluestyle.css

新檔案: index.html

現在所有 3 個檔案都已新增到暫存環境中,我們準備進行第一次提交。

如何新增新檔案到 Git 倉庫:從建立本地倉庫到新增檔案

新增 Git 新檔案

你剛剛建立了你的第一個本地 Git 倉庫。但它是空的。

所以讓我們新增一些檔案,或使用你喜歡的文字編輯器建立一個新檔案。然後儲存或移動它到你剛剛建立的資料夾中。

在這個示例中,我將使用一個簡單的 HTML 檔案,類似於這樣:

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>

然後將它儲存到我們的新資料夾中,命名為 index.html

讓我們回到終端並列出當前工作目錄中的檔案:

ls
index.html

ls 會列出目錄中的檔案。我們可以看到 index.html 存在。

然後我們檢查 Git 的狀態,看它是否是倉庫的一部分:

git status

在主分支上

尚未提交

未跟蹤的檔案:
(使用 "git add ..." 來將其包含在將要提交的內容中)
index.html

沒有新增到提交但未跟蹤的檔案存在(使用 "git add" 來跟蹤)

現在 Git 已經意識到這個檔案了,但還沒有將它新增到我們的倉庫中!

Git 倉庫資料夾中的檔案可以處於以下 2 種狀態之一:

  • 已跟蹤 - Git 已知道的檔案,並已新增到倉庫
  • 未跟蹤 - 存在於你的工作目錄中,但尚未新增到倉庫

當你首次將檔案新增到空倉庫時,它們都是未跟蹤的。要讓 Git 跟蹤它們,你需要將它們暫存,或者將它們新增到暫存區。

我們將在下一章中介紹暫存區。

Git 提交

既然我們已經完成了工作,我們準備從暫存轉到提交我們的倉庫。

新增提交可以跟蹤我們的進度和更改。Git 將每個提交視為更改點或“儲存點”。如果你發現 bug 或想要做更改,它是專案中可以返回的一個點。

當我們提交時,應該始終包含一條訊息。

透過為每個提交新增清晰的訊息,對於自己(和其他人)來說,很容易看到發生了什麼以及何時發生的。

git commit -m "Hello World 的首次釋出!"
[master (root-commit) 221ec6e] Hello World 的首次釋出!
 3 files changed, 26 insertions(+)
 create mode 100644 README.md
 create mode 100644 bluestyle.css
 create mode 100644 index.html

commit 命令執行提交,-m "message" 新增一條訊息。

已暫存環境已被提交,訊息是:"Hello World 的首次釋出!"

不經過暫存提交

有時,當你進行小的更改時,使用暫存環境似乎是浪費時間。可以直接提交更改,跳過暫存環境。-a 選項會自動將每個已跟蹤的更改檔案新增到暫存區。

讓我們對 index.html 進行小更新:

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>

</body>
</html>

並檢查我們倉庫的狀態。但這次,我們將使用 --short 選項以更緊湊的方式檢視更改:

git status --short
 M index.html

注意:短狀態標誌是:

  • ?? - 未跟蹤的檔案
  • A - 已新增到暫存
  • M - 修改過的檔案
  • D - 已刪除的檔案

我們看到我們預期的檔案已被修改。所以讓我們直接提交它:

git commit -a -m "用新行更新了 index.html"
[master 09f4acd] 用新行更新了 index.html
 1 file changed, 1 insertion(+)

注意:通常不建議跳過暫存步驟。

跳過暫存步驟有時會導致包含不需要的更改。

Git 提交日誌

要檢視倉庫的提交歷史,可以使用 log 命令:

git log

這將顯示倉庫的提交歷史:

commit 09f4acd3f8836b7f6fc44ad9e012f82faf861803 (HEAD -> master)
Author: w3schools-test 
Date:   Fri Mar 26 09:35:54 2021 +0100

    用新行更新了 index.html

commit 221ec6e10aeedbfd02b85264087cd9adc18e4b26
Author: w3schools-test 
Date:   Fri Mar 26 09:13:07 2021 +0100

    Hello World 的首次釋出!

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關注

相關文章