Git 教程:解密 .gitignore 檔案、合併分支、解決衝突、及 Git 幫助

發表於2024-02-26

Git 幫助

如果你忘記了命令或命令的選項,你可以使用 Git 幫助。

在命令列中,有幾種不同的使用幫助命令的方式:

  • git command -help - 檢視特定命令的所有可用選項
  • git help --all - 檢視所有可能的命令

讓我們看看不同的命令。

Git -help 檢視特定命令的選項

任何時候,如果你需要幫助來記住特定命令的選項,你可以使用 git command -help

這將顯示特定命令的所有可用選項:

usage: git commit [] [--] ...

    -q, --quiet           suppress summary after successful commit
    -v, --verbose         show diff in commit message template

Commit message options
    -F, --file      read message from file
    --author      override author for commit
    --date          override date for commit
    -m, --message 
                          commit message
    -c, --reedit-message 
                          reuse and edit message from specified commit
    -C, --reuse-message 
                          reuse message from specified commit
    --fixup       use autosquash formatted message to fixup specified commit
    --squash      use autosquash formatted message to squash specified commit
    --reset-author        the commit is authored by me now (used with -C/-c/--amend)
    -s, --signoff         add a Signed-off-by trailer
    -t, --template 
                          use specified template file
    -e, --edit            force edit of commit
    --cleanup       how to strip spaces and #comments from message
    --status              include status in commit message template
    -S, --gpg-sign[=]
                          GPG sign commit

Commit contents options
    -a, --all             commit all changed files
    -i, --include         add specified files to index for commit
    --interactive         interactively add files
    -p, --patch           interactively add changes
    -o, --only            commit only specified files
    -n, --no-verify       bypass pre-commit and commit-msg hooks
    --dry-run             show what would be committed
    --short               show status concisely
    --branch              show branch information
    --ahead-behind        compute full ahead/behind values
    --porcelain           machine-readable output
    --long                show status in long format (default)
    -z, --null            terminate entries with NUL
    --amend               amend previous commit
    --no-post-rewrite     bypass post-rewrite hook
    -u, --untracked-files[=]
                          show untracked files, optional modes: all, normal, no. (Default: all)
    --pathspec-from-file 
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character
Note: You can also use --help instead of -help to open the relevant Git manual page

Git help --all 檢視所有可能的命令

要列出所有可能的命令,可以使用 help --all 命令:

注意:這將顯示一個非常長的命令列表

$ git help --all
````

這將顯示所有可能的命令列表。

## 合併分支和解決衝突

緊急修復已經準備好,現在讓我們合併 master 和 emergency-fix 分支。

首先,我們需要切換到 master 分支:

`git checkout master`

現在,我們將當前分支(master)與 emergency-fix 合併:

git merge emergency-fix

更新 09f4acd..dfa79db
快進
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)


由於 emergency-fix 分支直接來自於 master,並且在我們工作時沒有對 master 進行其他更改,Git 將其視為 master 的延續。因此,可以“快進”,將 master 和 emergency-fix 指向相同的提交。

由於 master 和 emergency-fix 現在本質上相同,我們可以刪除 emergency-fix,因為它不再需要:

git branch -d emergency-fix

已刪除分支 emergency-fix(是 dfa79db)。


### 合併衝突

現在我們可以切換到 hello-world-images 並繼續工作。新增另一個影像檔案(img\_hello\_git.jpg)並更改 index.html,以便顯示它:

git checkout hello-world-images

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

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>


現在,我們已經完成了在該分支上的工作,可以為該分支暫存並提交:

git add --all
git commit -m "added new image"


我們看到 index.html 在兩個分支中都發生了更改。現在我們準備將 hello-world-images 合併到 master 中。但是,我們最近在 master 中所做的更改會發生什麼?

git checkout master
git merge hello-world-images


自動合併 index.html

合併衝突(內容):index.html 中的合併衝突

自動合併失敗;解決衝突,然後提交結果。

合併失敗,因為在 index.html 的不同版本之間存在衝突。讓我們來檢查狀態:

git status

在 master 分支上,你有未解決的路徑。

(解決衝突並執行 "git commit")

(使用 "git merge --abort" 中止合併)

要提交的更改:

新檔案:img\_hello\_git.jpg

新檔案:img\_hello\_world.jpg

未解決的路徑:

(使用 "git add ..." 標記解決)

兩者修改: index.html


這證實了 index.html 中存在衝突,但影像檔案已經準備好並暫存以進行提交。

因此,我們需要解決衝突。在編輯器中開啟檔案:

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

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<<<<<<< HEAD

<p>This line is here to show how merging works.</p>

<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

hello-world-images

</body>
</html>


我們可以看到不同版本之間的差異,並按照我們的需求進行編輯:

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

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>
```

現在我們可以暫存 index.html 並檢查狀態:

```bash
git add index.html
git status
```

在 master 分支上,所有衝突都已解決,但你仍在合併中。

(使用 "git commit" 完成合並)

要提交的更改:

新檔案:img\_hello\_git.jpg

新檔案:img\_hello\_world.jpg

修改:     index.html

衝突已解決,我們可以使用提交來完成合並:

```bash
git commit -m "merged with hello-world-images after fixing conflicts"
```

然後刪除 hello-world-images 分支:

```bash
git branch -d hello-world-images
```

```bash
已刪除分支 hello-world-images(是 1f1584e)。
```

現在你對分支和合並的工作方式有了更好的瞭解。是時候開始與遠端倉庫一起工作了!

## Git .gitignore 檔案:建立、示例規則和模式匹配

`.gitignore` 檔案是用於指定 Git 忽略的檔案和資料夾的配置檔案。這意味著 Git 不會跟蹤或包含在版本控制中,但它們仍然存在於你的工作目錄中。以下是關於`.gitignore`檔案的詳細資訊:

建立\*\*`.gitignore`\*\*檔案

要建立一個`.gitignore`檔案,請按照以下步驟操作:

1.  開啟終端或命令列工具。
2.  導航到你的 Git 儲存庫的根目錄。
3.  建立`.gitignore`檔案。你可以使用以下命令:`touch .gitignore`。這將在儲存庫的根目錄中建立一個`.gitignore`檔案。
4.  使用文字編輯器開啟`.gitignore`檔案,你可以新增你要忽略的檔案和資料夾的規則。

示例 `.gitignore` 檔案

下面是一個示例`.gitignore`檔案的內容,演示了一些忽略規則:

```log
# 忽略所有 .log 檔案
*.log

# 忽略任何名為 "temp" 的目錄中的所有內容
/temp/

# 忽略所有 .zip 和 .rar 壓縮檔案
*.zip
*.rar

# 忽略特定檔案
config.txt

# 忽略特定資料夾及其內容
bin/
build/
```

這個`.gitignore`檔案包含了各種忽略規則,例如忽略所有`.log`檔案、名為"temp"的目錄、`.zip`和`.rar`壓縮檔案、`config.txt`檔案以及`bin/`和`build/`資料夾及其內容。

`.gitignore` 檔案的規則如下:

-   模式匹配:`.gitignore`中的規則使用模式匹配來匹配檔案和資料夾。
-   行註釋:以`#`開頭的行將被視為註釋。
-   檔案匹配:你可以使用`*`來匹配任何字元,`?`來匹配單個字元,`[]`來匹配字符集,`[!...]`來否定字符集。
-   目錄匹配:如果模式以`/`結尾,則該模式僅匹配目錄。
-   遞迴匹配:使用``來匹配任何子目錄。
-   否定規則:使用`!`符號來否定已定義的規則。

示例規則包括:

-   `*.log`:忽略所有副檔名為`.log`的檔案。
-   `/temp/`:忽略名為"temp"的目錄及其內容。
-   `bin/`:忽略名為"bin"的資料夾及其內容。
-   `!important.log`:忽略所有`.log`檔案,但不包括名為"important.log"的檔案。

透過編輯`.gitignore`檔案,你可以自定義哪些檔案和資料夾應該被 Git 忽略,以便它們不會包含在版本控制中。這對於避免將不必要的或敏感檔案提交到版本控制中非常有用。

## 最後

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

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

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

相關文章