您的位置:首页 > 其它

git 的本地基本操作

qilixiang012 2014-07-13 11:49 99 查看
Git与传统CVS最大的区别就是Git能够在本地进行版本管理。为了实现这点,Git拥有本地仓库用于存储版本管理中的各种数据。

目录

Git眼中文件的3种状态
创建Git仓库
查看文件状态
暂存文件
忽略文件
比较文件
提交文件
跳过暂存区直接提交到仓库
移动文件
查看历史
撤销操作

Git与SVN最大的区别就是Git能够在本地进行版本管理。为了实现这点,Git拥有本地仓库用于存储版本管理中的各种数据。


Git眼中文件的3种状态 

Git管理的文件有3种状态:未暂存(unstaged)、已暂存(staged)和已提交(committed)。未暂存表示可能是新文件也可能是修改后的文件,这些文件还没提交到本地Git库中;已暂存表示把已修改的文件放在下次提交时要保存的清单中;已提交表示该文件已经被安全地保存在本地Git库中了。

三种状态在Git中对应三个逻辑工作区:工作目录(working directory)、暂存区(staging area)和本地仓库(git directory)。



本地仓库实际就是.git目录。该目录保存着元数据和对象数据库。每次使用'git clone'克隆仓库的时候,实际拷贝的就是这个目录里的数据。

工作目录就是我们进行文件编辑的目录。这些文件都是从Git目录中提取出来的。

暂存区是个文件,存放在Git目录中。这个文件记录着要在下次提交中保存的文件。


创建Git仓库 

创建Git仓库有两种方式,一种是使用'git init'在现有目录下创建新的Git仓库,二是使用'git clone'从已有的Git仓库克隆一个新的镜像仓库。


在现有目录中创建新的Git仓库

使用以下git init命令在当前目录下初始化Git仓库:

git init

初始化后,当前目录会出现一个.git的目录。此时的.git目录仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但还没开始跟踪管理项目中的文件。

我们可以使用以下命令添加要跟踪的文件并提交:

git add *.h # 添加要提交的文件

git add *.cpp

git commit -m "init project." # 提交添加的文件,并提交描述


从现有仓库克隆

可以使用git clone命令将已有仓库完全克隆到当前目录。Git的clone是将服务器上的Git数据完完整整地复制到本地,包括每个文件的每个版本。

git clone <url> [<fordername>]

fordername是可选的。


查看文件状态 

要查看各个文件的状态,可以使用'git status'命令。不同状态的文件对应的提示信息如下所示:
新建文件/未跟踪文件:”Untracked files:“。Git会提示使用'git add'命令包含需要提交的文件。
已修改文件:”Changes not staged for commit:“。Git会提示使用'git add'命令更新需要提交的文件或者使用'git checkout'命令忽略工作目录中的更改。
已暂存文件:”Changes to be committed:“。Git会提示使用'git reset'命令将文件从暂存区中移除。
已提交文件:”“


暂存文件 

为了能够将新建文件或已修改文件提交到Git仓库中,先要把文件添加到暂存区,这时候需要使用命令'git add'。

git add <FileName>|<DirectoryName>

假设文件已经暂存但还没提交到仓库,此时我们修改了该文件,但没使用'git add'命令将修改后的文件添加到暂存区,如果我们使用'git commit'命令提交的话,这时提交的文件内容是修改前的内容(暂存区中的文件),而非工作目录中的文件。为了能够将最新的内容提交到仓库中,我们需要再次使用'git add'命令将文件添加到暂存区。


忽略文件 

在实际开发中,有些文件我们是不想被跟踪的,比如编译生成的对象文件。

这时,我们可以创建一个名为'.gitignore'的文件,在该文件中指定要忽略的文件格式。

文件.gitignore的格式规范如下:
Git会忽略所有空行和以#开头的注释行。
可以使用标准的glob模式匹配。
如果要忽略目录要在匹配模式后跟反斜杠(/)。
要忽略模式以外的文件或目录,需要在模式前加上惊叹号(!)。


比较文件 

使用'git diff'命令比较文件的不同。'git diff'命令不带参数比较的是工作目录中当前文件和暂存区快照之间的差异。'git diff --cached'或'git diff --staged'比较的是暂存区的快照和上次提交时的快照之间的差异。


提交文件 

使用'git commit'命令可以将暂存区的快照提交到Git仓库中。

直接使用不带参数的'git commit'命令,将会启动文本编辑器来输入本次提交的说明。可以通过'git config'命令来更改默认的编辑器。使用'git commit -v'可以将修改差异的每一行都包含到注释中。退出编辑器,Git会丢掉注释行,将说明内容和本次更新提交到仓库中。

还可以使用'git commit -m <Description>'在一行命令中提交更新。


跳过暂存区直接提交到仓库 

在提交时,使用'git commit -a',Git便会把所有已跟踪的文件一并提交,而不需要使用'git add'将文件添加到暂存区。

移除文件

移除文件分为两种情况:一是从工作目录和仓库中都删除该文件;二是只从Git仓库中移除该文件,工作目录仍保留该文件。

对于第一种情况,可以使用'git rm'命令,将文件从工作目录和仓库中删除。还可以先手工从工作目录中删除文件,然后使用'git add'或'git rm'将删除操作操作提交到暂存区,最后提交给仓库。如果要删除的文件已经放到暂存区的话,则要用强制删除选项'-f'来删除。

对于第二种情况,可以给'git rm'添加'--cached'选项。例如:'git rm --cached README'


移动文件 

Git不跟踪文件移动操作。但是Git提供了'git mv <file_from> <file_to>'命令。Git的mv命令实际上是执行了3条命令:

mv <file_from> <file_to>

git rm <file_from>

git add <file_to>


查看历史 

使用'git log'命令查看提交历史。

不带任何参数的话,Git会按提交时间倒序列出所有的提交。每次提交都有一个SHA-1检验和、作者、电子邮件、提交时间,以及提交说明。

'-p'选项展开显示每次提交的内容差异。'-2'则显示最近的两次提交。在'-p'选项后添加'--word-diff'选项可以获取单词层面的对比。新增的单词用'{++}'括起来,被删除的单词用'{--}'括起来。

'git log'是个十分强大的命令,很多其他的选项可以参考Git的官方文档。


撤销操作 

可以执行3种撤销操作:修改最后一次提交、取消已暂存的文件、取消对文件的修改。


修改最后一次提交

可以使用'git commit --amend'命令修改最后一次提交的说明。执行命令后,将启动文本编辑器,修改说明后保存退出,就会使用新的说明覆盖旧的说明。如果是忘记暂存了某些修改,可以先使用'git add'命令将修改添加到暂存区,再使用上述命令提交。


取消已暂存的文件

使用'git reset HEAD <file>'命令取消已暂存的文件。


取消对文件的修改

使用'git checkout -- <file>'命令可以忽略工作目录中文件的修改。

转载自:http://ilanever.com/article/sitedetail.html?id=330
标签: