Git(一)基本概念以及版本的创建与回退

一、基础概念部分:
1.git是什么:
是分布式的版本控制系统系统,由linus用c语言开发实现;
2.github是什么:
免费提高git的存储的网站;
3.git的特点:
1.版本控制:自定义一些版本,如 初版、终极版、终终极版…
2.分布式:同一个git仓库,可以分不到不同的机器上。可以自己找一台电脑,然后保存着所有的代码,24小时开机,工作的时候从这个服务器去克隆这个仓库,并且各自把各自提交的推送到服务器上。也可以也可以从中拉取别人的提交。或者使用github网站,由github来存储管理项目。
4.分布式和集中式区别:
分布式:工作前将中央服务器的所有代码拷贝到自己的主机上,然后进行开发,即使中央服务器挂掉了,我可以开发;
集中式:工作前也需要从中央服务器拷贝代码,但是拷贝的是我需要修改的文件,改完后再返回到中央服务器,但是中央服务器挂掉了,就不能正常开发。

二、git安装:

sudo apt install git 

安装完成后,在终端输入git,即可看到git所有操作:

king@ubuntu:~$ git

这些是各种场合常见的 Git 命令:

开始一个工作区(参见:git help tutorial)
   clone      克隆一个仓库到一个新目录
   init       创建一个空的 Git 仓库或重新初始化一个已存在的仓库

在当前变更上工作(参见:git help everyday)
   add        添加文件内容至索引
   mv         移动或重命名一个文件、目录或符号链接
   reset      重置当前 HEAD 到指定状态
   rm         从工作区和索引中删除文件

检查历史和状态(参见:git help revisions)
   bisect     通过二分查找定位引入 bug 的提交
   grep       输出和模式匹配的行
   log        显示提交日志
   show       显示各种类型的对象
   status     显示工作区状态

扩展、标记和调校您的历史记录
   branch     列出、创建或删除分支
   checkout   切换分支或恢复工作区文件
   commit     记录变更到仓库
   diff       显示提交之间、提交和工作区之间等的差异
   merge      合并两个或更多开发历史
   rebase     在另一个分支上重新应用提交
   tag        创建、列出、删除或校验一个 GPG 签名的标签对象

协同(参见:git help workflows)
   fetch      从另外一个仓库下载对象和引用
   pull       获取并整合另外的仓库或一个本地分支
   push       更新远程引用和相关的对象

命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。
查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的
帮助。

三、简单的使用:版本创建与回退
1.可以用git管理我某个目录下的代码,如:

新创建一个目录,我将用git管理该目录:
mkdir test_git

2.git进行管理前需要初始化
初始化前的目录:

king@ubuntu:~/mydir/test_git$ ls -al
总用量 8
drwxr-xr-x 2 king king 4096 May  2 21:33 .
drwxr-xr-x 3 king king 4096 May  2 21:33 ..

初始化后:

king@ubuntu:~/mydir/test_git$ git init
已初始化空的 Git 仓库于 /home/king/mydir/test_git/.git/
king@ubuntu:~/mydir/test_git$ ls -al
总用量 12
drwxr-xr-x 3 king king 4096 May  2 21:36 .
drwxr-xr-x 3 king king 4096 May  2 21:33 ..
drwxr-xr-x 7 king king 4096 May  2 21:36 .git

我们可以看到,初始化后会自动创建一个空的仓库即.git文件,git将通过管理.git来管理我这个目录下的项目。
3.使用下面两条命令可以创建一个版本:

git add 文件名
git commit -m "版本说明信息"

示例:创建code.cpp,然后添加到init初始化好的空仓库中,并且说明版本

1.创建一个文件code.cpp:cout<<"hello world"<<endl;
2.git add code.cpp
3.
king@ubuntu:~/mydir/test_git$ git commit -m "这是我的第一个版本"

*** 请告诉我你是谁。

运行

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

来设置您账号的缺省身份标识。
如果仅在本仓库设置身份标识,则省略 --global 参数。

fatal: 无法自动探测邮件地址(得到 'king@ubuntu.(none)')
king@ubuntu:~/mydir/test_git$ git config user.email "[email protected]"
king@ubuntu:~/mydir/test_git$ git config user.name "txp"
king@ubuntu:~/mydir/test_git$ git commit -m "这是我的第一个版本"
[master (根提交) c5593ed] 这是我的第一个版本
 1 file changed, 8 insertions(+)
 create mode 100644 code.cpp



commit          -m参数指定说明的版本信息,只是个说明信息
git log         可以查看历史版本信息

king@ubuntu:~/mydir/test_git$ git log
commit c5593ed7ebd4be3d2884605928cf7de480bd6da2 (HEAD -> master)
Author: txp <[email protected]>
Date:   Thu May 2 21:51:20 2019 +0800

    这是我的第一个版本
king@ubuntu:~/mydir/test_git$ 

示例:修改code.cpp文件中的内容,作为我第二个版本

打开文件,并且修改,重复执行以下命令:
king@ubuntu:~/mydir/test_git$ subl code.cpp 
king@ubuntu:~/mydir/test_git$ git add code.cpp 
king@ubuntu:~/mydir/test_git$ git commit -m "这是修改后的第二个版本"
[master 40e2c00] 这是修改后的第二个版本
 1 file changed, 1 insertion(+)


同样的,我们通过git log查看版本信息:
king@ubuntu:~/mydir/test_git$ git log
commit 40e2c0026454138c0b4195dcb0345b6d2e2646f1 (HEAD -> master)
Author: txp <[email protected]>
Date:   Thu May 2 22:15:47 2019 +0800

    这是修改后的第二个版本

commit c5593ed7ebd4be3d2884605928cf7de480bd6da2
Author: txp <[email protected]>
Date:   Thu May 2 21:51:20 2019 +0800

    这是我的第一个版本

四、以上的操作,git给我们做了什么:
在这里插入图片描述
1.这些版本可以看作是一个链表的结构,HEAD指针指向最新的版本;
2.版本回退:
HEAD~1 表示回退到前一个版本
HEAD~2 表示回退到前前一个版本

依次类推。
也可以使用HEAD^ 表示上一个版本
使用HEAD ^^表示上上一个版本

依次类推。

版本回退:

回退到上一个版本:
git  reset  --hard HEAD^


king@ubuntu:~/mydir/test_git$ git reset --hard HEAD^
HEAD 现在位于 c5593ed 这是我的第一个版本
king@ubuntu:~/mydir/test_git$ git log
commit c5593ed7ebd4be3d2884605928cf7de480bd6da2 (HEAD -> master)
Author: txp <[email protected]>
Date:   Thu May 2 21:51:20 2019 +0800

    这是我的第一个版本

实际上,git就是将版本链表的HEAD指针指向了前一个版本,但是版本2并没有被删除。

那再如何从版本1回到版本2呢:

方法1:在知道版本号的情况下

gir  reset  --hard 版本号

方法2:当重新打开终端不知道版本号的情况下

git reflog   查看操作的记录:

king@ubuntu:~/mydir/test_git$  git reflog 
c5593ed (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
40e2c00 HEAD@{1}: commit: 这是修改后的第二个版本
c5593ed (HEAD -> master) HEAD@{2}: commit (initial): 这是我的第一个版本

king@ubuntu:~/mydir/test_git$  git reset --hard 40e2c00
HEAD 现在位于 40e2c00 这是修改后的第二个版本

猜你喜欢

转载自blog.csdn.net/KingOfMyHeart/article/details/89764954