HOME
NAVIGATION

探索Git(4)——管理、撤销修改、删除文件

☞探索git的合集

0.撤回工作区的修改

git checkout -- file

我先再添加一个checkoutTest.docx文件,并给他写上一行:git checkout, 然后使用git add、git commit指令把它添加到版本库。 我再给这个文件添加一行:delete it, 使用git checkout -- checkoutTest.docx, 再打开这个文件,又只剩下一行git checkout了。

之后我再给这个文件添加一行 in stage,并使用git add把它提交到暂存区。 现在我再给它添加一行:just in the work并使用git checkout, 点开文件,只剩下git checkout 和in stage

总结

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令.

现在继续使用git status查看情况

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: checkoutTest.docx

checkoutTest.docx还在暂存区,并提示可以用git reset HEAD file命令撤销暂存区的文件

1.撤回暂存区的修改

git reset HEAD file

用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区

打开文件,两行文字还在,使用git status

$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: checkoutTest.docx

已经不在暂存区啦

2.撤回版本库的修改、回到之前的任意版本

两种都可以,具体测试可以点这里
  • git reset -- hard HEAD^
  • git reset -- hard commit_id

3.删除在版本库中的文件

git rm

git rm后,文档使用git commit提交到版本库

首先,我把checkTest.docx使用add提交到stage,使用git status查看情况

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: checkoutTest.docx

然后我用commit把它提交到版本库

$ git commit -m"just a test"
[master 3bc53a0] just a test
1 files changed, 0 insertions(+), 0 deletions(-)

使用git rm

$ git rm checkoutTest.docx
rm 'checkoutTest.docx'

现在工作区已经没有checkoutTest.docx了

再次使用git status

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
deleted: checkoutTest.docx

提示已经可以直接commit了,倒是省去了git add

$ git commit -m"delete"
[master c7b842e] delete
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 checkoutTest.docx

搞定!