Git 基本操作

一、创建 git 仓库

创建一个文件夹

mkdir gitcode

进入 gitcode 文件夹

cd gitcode

查看 gitcode 下的目录

ls

创建 git 仓库,初始化 git

git init

查看隐藏目录

la

查看 git 下目录

tree .git/

如果出现 Command ‘tree’ not found,则需下载 tree,使用以下命令:

sudo apt-get install tree

注意:不要手动修改 git 仓库里面的文件

二、 配置本地仓库

配置名字

git config user.name "你的名字"

配置邮箱

git config user.email "你的邮箱"

查看配置

git config -l

如果你配置错误,也可以进行删除

// 删除 name
git config --unset name
// 删除 email
git config --unset email

添加 --global,表示以下配置项会在当前机器下的所有 git 仓库生效。

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

注意:全局配置如果要删除那么删除语句也需要加上 --global

git config --global --unset user.name
git config --global --unset user.email

三、认识工作区、版本库、暂存区

创建空文件 ReadMe

touch ReadMe

但是此时 git 还不能管理 ReadMe 文件。上文有提到不能手动修改 git 仓库里面的文件,所以我们只能将文件放在 gitcode 目录下,也被称为 git 的工作区;而 .git 称为版本库(仓库),它不属于工作区。

add 将工作区的修改写入暂存区,commit 将暂存区的修改写入 master,这才算真正的将修改写入了版本库。其中版本库存在 objects 对象,修改的工作区内容会写入对象库的一个新 git 对象中。而暂存区和 master 存的其实都是索引,HEAD 指向 master。

四、添加文件

进入文本编辑模式

 vim ReadMe

进入后默认是命令行模式,输入 i 进入输入模式,然后可以自己编辑内容,编辑完点击 esc 返回命令行模式,输入 :wq 保存并退出编辑模式。

查看文件内容

cat ReadMe

添加文件修改

// 添加指定文件的修改
git add ReadMe
// 添加 gitcode 目录下所有修改
git add .

提交文件修改

git commit -m "此次修改信息"

也可以一次性添加并提交,如下图:添加三个文件,add 文件 file1、file2、file3,最后commit 所有文件。

查看提交日志

git log

想要打印成一行也可以使用以下命令

git log --pretty=oneline

五、查看 .git 目录

上文提到 HEAD 指向 master,我们可以查看一下

通过查看确实是这样的,进入 master 再次查看

可以看出是一串字符串,我们可以发现,其实这串字符串就是我们最新一次 commit 的索引

可以从上面的 .git 目录树状图中 objects 里面看到此索引,进入该索引里面查看

git cat-file -p 067fb4fac12215b35affb5a0563046d27ecb7faa

注意:Linux 下复制快捷键为 Ctrl + Shift + C,粘贴快捷键为 Ctrl + Shift + V;

展示出来的信息里面显示了提交的作者和邮箱,parent 为上一次提交时的索引,以及提交时我们描述的信息,tree 我们不清楚,可以打印出来查看:

可以看出来是我们每一次提交的文件索引(对象),我们查看一下 ReadMe,

git cat-file -p a48e117f02f8321a76c44addad096c95be1df334

打印出来的信息是我们新增 ReadMe 文件里面的内容,所以我们对该文件的修改被 git 记录了下来,即我们每一次对这些文件的修改都会被 git 记录下来,这也就是为什么 git 能够管理每一次被修改的文件。

这边给上面的操作做一个总结,如下图:

六、添加文件2

如上图操作,创建 file4,add file4,创建 file5,最后 commit,为什么此时 commit 只有一个文件修改呢?这是因为 commit 是将暂存区的修改写入仓库中,而上述操作中,只有 file4 被放入暂存区,file5 在工作区中,没有在暂存区,所以要将 file5 写入仓库,需要先将其写入暂存区,再写入仓库。

注意:git 追踪管理的并不是文件,而是修改操作,比如你此次修改了哪些文件,如添加、删除文件,进入文件进行写入、删除代码,都是修改操作。

七、修改文件

修改文件 ReadMe,我往里面添加了一行 cat is not dog.

git status 可以查看在你最近一次提交之后是否有对文件进行再次修改,上图可以看出暂存区此时没有信息,工作区修改了文件 ReadMe

那么修改了文件我们应该怎样看到具体修改了哪些内容呢?git diff 文件 可以查看工作区和暂存区文件有哪些区别,git diff HEAD --文件 可以查看工作区和版本库文件的区别。

下图可以看出此时暂存区有修改

commit,然后 git status,可以看出此次 commit 之后,没有修改任何文件,即暂存区没有要提交的文件,工作区没有任何要 add 的文件。

八、版本回退

git 可以记录修改操作,那么我们也可以回退到我们修改的某个版本,但有工作区、暂存区、版本库,我们回退的到底是哪个呢?

git reset [--soft | --mixed | --hard] [HEAD]

上述命令可以回退,本质回退的是版本库里的内容,还可以回退到当前版本。下面先讲回退的是版本库里的内容。
其中 --soft 回退的是版本库中的操作,--mixed 回退的是版本库和暂存区中的操作,--hard 回退的是版本库、暂存区、工作区中的操作。如果不使用任何选项,则默认是 --mixed

上图操作,我们回退到 add first file 版本,也就是添加了 ReadMe 文件时的版本

查看目录,只有 ReadMe 文件,其他文件都没有了;查看 ReadMe 文件内容,只剩 hello cat!,正确回退。

查看对应的 log

但是如果此时我后悔了回退,是否还可以回到回退之前呢,当然是可以的,下面回退的索引是之前打印的 log 里面最新的索引,我们只需要回退到此索引就可以了。

但是如果我们清空屏幕或者说是关闭了服务器,得不到以前的索引怎么办呢?我们还可以通过以下命令得到以往的索引。

git reflog

可以看到每一个修改的版本前面都有一个黄色的索引,虽然这个索引比前面我们使用的短,但是这个索引也是和上面的一样的用法。

可以看到版本及 ReadMe 文件正确回退到我们需要的版本。

九、撤销修改

1、撤销工作区的修改

在 ReadMe 里面新增了一行 hello world.,现在我想要撤销这个操作,如何撤销

git checkout -- ReadMe

回到最近一次使用的 add 或 commit 操作,

2、撤销工作区、暂存区的修改

上面说到回退还可以回退到当前版本,当前版本为空,所以此处回退就是将工作区、暂存区回退到和当前版本库保持一致的状态。

在 ReadMe 文件里面添加一行,并且 add 到暂存区

此处回退可以使用 --mixed--hard,此处示范 --mixed,而默认的就是这个,所以可以不写

// 回退到当前版本
git reset HEAD [file]
// 回退到上个版本
git reset HEAD^ [file]
// 回退到上上个版本
git reset HEAD^^ [file]


上图可以看到暂存区没有了,修改的在工作区
下图撤销工作区的修改

如图,没有修改的操作了。

3、撤销工作区、暂存区、版本库里面的修改

如果工作区、暂存区、版本库里面都存在修改,如何撤销呢?
前提:commit 之后没有 push,push 就是将本地仓库内容提交到远程仓库

在 ReadMe 中添加一行代码,并且 add、commit

此时工作区、暂存区、版本库里面都有修改,可以使用 --hard 回退到上一个版本

git reset --hard HEAD^

十、删除文件

如何删除版本库中的文件

以下操作 rm 删除的是工作区的文件,暂存区、仓库里面的文件并没有删除

通过以上的学习,可以知道,将上述操作提交到仓库中就可以删除仓库里面的 file5 了

下图操作删除了暂存区里面的 file5

可以看出仓库里面的 file5 也被删除了

下面简化删除文件的步骤:

git rm file4

直接删除了工作区、暂存区的文件

删除版本库的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值