zoukankan      html  css  js  c++  java
  • Git入门篇

    一、分布式和集中式:

    • 首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    • 集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

    二、安装:

    》windows:去官网下载或者点击这里下载

    》设置/查询用户名和邮箱:

    //查询
    git config --blobal user.name
    //设置
    git config --blobal user.name 'David'
    //查询
    git config --blobal user.email
    //设置
    git config --blobal user.email'xxxxx@.....'

    三、创建版本库

    》0. git命令操作:

    pwd   //查看当前目录
    ls -ah //能查看到隐藏目录
    clear  //清除屏幕

    》1. 把当前文件作为一个git版本库:

    git init

    》2. 添加文件到git仓库:

    新建文件readme.txt 内容为:

    Git is a version control system.
    Git is free software.

    执行命令:

    git add readme.txt

    再执行命令:

    git commit -m 'wrote a readme file'

    -m参数:表示本次提交的说明,即‘wrote a readme file’;可以多次 git add 再一次性git commit

    四、历史版本管理

    》1. 查看历史版本

    git log
    
    git log --pretty=oneline   //更加整洁版本

    》2.退回历史版本和撤销退回历史版本

    》== 2.1 退回历史版本: git reset xxx

    git reset --hard HEAD^      //退回上1版本
    
    git reset --hard HEAD^^     //退回上2版本
    
    git reset --hard HEAD^^^    //退回上3版本
    
    git reset --hard HEAD~100   //退回上10版本
    
    git reset --hard commit_id  //退回到指定版本

    》== 2.2 撤销退回历史版本:(主要是找到历史版本的commit_id)

    git reflog  //查看历史操作,拿到commit_id,在用commit_id到指定版本

    》3. 工作区和暂存库
    这里写图片描述

    git status  //查看当前git的文件的状态

    》4. 查看修改的区别

    git diff HEAD -- readme.txt    //查看工作区和版本库中的区别

    操作完成以后对比:

    这里写图片描述

    》5. 撤销工作区的修改:

    》== 5.1 还原工作区

    git checkout -- readme.txt  //撤回最近一次的修改,同步到git add版本或者是git commit版本

    》== 5.2还原暂存区

    git reset HEAD readme.txt  //将提交到暂存区的内容全部撤销

    再执行步骤 5.1 的操作,既可撤回。

    》6. 删除文件:

    》== 6.1 确认删除文件

    test.txt是文件名

    rm test.txt  //删除文件
    
    git rm test.txt //删除暂存区的'test.txt'文件
    
    git commit -m 'remove test.txt' //提交删除

    》== 6.2 取消删除文件

    git reset HEAD test.txt //取消暂存区的修改(即取消删除文件)
    
    git checkout -- test.txt //取消工作区的修改(即取消删除文件)

    五、远程仓库

    》1. 注册远程仓库:

    》== 1.新建github帐号。

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

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

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

    》== 3. 登陆GitHub,打开“Account settings”,“SSH Keys”页面:
    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容 (找 keys相关的单词,如果有,就是它了。)

    》== 4.为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
    当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
    最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
    更详细的内容:传送门

    》2.添加远程仓库:

    git remote add origin git@github.com:michaelliao/learngit.git

    请千万注意,把上面的michaelliao替换成你自己的GitHub账户名

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

    下一步,就可以把本地库的所有内容推送到远程库上:

    $ git push -u origin master

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

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

    》3.推动送代码

    git push origin master  //推送到 远端的master分支

    》4.从远程库克隆

    git clone xxxxxxxxxx  /克隆github仓库代码  xxxx:在github中获得SSH

    Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

    六、分支管理

    》0. 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

    现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

    》1.创建和合并分支

    》== 1.1 创建分支

    git branch //查询分支
    
    git branch dev //创建dev分支
    
    git checkout dev //切换到dev分支
    
    
    git checkout -b dev  //创建并切换分支

    checkout: 切出分支;-b === branch缩写:创建分支

    》== 1.2 合并分支

    git merge dev  //将dev合并到master分支

    》== 1.3 删除分支

    git branch -d dev  //删除分支

    -d dev=== 删除dev分支

    》2.合并冲突

    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
    修改完成后提交。

    git log --graph --pretty=oneline --abbrev-commit  //查看分支合并图

    –graph查看合并图,–abbrev-commit附带commit信息

    》3. 分支管理策略

    》== 3.1 定义:
    合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    git merge --no-ff -m "merge with no-ff" dev  //将dev的修改合并到master分支,并创建一个新的commit提示

    因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

    》== 3.2 加参数和不加参数相比较:

    --no-ff参数:会生成一个行的conmit,也就是会在master分支中新增加一个版本。
    不加--no-ff参数:直接将HEAD指针指向了dev目录。会修改master分支的内容。

    》4.bug分支(存储当前修改,等要用的时候,再取出来)

    》== 4.1 当要存储当前的修改时,过一段时间再来恢复

    》== 4.2 用法:

    git stash       //存入 bug分支
    
    git stash list  //查看 bug分支 列表
    
    git stash pop stash@{0}  //恢复 bug分支,删除 bug分支中当前恢复的内容
    
    git stash apply stash@{0} //恢复,不删除
    
    git stash drop stash@{0}  //删除指定版本

    》5.强行删除分支:

    git branch -D dev   //dev是项目名

    》6.多人协作:
    多人协作

    git branch --set-upstream branch-name origin/branch-name   //指定本地dev分支与dev分支的链接
    /******
    *指定本地dev分支与dev分支的链接(上面的不行,试试这个)
    ******/
    git branch --set-upstream-to=origin/branch-name branch-name 
    
    git checkout -b branch-name origin/branch-name  //在本地创建和远程分支对应的分支
    
    git pull                                   //将远端的origin/div  拉去到本地的dev中
    
    git remote -v       //查看远程库信息

    七、标签管理(版本号)

    切换到需要打标签的分支上

    git tag v1.0  // 打标签
    
    git tag       //查看标签
    
    git tag v0.9 6224937  //指定id打标签  6224937 id号
    
    git show v0.9         //查看打标签的信息
    
    git tag -a v0.1 -m "version 0.1 released" 3628164  //用-a指定标签名,-m指定说明文字
    
    git tag -d v0.1  //删除某个标签
    
    git push origin v1.0  //推送某个标签到远程
    
    git push origin --tags  //一次性推送全部尚未推送到远程的本地标签
    

    如果标签已经推送到远程,要删除远程标签:

    git tag -d v0.9  //先从本地删除
    
    git push origin :refs/tags/v0.9  //然后,从远程删除。删除命令也是push

    传送

    学习文献:
    廖雪峰Git入门教程

  • 相关阅读:
    查看linux文件目录的大小和文件夹包含的文件数
    linux下oracle 基本操作
    中宇 设备证书 导入配置
    as5 samba 图形配置
    QQ用户免费申领新型电子密码卡
    GRUB引导下进Linux单用户模式的三种方式
    Iptables 规则 一些简单实例和详细介绍
    Linux上JDK的 安装和卸载 详细 (转)
    Linux/Unix命令之Ethtool (设置千兆网卡速度及模式)
    oracle 下 创建数据库和用户界面操作 和sql 语句 下的创建方法
  • 原文地址:https://www.cnblogs.com/wenwenwei/p/10017854.html
Copyright © 2011-2022 走看看