Git管理修改:
Git跟踪并管理的是修改,而非文件。比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
下面一个小例子来说明:
 修改Hello Git.txt,在里面添加一行
Hello Git.
This is a Git Test File;
Time:2017-01-08

然后添加到暂存区,然后查看版本库状态:

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

        modified:   Hello Git.txt
然后再修改Hello Git.txt:
Hello Git.
This is a Git Test File;
Time:2017-01-08 11:30(PM)

接着开始提交,继续查看状态:

$ git commit -m "添加了文件编辑时间"
[master c45bba6] 添加了文件编辑时间
 1 file changed, 1 insertion(+), 2 deletions(-)

$ git status
On branch master
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: Hello Git.txt

no changes added to commit (use "git add" and/or "git commit -a")
现在我们会发现还是有未被提交的文件。当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交
可以使用git diff HEAD -- Hello\ Git.txt命令查看本地和版本库最新版本的差异:
$ git diff HEAD -- Hello\ Git.txt
diff --git a/Hello Git.txt b/Hello Git.txt
index a17535e..3bfb6e5 100644
--- a/Hello Git.txt
+++ b/Hello Git.txt
@@ -1,3 +1,3 @@
 Hello Git.
 This is a Git Test File;
-Time:2017-01-08
\ No newline at end of file
+Time:2017-01-08(PM)
\ No newline at end of file
由此可以看到第二次修改的确实没有提交。
那怎么提交第二次修改呢?可以继续git add再git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
我们每次修改后,如果不add到暂存区,那就不会加入到commit中。
Git撤销修改:
我们有时候在对文件编辑后,需要撤销修改。使用 git checkout -- file可以丢弃工作区的修改
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
当add到暂存区,但是在commit之前发现提交的文件里面有问题,需要撤销暂存区,重新放到工作区:
$git reset HEAD readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

如果需要丢弃工作区的修改:
$ git checkout -- readme.txt
场景重现:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
现在,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把“stupid boss”提交推送到远程版本库,你就真的惨了……
Git删除文件:
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
$ rm test.txt
这个时候,仅仅是将本地工作区中文件删除掉了。版本库该文件还存在。
1、如果确实从版本库中删除该文件,可以使用git rm删除,并且git commit:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "delete file"
[master a4a701a] delete file
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
现在文件在版本库中就被删除了。
2、如果删除错了,想恢复可以使用 git checkout -- file命令恢复到文件的最新版本:
$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
只要文件被提交到版本库就不用担心文件误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
命令:
git diff HEAD -- <file> : 查看本地和版本库最新版本的差异
git checkout -- <file>: 丢弃工作区的修改
git reset HEAD <file>: 丢弃暂存区时
rm <file>:本地删除文件
git rm <file>:版本库删除文件(git commit  配合 )

标签: Git, Git学习, Git管理修改, Git撤销修改, Git删除文件

已有 10 条评论

  1. 以后会常来逛逛,博客很棒。

  2. 进来转转,博主新年快乐。

  3. 博客不错哟~会经常来逛逛的。

    1. 朋友,谢谢~ 谢谢来访~

  4. 嗨、博主你好,我是Feeey 我又来咯,你的博客真棒,做友链吗? 我网站名称:Feeey个人博客 http://www.feeey.com 如果交换友链挂上我的链给我留言吧。

  5. 三五营销

    最近很少浏览博客了,认真拜读下

  6. 嗨~我是Feeey 不小心进了你的博客,很棒。记得来我博客转转 http://www.feeey.com/

添加新评论