Git 教程 - 檔案操作

Jinku Hu 2023年1月30日 2018年7月19日
  1. Git 刪除檔案
  2. Git 重新命名檔案
  3. Git 移動檔案
Git 教程 - 檔案操作

在本教程中,你將學習 git 中的檔案操作比如如刪除、移動和重新命名檔案。

Git 刪除檔案

最簡單的將檔案從跟蹤中刪除並最終從儲存庫中刪除的方法是 git rm

$ git rm tes2.txt
rm 'test2.txt'

執行該命令後,test2.txt 將從工作資料夾中刪除該檔案,並且此刪除資訊已新增到暫存區。

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	deleted:    test2.txt

Git 重新命名檔案

如果直接在工作區中重新命名檔案,Git 將此操作視為兩個操作,第一是刪除舊檔案,第二是將新命名的檔案新增到工作區中。

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	deleted:    test1.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	test1_rename.txt

no changes added to commit (use "git add" and/or "git commit -a")

這種操作的缺點是它會破壞檔案的版本歷史記錄,此後你無法檢視此重新命名之前的歷史修改記錄,這在版本控制中是不可取的。

Git 有一個重新命名命令來解決這個歷史修訂記錄連結斷開的問題 - mv

$ git mv test1.txt test1_rename.txt

mv 的意思就是 move,在這裡,重新命名檔案也就意味著 test1.txt 檔案被移動重新命名為 test1_rename.txt

如果你現在檢查 git statusrenamed 就會出現了,

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	renamed:    test1.txt -> test1_rename.txt

Git 移動檔案

與重新命名檔案類似,在 git 中移動檔案也使用 git mv 命令,只是目標資料夾與被移動檔案原本的資料夾不同。

$ git mv test1_rename.txt move/test1.txt

這裡,資料夾 move 是目標資料夾,test1.txt 是檔案 test1_rename.txt 移動後的新檔名。

我們來看看 git status

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	renamed:    test1_rename.txt -> move/test1.txt

你可以看到,它也是一個 renamed 操作,只是目的地資料夾不同。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn