一、结构组成
仓库:就是我的第三篇中,执行了git init
的目录
版本库:工作区中有一个隐藏目录.git,这个目录不属于工作区,而是t的版本牌,是t管理的所有内容
暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。
分支:版本库中包含若干分支,提交的文件存储在分支中
1.文件首先出现在工作区,如果需要有t管理,则通过git add xx将文件添加到暂存区
通过git commit…将暂存区的文件y一次性提交到分支中, 同时提交行为将触发gt的一次commit日志记录。
2.关于分支是t的一个重要概念,后续讲解,master分支是安装t时默认创建的
二、文件状态
切换到某分支,在工作区操作其文件,文件的状态会有如下可能:
·未服踪
工作区中新创建的文件,gt中并未保存它的任何
记录
git add增加到暂存时,即可建立跟踪
·修改
已跟踪的文件,在工作区被修改了。
·暂存
git add的文件,处于暂存状态。
每次暂存的是文件的当时状态,如果暂存后又做了修改,需要再次 git add文件。
每次提交时,是将所有暂存的文件提交。
·提交
git commit的文件,处于提交状态,
每次提交,增加一个快照版本,分支指针后移,指向最新版本。
三、文件状态查看
在工作区中一系列操作后,要查看文件状态:
执行:git status
可以看到文件状态:
On pranch mastera分支master Changes to be committed#说明有内容在暂存区可以提交
(use"git reset HEAD .…"to unstage)
modified:hello.txt On branch mastera分支master Changes to be commited:#说明有内容在暂存区可以提交
(use"git reset HEAD "to unstage)
modified:hello.bt Changes not staged for commit:#说明有内容没有增加到暂存区
(use"git add …to update what will be committed)
(use"git checkout-"to discard changes in working directory)
modified:helloxt
细节:通过 git diff
比对变动情况:
git diff hello1e.txt
比对工作区和暂存区若暂存区没有,比分)
git diff HEAD--hello1e.txt
比对工作区和分支中的最新结果(了解或忽略此点)
git diff--staged hello1e.txt
对比暂存和分支中的最新结果(了解或忽略此点)
坑:-hello1e.txt之间需要分隔,不能写成–hello18.txt
四、撤销修改(了解)
·工作区撤销
|如果在工作区文件中添加了如下一行,你突然意识版章可能不保,所以需要撤销修改
1 ...
2 My stupid boss still prefers svN.
执行:git checkout--hello9.txt
可以缴销到最近一次git add
或git commit
的状态即:如果暂存区有此文件,则将暂存区中的文件内容恢复到工作区。
如果暂存区没有此文件,则将分支中的文件内容恢复到工作区。
注意:--hel1lo9.txt
一定不能少写--
,否则就是其他语意啦。
·暂存区撤销
如果在工作区中修改了文件并发送到暂存区中,但文件中有需要嫩销的内容则可以执行:
git reset HEAD hell09.txt
将helo.bt在暂存区的内容清除。
然后可执行:git checkout --hello9.txt
回退到上一个版本