git应用与github

git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是[Linus Torvalds]为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

ssh

SSH 为 [Secure Shell](https://baike.baidu.com/item/Secure Shell) 的缩写,是建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

git 使用 rsa,rsa 要解决的一个核心问题是,如何使用一对特定的数字,使其中一个数字可以用来加密,而另外一个数字可以用来解密。这两个数字就是你在使用 git 和 github 的时候所遇到的 public key 也就是公钥以及 private key 私钥。本地用私钥,上传公钥。

本地创建ssh key

$ ssh-keygen -t rsa -C "your_email@youremail.com"

~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。标题建议和仓库名一致, 便于区分.

验证:$ ssh -T git@github.com

与github建立连接

1.github上建立仓库

2.本地建立仓库 git init // 把这个目录变成Git可以管理的仓库,本地多一个.git文件夹,用来跟踪管理版本库

mac第一次建仓库出现问题:xcode-select --install

git clone username@host:/path/to/repository 相当于创建一个远程仓库的克隆版本

3.关联github仓库 git remote add origin git@github.com:Hexagon-Man/HelloWorld.git

4.提交代码

git add 添加文件

git add . // 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录

git remote add origin git@github.com:xxx/xxx.git // 关联远程仓库

git commit -m "" // 提交到了 HEAD,但是还没到你的远端仓库

git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin HEAD:refs/for/master // refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的

git push -u origin master // 把本地库的所有内容推送到远程库上

git仓库结构

本地仓库由 git 维护的三部分组成。第一个是 工作目录,它持有实际文件;第二个是 暂存区(Index),它像个缓存区域,临时保存改动;最后是 HEAD,它指向你最后一次提交的结果。

git命令

git checkout -b f //创建并切换分支

git branch -d f //删除分支

git branch -a # 查看本地和远程的所有分支

git push origin <branch> //分支推送到远端

git pull //获取fetch并合并到本地

git rm 文件 //将文件从暂存区和工作区中删除,加-f强制删除

git rm --cached 文件 //将文件从暂存区中删除

删除缓存区所有文件命令: git rm -r --cached . #主要这个点一定要写

git log --oneline

git空间与命令

Working Directory:即工作区。操作系统层面的目录树结构,也可以理解为一个tree目录对象

Stage(Index):即暂存区,为等待Commit的文件列表。是以扁平的文件清单实现的,不过从理解层面上也可以理解为tree目录对象

Local Repository(History):本地版本库。有向无环图,其每一个节点都是一个tree目录对象

Remote Repository:远程版本库。有向无环图,其每一个节点都是一个tree目录对象
image
转自:https://www.cnblogs.com/kekec/p/9248487.html

git status 是看暂存区的改动,如果commit了,暂存区就空了。

应用:在本地进行了add-commit还未push,想要撤销本地的本次commit

git log 查看commit id,拿上一个commit id,而不是最新的commit id(这是要回退的id)
git reset :回退到某个版本,不清空暂存区,工作区也不变,需要再提交的话需要add后commit
git reset --soft:回退到某个版本,不清空暂存区,工作区也不变,需要再提交的话直接commit
git reset --hard:彻底回退到某个版本,撤销的commit中的所有更改都被冲掉,暂存区为空了,工作区也恢复为版本库版本。

应用:本地修改了,没有add,想撤销修改变为版本库里的

用git reset --hard 解决 //恢复为本地库里的内容

用 git checkout -- hello.go 比较好,相当于清空了暂存区内容,工作区内容也变为修改前的。

用 git rm --cached hello.go 不行,从暂存区中删除文件,会显示delete,修改的也会记录,只不过还需要add,不改变工作区。
不懂了,不管是有没有add,都会加一条delete,而不是把原本的删掉。

应用:git commit之后,想再在这个commit里加add

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交——第二次提交将代替第一次提交的结果。

应用:本地版本恢复为远程版本

git pull <远程主机名> <远程分支名>:<本地分支名>

git pull origin master

待续

posted @ 2021-08-13 19:37  HexagonMan  阅读(36)  评论(0)    收藏  举报