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入门教程

  • 相关阅读:
    Atitit 趋势管理之道 attilax著
    Atitit 循环处理的新特性 for...else...
    Atitit 2017年的技术趋势与未来的大技术趋势
    atitit 用什么样的维度看问题.docx 如何了解 看待xxx
    atitit prj mnrs 项目中的几种经理角色.docx
    Atitit IT办公场所以及度假村以及网点以及租房点建设之道 attilax总结
    Atitit 工具选型的因素与方法 attilax总结
    Atitit.团队文化建设影响组织的的一些原理 法则 定理 效应 p826.v4
    Atiitt 管理方面的误区总结 attilax总结
    Atitit 未来趋势把控的书籍 attilax总结 v3
  • 原文地址:https://www.cnblogs.com/wenwenwei/p/10017854.html
Copyright © 2011-2022 走看看