Home Git本地仓库的使用
Post
Cancel

Git本地仓库的使用

新仓库初始化

运行git init来初始化仓库

它会创建一个隐藏的文件夹.git

文件的添加和提交

在这个文件夹里面创建一个today.txt的文件。

这时使用git status来查看有什么变化。

它告诉我有一个还未追踪的文件,并提示我可以使用git add <file>...把它加进去,执行git add -A,再次使用git status

状态变了,说明add成功。再看看它的提示Changes to be committed,也就是说现在可以执行commit了。注意,只有被add到暂存区的更新才会被提交进入repo。提交前,如果对WorkSpace的文件进行修改,而没有被添加到暂存区,那么提交进repo中的只是暂存区的更新,WorkSpace修改的部分不会提交进repo中的。

执行git commit -m "提交信息"将文件提交到repository里。提交信息用英文的双引号括起来。

这时运行git log就可以看到提交的记录了,git log显示内容依次是:

  • 此次提交对应的版本号
  • 提交人:姓名 邮箱
  • 提交的时间
  • 提交版本修改的内容:就是我们commit -m "xxx"里的xxx

文件的修改

接着修改文件内容。

我们用git status看看有什么变化。

这和之前的提示不一样了。之前是这个。

比较一下就会看到,之前的是添加新文件,当时文件还没被追踪(untracked),而这次是更改已经追踪(tracked)的文件。现在我们通过git看看文件做了哪些变化,执行git diff

它默认跟最新的一个commit进行比较。红色(前面有减号-)表示删除,绿色(前面有加号+)表示添加。因此,在git看来,我们是删除了原来那一行,并添加了新的两行。这在文件内容特别多的时候效果比较明显。当然,我们也可以把WorkSpace中的状态和repo中的状态进行diff,命令如下:git diff HEAD~n,这个命令在以下情况可以使用:

  • 你忘记改了什么,又想知道。
  • 别人发给你新版本,你想知道更改了什么。

假如我现在想撤销这些更改,执行git checkout -- .(git add之前)就行了。

执行git status看看,上一个status的提示已经不见了。再来看看文件,已经复原了,那么再次进行修改。

1
2
git add -A
git commit -m "将[自己]改为[米娜桑]"

git log看看提交(commit)记录。

现在有两个提交了。

版本回退

现在试着将文件回退到第一个commit时的状态。从刚才的git log我们看到两行黄色部分是以commit开头的,后面接着一串字符。这一串字符是16进制的数,是一串哈希值。我们叫它版本号就行了。开始回退,执行git reset --hard 1df0573(取版本号前7位就可以了)。

这里提示HEAD已经更改指向至1df0573了。此时文件内容已经回到第一个版本的状态。这里文件的修改日期被更改为现在的时间 2016\6\2 19:29,这是由于文件的修改日期是由Windows修改的,因为它检测到这个文件被修改了。而我们刚才从最新版本回退到现在这个版本,就像是我们手动修改了文件内容一样,事实上是由git来完成的。现在再执行git log

新版本的commit记录不见了,这就是reset --hard的力量,那怎么回到最新版呢?先执行git reflog

可以看到HEAD的变化情况。第一行表示当前HEAD所在的版本号是1df0573,而之所以在这个版本号,是由于我们执行了reset命令。看第二行,它告诉我们,这个HEAD所在的版本号是ad93b89,这个版本号是在执行commit之后形成的。此时我再用一次reset,git reset --hard ad93b89,将HEAD指向ad93b89, 同时查看log。

回到第一次reset前的状态了。

清除未追踪的文件

现在看看如何用命令删除新加的文件。首先手动创建个文件,用来演示。

用checkout是没办法删除掉它的,使用git clean -xf

这个命令的杀伤力比较大,它删除当前目录下所有没有track过的文件。不管它是否是.gitignore文件里面指定的文件夹和文件。

This post is licensed under CC BY 4.0 by the author.