標籤:dsc class mod git stage 沒有 change hat file
1、覆蓋提交
有時候我們提交完了才發現漏掉了幾個檔案沒有添加,或者提交資訊寫錯了。此時,可以運行帶有 --amend
選項的提交命令嘗試重新提交。
$ git commit --amend或# git commit --amend -m [提交內容說明]$ git commit --amend -m "Amend commit dsc"
例如,你提交後發現忘記了暫存某些需要的修改,可以像下面這樣操作。
$ git commit -m 'initial commit'$ git add forgotten_file$ git commit --amend
- 最終你只會有一個提交 - 第二次提交將代替第一次提交的結果。
2、取消暫存的檔案
接下來的兩個小節示範如何操作暫存地區與工作目錄中已修改的檔案。這些命令在修改檔案狀態的同時,也會提示如何撤消操作。
例如,你已經修改了兩個檔案並且想要將它們作為兩次獨立的修改提交,但是卻意外地輸入了 git add *
暫存了它們兩個。如何只取消暫存兩個中的一個呢?git status
命令提示了你。
$ git add *$ git statusOn branch masterChanges to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README modified: CONTRIBUTING.md
在 “Changes to be committed” 文字正下方,提示使用 git reset HEAD <file>...
來取消暫存。所以,我們可以這樣來取消暫存 CONTRIBUTING.md 檔案。
# git reset HEAD [檔案名稱]$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:M CONTRIBUTING.md$ git statusOn branch masterChanges to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> READMEChanges not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: CONTRIBUTING.md
雖然在調用時加上 --hard
選項可以令 git reset
成為一個危險的命令(可能導致工作目錄中所有當前進度丟失!),但本例中工作目錄內的檔案並不會被修改。不加選項地調用 git reset
並不危險 — 它只會修改暫存地區。
3、撤消對檔案的修改
如果你並不想保留對 CONTRIBUTING.md 檔案的修改怎麼辦?你該如何方便地撤消修改 - 將它還原成上次提交時的樣子(或者剛複製完的樣子,或者剛把它放入工作目錄時的樣子)?幸運的是,git status
也告訴了你應該如何做。在最後一個例子中,未暫存地區是這樣。
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: CONTRIBUTING.md
它非常清楚地告訴了你如何撤消之前所做的修改。
# git checkout -- [檔案名稱]$ git checkout -- CONTRIBUTING.md
$ git statusOn branch masterChanges to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README
git checkout -- [file]
是一個危險的命令。對那個檔案做的任何修改都會消失 - 你只是拷貝了另一個檔案來覆蓋它。除非你確實清楚不想要那個檔案了,否則不要使用這個命令。
iOS - Git 撤消操作(分布式版本控制系統)