• Git和Github快速入门


    一、什么是Git?

            假设你在的公司要上线一个新功能,你们开发团队为实现这个新功能,写了大约5000行代码,上线没2天,就发现这个功能用户并不喜欢,你老板让你去掉这个功能,你怎么办?你说简单,直接把5000行代码去掉就行了,但是我的亲,说的简单,你的这个功能写了3周时间,但你还能记得你是新增加了哪5000行代码么?所以你急需要一个工具,能帮你记录每次对代码做了哪些修改,并且可以轻易的把代码回滚到历史上的某个状态。 这个神奇的工具就叫做版本控制。 

    版本控制工具主要实现2个功能:
    1. 版本管理
           在开发中,这是刚需,必须允许可以很容易对产品的版本进行任意回滚,版本控制工具实现这个功能的原理简单来讲,就是你每修改一次代码,它就帮你做一次快照。

    2. 协作开发
           一个复杂点的软件,往往不是一个开发人员可以搞定的,拿微信来举例,现在假设3个人一起开发微信,A开发联系人功能,B开发发文字、图片、语音通讯功能,C开发视频通话功能, B和C的功能都是要基于通讯录的,你说简单,直接把A开发的代码copy过来,在它的基础上开发就好了,可以,但是你在他的代码基础上开发了2周后,这期间A没闲着,对通讯录代码作了更新,此时怎么办?你和他的代码不一致了,此时我们知道,你肯定要再把A的新代码拿过来替换掉你手上的旧通讯录功能代码, 所以此时需要一个工具,能确保一直存储最新的代码库,所有人的代码应该和最新的代码库保持一致。

    二、Git的安装

    在Linux上安装Git
    首先,你可以试着输入git,看看系统有没有安装Git:

    $ git
    The program 'git' is currently not installed. You can install it by typing:
    sudo apt-get install git
    

      

     三、创建版本库

            什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

    $ mkdir git_trainning
    $ cd git_trainning/
     
    $ git init
    Initialized empty Git repository in /Users/alex/git_trainning/.git/

            瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
    如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

    现在我们编写一个txt文件:

    $ vim first_git_file.txt
     
    first time using git, excited!
    第一次用git哈哈
    

    第一步,用命令git add告诉Git,把文件添加到仓库暂存区:

    $ git add first_git_file.txt

    第二步,用命令git commit告诉Git,把文件提交到仓库:

    git commit -m "备注"

    当然,如果你编辑完文件后发现你编辑错了,需要改回到原来的代码,此时如果你没有git add到暂存区的话,可以使用下面命令撤回:

    git checkout -- 文件名

    如果已经是git add后的话,也可以撤回,使用下面命令:

    $git reset HEAD 文件名
    

    三、回滚

            好了,现在我们启动时光穿梭机,准备把first_git_file.txt回退到上一个版本,也就是“update again”的那个版本,怎么做呢?
            首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交be02137bb2f54bbef0c2e99202281b3966251952(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
    现在,我们要把当前版本回退到上一次修改的时候,就可以使用git reset命令:

    $ git reset --hard HEAD^
    HEAD is now at be02137 update again
    

      如果需要回滚到指定的版本,我们也可以通过查看日志,git log或者git reflog命令查看相应版本的“ID号”,然后使用下面命令撤回:

    git reset --hard 343sd23 回滚到指定的版本
    

      

    四、删除

    rm file 本地删除
    git add/rm file 提交/删除暂存区
    

      

    五、远程仓库Github

    由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

    第一步:创建SSH Key。

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

    $ ssh-keygen -t rsa -C "ray@126.com"    //邮箱是注册github的邮箱
    

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

    第二步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

    第三步,验证是否成功,在git bash里输入下面的命令:

    $ ssh -T git@github.com
    

     

    第四步,接下来就是把本地仓库传到github上去。

    $ git remote add origin git@github.com:triaquae/example.git  #添加远程仓库
    $ git push -u origin master  #关联后,第一次推送master分支的所有内容命令,此后,每次本地提交后,就可以使用命令git push origin master推送最新修改
    

    六、分支

    分支(dev):
    	git checkout -b branch_name		创建分支
    	git branch						查看当前所在分支
    	git checkout branch_name		切换到分支
    	git pull 						从远程更新代码到本地
    	git push						把本地代码推到远程
    	git merge branch_name			合并分支
    	
    	
    Bug分支:
    	git stash 把当前工作环境临时保存
    	git stash list 查看临时保存的列表
    	git stash apply 恢复之前保存的临时工作
    	git stash drop 删除当前临时保存的环境备份
    	git stash pop 恢复并删除临时保存的备份
    

     

    ps:

    一、上传项目到Github事例:

    二、在dev分支上修改文件后,切换到master分支上把在dev分支修改后的代码合并在一起(前提是master分支并没有在此期间修改文件)事例:

    三、在feature1分支上修改文件后,但是master分支也修改了文件,切换到master分支上把在feature1分支合并后上传到远程仓库github事例:

    七、忽略特殊文件.gitignore  

           在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。

           所有配置文件可以直接在线浏览:https://github.com/github/gitignore,在里面搜索python.gitignore然后下载下来

    忽略文件的原则是:

    • 忽略操作系统自动生成的文件,比如缩略图等;
    • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
  • 相关阅读:
    linux端口开放指定端口的两种方法
    关于JqueryCheck选中获取数据
    ASP.NET MVC 简单分页代码
    ASP.NET MVC4分页Site.CSS
    SQL索引的优缺点
    SQL字段数据类型小技巧
    数据库强制完整性的机制
    WinFrom饼形图
    WinFrom折线图
    WinFrom柱形图
  • 原文地址:https://www.cnblogs.com/ray-h/p/10419966.html
Copyright © 2020-2023  润新知