Git管理中的艺术

在日常的生活中,或多或少的会接触到Git,这个开源代码系统给我们提供了很大的方便。下面我就Git简介、创建、使用三个方面来给大家讲解一下。自己会的东西也不多,也是一个学习记录的过程。

0x00 Git简介

Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问.Git与你熟悉的大部分版本控制系统的差别是很大的。也许你熟悉Subversion、CVS、Perforce、Mercurial 等等,他们使用“增量文件系统” (Delta Storage systems), 就是说它们存储每次提交(commit)之间的差异。Git正好与之相反,它会把你的每次提交的文件的全部内容(snapshot)都会记录下来。
理论上,Git 可以保存任何文档,但是最善于保存文本文档,因为它本来就是为解决软件源代码(也是一种文本文档)版本管理问题而开发的,提供了许多有助于文本分析的工具。对于非文本文档,Git 只是简单地为其进行备份并实施版本管理。

0x01 建立并配置Git

0x0 检查SSH

因为GitHub会用到SSH,因此需要在shell里检查是否可以连接到GitHub:
ssh -T git@github.com
如果看到:

Warning: Permanently added ‘github.com,204.232.175.90’ (RSA) to the list of known hosts. 
 Permission denied (publickey).

则说明可以连接。


否则需要安装SSH

第一步

执行ssh-keygen -t rsa -C "你自己的github对应的邮箱地址"语句

注1:“”是需要的!
注2:是在ssh目录下进行的!

这里写图片描述
发现,id_rsa(私钥)和id_rsa.pub(公钥)这两个文件被创建了
(通过ls查看~/.ssh下面的所有内容查看)

第二步

将刚刚创建的ssh keys添加到github中
(1)利用gedit/cat命令,查看id_rsa.pub的内容
(2)在GitHub中,依次点击Settings -> SSH Keys -> Add SSH Key,将id_rsa.pub文件中的字符串复制进去,注意字符串中没有换行和空格。

第三步

再次检查SSH连接情况(在~/.ssh目录下):
输入如下命令:
ssh -T git@github.com
如果看到如下所示,则表示添加成功:
Hi alioth310! You’ve successfully authenticated, but GitHub does not provide shell access.

至此本地仓库与远程仓库的连接创建完成。

0x1 拥有自己的Github账号

这里写图片描述
一个全新的ubunt系统,需要安装Git(系统是不具有该工具的),方法如下:
在terminel中输入如下命令:
sudo apt-get install git git-core git-gui git-doc git-svn git-cvs gitweb gitk git-email git-daemon-run git-el git-arch11

0x2 建立仓库(仓库名字可以不和Github上的一样)

这里写图片描述
这里写图片描述

0x3 配置本地信息

下图是Github上建立完仓库之后给的信息
这里写图片描述

下面我们按照他的信息提示一步一步建立

yz@yz-ThinkPad-T430s:~/Git/test$ echo 123 > readme.md

yz@yz-ThinkPad-T430s:~/Git/test$ git add .

yz@yz-ThinkPad-T430s:~/Git/test$ git commit -m"first"

yz@yz-ThinkPad-T430s:~/Git/test$ git remote add origin git@github.com:actionyz/just_test.git


yz@yz-ThinkPad-T430s:~/Git/test$ git push --set-upstream origin master

0x02 Git使用

0x0 Git命令简介


这里写图片描述
这里写图片描述
上图很直观详细的说明了git命令之间的关系
Git在本地 主要分为工作区、stage、master三个阶段

0x1 图解Git分支

这里写图片描述
上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。

  • git add files 把当前文件放入暂存区域。
  • git commit 给暂存区域生成快照并提交。
  • git reset –files 用来撤销最后一次git add files,你也可以用
  • git reset 撤销所有暂存区域文件。
  • git checkout – files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。

这里写图片描述

  • git commit -a 相当于运行 git add 把所有当前目录下的文件加入暂存区域再运行。git commit.
  • git commit files 进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。
  • git checkout HEAD – files 回滚到复制最后一次提交

这里写图片描述

绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。

0x2 命令详解

DIff

有许多种方法查看两次提交之间的变动。下面是一些示例。
这里写图片描述

Commit

提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。 在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。

这里写图片描述

即便当前分支是某次提交的祖父节点,git会同样操作。下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。 这样,maint分支就不再是master分支的祖父节点。此时,合并 (或者 衍合) 是必须的。

这里写图片描述

如果想更改一次提交,使用 git commit –amend。git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。
这里写图片描述

Reset

reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。
如果不给选项,那么当前分支指向到那个提交。如果用–hard选项,那么工作目录也更新,如果用–soft选项,那么都不变。

这里写图片描述

如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用–hard选项,工作目录也同样。

这里写图片描述

如果给了文件名(或者 -p选项), 那么工作效果和带文件名的checkout差不多,除了索引被更新。

这里写图片描述

紧接着强制推送到远程分支:
git push -f

指令先写这么多如果以后用到在继续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值