工作区(Working Directory)
在电脑里能看到的目录,有一个隐藏目录.git
,是Git的版本库。
版本库(Repository)
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个支
master
,以及指向master
的一个指针叫HEAD
。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,git reset HEAD^
**************************************************************************
1)工作区jdbc.properties已更改
$ git status
On branch develop
Your branch is up-to-date with 'origin/develop'.
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: src/jdbc.properties
modified: src/struts.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/
cs_1221.iml
out/
no changes added to commit (use "git add" and/or "git commit -a")
nanayin@201605050385- MINGW64 /e/IdeaProjects/CustomerService/cs_1221/src (develop)
$ cat jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/credit
#jdbc.username=root
#jdbc.password=123
#jdbc.url=jdbc:mysql://10.151.15.103:13306/credit
#jdbc.username=root
#jdbc.password=123456
#jdbc.url=jdbc:mysql://10.151.15.100:3306/intell_kefu
#jdbc.username=intell_kefu
#jdbc.password=123qwe
2)把工作区的更改,add到暂存区里
nanayin@201605050385- MINGW64 /e/IdeaProjects/CustomerService/cs_1221/src (develop)
$ git add jdbc.properties
nanayin@201605050385- MINGW64 /e/IdeaProjects/CustomerService/cs_1221/src (develop)
$ git status
On branch develop
Your branch is up-to-date with 'origin/develop'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: jdbc.properties
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: struts.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
../.idea/
../cs_1221.iml
../out/
3)撤销add到暂存区的修改
nanayin@201605050385- MINGW64 /e/IdeaProjects/CustomerService/cs_1221/src (develop)
$ git reset jdbc.properties
Unstaged changes after reset:
M src/jdbc.properties
M src/struts.xml
4)暂存区的修改,继续commit到本地仓库
nanayin@201605050385- MINGW64 /e/IdeaProjects/CustomerService/cs_1221/src (develop)
$ git commit -m 'test'
[develop 8b42971] test
1 file changed, 7 insertions(+), 3 deletions(-)
nanayin@201605050385- MINGW64 /e/IdeaProjects/CustomerService/cs_1221/src (develop)
$ git status
On branch develop
Your branch is ahead of 'origin/develop' by 1 commit.
(use "git push" to publish your local commits)
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: struts.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
../.idea/
../cs_1221.iml
../out/
no changes added to commit (use "git add" and/or "git commit -a")
5)撤销本次撤销本次commit提交
git reset HEAD^
6)误删除
在工作空间中删除了一个文件,
一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
:
另一种情况是删错了,把误删的文件恢复到最新版本: git checkout -- test.txt
1.1 git reset HEAD
暂存区的目录树会被重写,会被master分支所指向的目录树所替换,但是工作区不受影响
1.2 git rm --cached <file>
会直接从暂存区删除文件,工作区不受影响
1.3 git checkout . 或者 git checkout --<file>
会用暂存区全部的文件或者指定的文件 替换工作区的文件
1.4 git checkout HEAD . 或者 git checkout HEAD <file>
会用HEAD指向的master分支中的全部或者部分文件替换暂存区和工作区中的文件