diff --git a/README_zh-TW.md b/README_zh-TW.md
index 0993886..dbe918f 100644
--- a/README_zh-TW.md
+++ b/README_zh-TW.md
@@ -95,7 +95,6 @@
## 編輯提交(editting commits)
-
### 我剛才提交了什麼?
如果你用 `git commit -a` 提交了一次變化(changes),而你又不確定到底這次提交了哪些內容,你可以用以下命令顯示目前 `HEAD` 上的最近一次的提交(commit):
@@ -110,7 +109,6 @@
$ git log -n1 -p
```
-
### 我的提交訊息(commit message)寫錯了
如果你的提交訊息(commit message)寫錯了,且這次提交(commit)還沒有推送(push),你可以透過下面的方法來修改提交訊息(commit message):
@@ -126,7 +124,6 @@ $ git commit --amend --only -m 'xxxxxxx'
如果你已經推送(push)了這次提交(commit),你可以修改這次提交(commit)然後強制推送(force push),但是不推薦這麼做。
-
### 我提交(commit)裡的使用者名稱和信箱不對
如果這只是單個提交(commit),修改它:
@@ -137,7 +134,6 @@ $ git commit --amend --author "New Authorname "
如果你需要修改所有歷史,參考 `git filter-branch` 的手冊。
-
### 我想從一個提交(commit)裡移除一個文件
通過下面的方法,從一個提交(commit)裡移除一個文件:
@@ -150,7 +146,6 @@ $ git commit --amend
這非常有用,當你有一個開放的補丁(open patch),你往上面提交了一個不必要的文件,你需要強制推送(force push)去更新這個遠程補丁。
-
### 我想刪除我最後一次提交(commit)
如果你需要刪除推送了的提交(pushed commits),你可以使用以下方法。但是,這將不可逆的改變你的歷史,也會搞亂那些已經從該倉庫拉取(pulled)了的人的歷史。簡而言之,如果你不是很確定,千萬不要這麼做。
@@ -168,7 +163,6 @@ $ git push -f [remote] [branch]
這只能在推送之前使用。如果你已經推送了,唯一安全的做法是 `git revert SHAofBadCommit`,那會創建一個新的提交(commit)來撤消前一個提交的所有變化(changes);或者,如果這個分支是 rebase-safe 的(例如:其他開發者不會從這個分支拉取),只需要使用 `git push -f`;參見[上一節](#deleteremove-last-pushed-commit)。
-
### 刪除任意提交(commit)
同樣,除非必須,否則不要這麼做。
@@ -180,7 +174,6 @@ $ git push -f [remote] [branch]
或者使用[互動式變基(interactive rebase)](#interactive-rebase) 刪除那些你想要刪除的提交(commit)所對應的行。
-
### 我嘗試推送一個修正後的提交(amended commit)到遠端,但是報錯
```sh
@@ -201,7 +194,6 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
一般來說,要避免強制推送。最好是創建和推送一個新的提交(commit),而不是強推一個修正後的提交。後者會使在該分支或該分支的子分支上工作的開發者,在源歷史中產生衝突。
-
### 我意外地硬重設(hard reset)了,我想找回我的內容
如果你意外地做了 `git reset --hard`,你通常能找回你的提交(commit),因為 Git 對每件事都會有日誌,且都會保存幾天。
@@ -218,14 +210,12 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details.
## 暫存(staging)
-
### 我需要把暫存的內容添加到上一次的提交(commit)
```sh
(my-branch*)$ git commit --amend
```
-
### 我想要暫存一個新文件的一部分,而不是這個文件的全部
一般來說,如果你想暫存一個文件的一部分,你可以使用以下命令來開啟互動式介面,並使用 `s` 選項來選擇想要的行。
@@ -242,12 +232,10 @@ $ git add -N filename.x
然後,你需要用 `e` 選項來選擇需要添加的行,執行 `git diff --cached` 將會顯示哪些行暫存了、哪些行只是保存在本地了。
-
### 我想把在一個文件裡的變化(changes)加到兩個提交(commit)裡
`git add` 會把整個文件加入到一個提交。`git add -p` 則允許你互動式地選擇想要提交的部分。
-
### 我想把暫存的內容變成未暫存,把未暫存的內容暫存起來
多數情況下,你應該將所有的內容變為未暫存,然後再加入(add)你想要的內容提交(commit)。
@@ -266,14 +254,12 @@ $ git stash pop --index 0 # 彈出儲藏。
## 未暫存(unstaged)的變化
-
### 我想把未暫存的變化移動到新分支
```sh
$ git checkout -b my-branch
```
-
### 我想把未暫存的變化移動到另一個已存在的分支
```sh
@@ -282,7 +268,6 @@ $ git checkout my-branch
$ git stash pop
```
-
### 我想丟棄本地未提交的變化(uncommitted changes)
如果你只是想重設源(origin)和你本地(local)之間的一些提交(commit),你可以:
@@ -304,7 +289,6 @@ $ git stash pop
$ git reset filename
```
-
### 我想丟棄某些未暫存的變化
如果你想丟棄工作拷貝中的一部分內容,而不是全部。
@@ -335,7 +319,6 @@ $ git stash drop
## 分支(branches)
-
### 我從錯誤的分支拉取了內容,或把內容拉取到了錯誤的分支
這是另外一種可以使用 `git reflog` 情況,找到在這次錯誤拉取(pull)之前 HEAD 的指向。
@@ -354,7 +337,6 @@ $ git reset --hard c5bc55a
完成。
-
### 我想丟棄本地的提交(commit),以讓分支與遠端保持一致
首先,確認你沒有推送(push)你的內容到遠端。
@@ -375,7 +357,6 @@ $ git reset --hard c5bc55a
(my-branch)$ git reset --hard origin/my-branch
```
-
### 我需要提交到一個新分支,但錯誤的提交到了 `main`
在 `main` 下創建一個新分支:
@@ -398,7 +379,6 @@ $ git reset --hard c5bc55a
(main)$ git checkout my-branch
```
-
### 我想保留來自另外一個 ref-ish 的整個文件
假設你正在做一個原型方案(原文為 working spike),有成百上千的內容。當你提交到一個分支,儲存工作內容:
@@ -430,7 +410,6 @@ $ git reset --hard c5bc55a
註:Spike solutions are made to analyze or solve the problem. These solutions are used for estimation and discarded once everyone gets clear visualization of the problem. ~ [Wikipedia](https://en.wikipedia.org/wiki/Extreme_programming_practices).
-
### 我把幾個提交(commit)提交到了同一個分支,而這些提交應該在不同的分支上
假設在 `main` 分支,執行 `git log` 的結果如下:
@@ -485,7 +464,6 @@ HEAD is now at a13b85e
(14)$ git cherry-pick 5ea5173
```
-
### 我想刪除上遊(upstream)刪除了的本地分支
比方說,在 GitHub 中,合併(merge)了拉取請求(pull request)後,就可以刪除掉分支。如果不準備繼續在這個分支上工作,刪除這個分支會使工作拷貝(working copy)更乾淨。
@@ -494,7 +472,6 @@ HEAD is now at a13b85e
$ git fetch -p
```
-
### 我不小心刪除了分支
如果你定期推送(push)到遠端(remote),多數情況下應該是安全的,但有時可能刪除了還沒推送的分支。
@@ -562,7 +539,6 @@ README.md foo.txt
看!我們把遺失的檔案找回來了。Git 的 `reflog` 在變基(rebase)出錯時也同樣有用。
-
### 我想刪除一個分支
刪除一個遠端分支:
@@ -583,7 +559,6 @@ README.md foo.txt
(main)$ git branch -D my-branch
```
-
### 我想從別人正在工作的遠端分支簽出(checkout)一個分支
首先,從遠端獲取(fetch)所有分支:
@@ -606,7 +581,6 @@ Switched to a new branch 'daves'
## 變基(rebase)與合併(merge)
-
### 撤銷變基或合併
你可能對一個錯誤的分支做了變基或合併,或者無法完成變基或合併。Git 在進行危險操作時,會將原本的 `HEAD` 存成 `ORIG_HEAD`,因此可以很容易的恢復到之前的狀態。
@@ -615,7 +589,6 @@ Switched to a new branch 'daves'
(my-branch)$ git reset --hard ORIG_HEAD
```
-
### 我做了變基,但是我不想強制推送(force push)
不幸的是,如果你想把變基的結果反映在遠端分支上,你必須強制推送(force push)。因為你改變了歷史,遠端不會接受使用快進(fast-forward),而必須強制推送。這就是許多人使用合併工作流程、而不是變基工作流程的主要原因之一,開發者的強制推送會使大團隊陷入麻煩。
@@ -631,7 +604,6 @@ Switched to a new branch 'daves'
參見[此 StackOverflow 討論串](http://stackoverflow.com/questions/11058312/how-can-i-use-git-rebase-without-requiring-a-forced-push)。
-
### 我需要組合(combine)幾個提交(commit)
假設你的工作分支將對 `main` 分支做拉取請求(pull request)。
@@ -737,7 +709,6 @@ Newer, awesomer features
(main)$ git merge --squash my-branch
```
-
#### 我只想組合(combine)未推送的提交
假設在推送到上遊前,你有幾個正在進行的工作提交,這時候不希望把已推送的提交也組合進來,因為其他人可能已經有提交引用它們了。
@@ -748,7 +719,6 @@ Newer, awesomer features
這會進行一次互動式變基(interactive rebase),只會列出還沒推送的提交。對這些提交重新排序或做 squash、fixup 都是安全的。
-
### 檢查分支上的所有提交是否都合併了
要檢查一個分支上的所有提交是否都已經合併進了其它分支,應該在這些分支的 `HEAD`(或任何提交)之間檢查差異:
@@ -767,7 +737,6 @@ Newer, awesomer features
### 互動式變基(interactive rebase)可能出現的問題
-
#### 編輯介面出現「noop」
如果你看到:
@@ -780,7 +749,6 @@ noop
* 確保 `main` 分支沒有問題
* 對 `HEAD~2` 或更早的提交變基
-
#### 有衝突的情況
如果不能成功的完成變基,你可能必須要解決衝突(resolve conflict)。
@@ -830,7 +798,6 @@ Changes not staged for commit:
(my-branch)$ git rebase --abort
```
-
## 儲藏(stash)
### 儲藏所有變化
@@ -861,7 +828,6 @@ $ git stash push working-directory-path/filename.ext
$ git stash push working-directory-path/filename1.ext working-directory-path/filename2.ext
```
-
### 儲藏時附加訊息
```sh
@@ -876,7 +842,6 @@ $ git stash push -m
如此可以在使用 `stash list` 時看到訊息。
-
### 應用(apply)指定儲藏
可以先列出擁有的儲藏:
@@ -897,7 +862,6 @@ $ git stash apply "stash@{n}"
$ git stash apply "stash@{2.hours.ago}"
```
-
### 儲藏時保留未暫存的內容
你需要先手動創建一個儲藏提交,然後使用 `git stash store`。
@@ -907,10 +871,8 @@ $ git stash create
$ git stash store -m "commit-message" CREATED_SHA1
```
-
## 雜項
-
### 複製所有子模組
```sh
@@ -923,7 +885,6 @@ $ git clone --recursive git://github.com/foo/bar.git
$ git submodule update --init --recursive
```
-
### 刪除標籤(tag)
```sh
@@ -931,7 +892,6 @@ $ git tag -d
$ git push :refs/tags/
```
-
### 恢復已刪除標籤(tag)
如果想恢復一個已刪除標籤,首先,找到無法觸及的標籤(unreachable tag):
@@ -946,7 +906,6 @@ $ git fsck --unreachable | grep tag
$ git update-ref refs/tags/
```
-
### 已刪除補丁(patch)
如果有人在 GitHub 上向你提出了拉取請求(pull request),但他接著刪除了他的分叉(fork),你無法複製他的提交或使用 `git am`。在這種情況下,最好手動的查看他們的提交,把它們拷貝到一個本地新分支,然後提交。
@@ -955,14 +914,12 @@ $ git update-ref refs/tags/
## 追蹤檔案(tracking files)
-
### 我只想改變一個檔案名字的大小寫,而不修改內容
```sh
(main)$ git mv --force myfile MyFile
```
-
### 我想從 Git 刪除一個檔案,但保留該檔案
```sh
@@ -971,7 +928,6 @@ $ git update-ref refs/tags/
## 組態(configuration)
-
### 我想為 Git 命令設定別名(alias)
在 OS X 和 Linux 下,Git 的組態檔案儲存在 `~/.gitconfig`。可以在 `[alias]` 部分設定一些快捷別名(以及容易拼錯的),如:
@@ -999,7 +955,6 @@ $ git update-ref refs/tags/
zap = fetch -p
```
-
### 我想快取一個倉庫(repository)的使用者名稱和密碼
假設有一個倉庫需要授權,這時你可以快取使用者名稱和密碼,而不用每次推送和拉取時都輸入一次:
@@ -1014,7 +969,6 @@ $ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds).
```
-
## 我不知道我做錯了什麼
如果你把事情搞砸了:你錯誤地重設、合併,或強制推送後找不到自己的提交了,抑或你做得很好,但你想回到以前的某個狀態。