• Git入门


    本文参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

      先扯一句,对于Linus花了两周时间用C写了Git这种行为,渣渣表示这是对牛X最好的诠释。
    一、Git简介
      Git嘛,就是一个分布式版本控制系统,GitHub则是提供Git仓库托管服务的。分布式是相对于集中式而言的,先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    二、Git安装

      pass;

    三、创建版本库

      1、首先选择一个合适的地方

      2、$ git init 将这个目录变成Git可以管理的仓库

      3、每次修改后要先将修改放入staged区

        $git add/rm <file>

        如果是批量修改,可用 $ git add -A

      4、告诉Git,把文件提交到仓库

        $ git commit -m "description of change"

      5、$ git status 查看当前仓库状态

      PS:git的命令提示真的是极好的!!!

    四、时光机穿梭

      $ git log  查看历史纪录,加上参数 --pretty=online 可以减少输出信息。如:

    $ git log --pretty=oneline
    3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
    ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
    cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

      3628164...882e1e0的是commit id(版本号),在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

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

      $ git reset --hard 3628164 指定版本号回退,版本号不用写全,写个差不多就行,Git会自动去找

      $ git reflog 用来记录每一次命令

      工作区和暂存区的概念:

      工作区就是能看到的目录

      版本库就是隐藏的.git目录

      Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

      git-repo

      git add把文件添加进去,实际上就是把文件修改添加到暂存区;

      git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

      因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

      $ git diff HEAD -- <file> 查看工作区和版本库里面最新版本的区别

      $ git checkout -- <file> 丢弃工作区的修改

      $ git reset HEAD <file> 可以把暂存区的修改撤销掉

    五、远程仓库

      在GitHub上添加远程仓库

    第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

    你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

    如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

    github-addkey-1

    点“Add Key”,你就应该看到已经添加的Key:

    github-addkey-2

    为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

    当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

    在GitHub上创建一个新的仓库后,把本地仓库的内容推送到GitHub仓库 

    $ git remote add origin git@github.com:<user_name>/<repo_name>.git

    这样子就添加了了一个叫origin的远程库,下一步就是把本地库的所有内容推送到远程库上:4

    $ git push -u origin master

    把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。关联起来以后只需要通过命令:

    $ git push origin master

    从远程库克隆一个本地库(SSH方式)

    $ git clone git@github.com:<user_name>/<repo_name>.git

    六、分支管理

    $ git branch 查看分支

    $ git branch <branch_name> 创建分支

    $ git checkout <branch_name> 切换分支

    $ git checkout -b <branch_name> 创建+切换分支

    $ git merge <branch_name> 合并某分支到当前分支

    $ git branch -d <branch_name> 删除分支

    $ git log --graph 查看分支合并图

    $ git log --graph --pretty=oneline --abbrev-commit

    $ git merge --no-ff -m "<commit>" <branch_name> 合并分支禁用Fast forward

    分支策略在实际开发中的应用

    git-br-policy

    七、标签管理

    $ git tag <tag_name> 新建一个标签,默认为HEAD,也可以指定一个commit id

    $ git tag -a <tag_name> -m "<commit>" 指定标签信息

    $ git tag -s <tag_name> -m "<commit>" 用PGP签名标签

    $ git tag 查看所有标签

    $ git push origin <tag_name> 推送一个标签

    $ git push origin --tags 推送全部未推送过的本地标签

    $ git tag -d <tag_name> 删除一个本地标签

    $ git push origin :refs/tags/<tag_name> 删除一个远程标签

  • 相关阅读:
    POJ 2975 Nim
    分治法习题
    排序与查找习题
    查找
    SQL注入之Sqli-labs系列第二十五关(过滤 OR & AND)和第二十五A关(过滤逻辑运算符注释符)
    SQL注入之Sqli-labs系列第二十四关(二阶注入)
    SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)
    SQL注入之Sqli-labs系列第二十一关(基于复杂性的cookie POST报错注入)和二十二关(基于双引号的cookie POST报错注入)
    SQL注入之Sqli-labs系列第二十关(基于头部的cookie POST报错注入)
    json csrf
  • 原文地址:https://www.cnblogs.com/LinKArftc/p/4989097.html
Copyright © 2020-2023  润新知