• 菜鸟级Git GitHub创建仓库


    菜鸟标准:知道pwd ,rm 命令是什么。
    一、Git 是什么。
    git 是目前世界上最先进的分布式版本控制系统
    二、SVN与Git
    1.版本控制系统
    SVN 是集中式版本控制系统,版本库是集中放在中央服务器的。
    Git 更倾向于分布式模式。也就是每个开发人员从中心版本库/服务器上 checkout 代码后会在自己的机器上克隆一个自己的版本库。当突遇没有网络的环境时,分布式的操作模式将是一个巨大的恩赐。
    你不必做出补丁包,通过email 方式发送出去,只需要创建一个分支,向项目团队发送一个推请求,就能让你的代码保持最新,而且不会在传输过程中丢失。GitHub.com 就是其中一个优秀的案例。
    2.数据方式存储
    Git 元数据存储方式,而svn 按文件 。.git 目录处于机器上的一个克隆版的版本库,它拥有中心版本库中所有东西,如标签,分支,版本记录等。如果你把.git 目录的体积和.svn 相比较,会发现它们相差很大。
    3.分支不同
    分支在SVN中就是版本库中的另一个目录。如果你想知道是否合并了一个分支,你需要手工运行命令: svn propget svn:mergeinfo 来确认代码是否被合并。所以,经常会发生分支被遗漏的情况。
    Git 却可以从同一个目录下快速在多个分支间切换。因为很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
    4.全局的版本号
    Git 没有,SVN有。SVN的版本号实际是任何一个相应时间的源代码快照,因此也被认为是从CVS 进化到SVN 的最大突破。也有开发者指出,可以使用GIT 的 SHA-1 来唯一的标识一个代码快照。用途相同,但并不能完全代替SVN 里容易阅读的数字版本号。
    5内容完整性
    Git 内容存储使用的是SHA-a 哈希算法。这能确保代码内容的完整性,尤其遇到磁盘故障和网络问题时降低对版本库的破坏。
     
    版本控制要结合公司策略选用合适的工具。版本控制不只是工具,工具也不只是代码管理。
    由于 SVN 是集中式,会出现耦合。所以要求开发代码规范。当然,任何不可运行的代码的提交都是没有意义的(即提交的粒度:原子性)。
     
    三、安装Git
    msysgit 是 windows版的Git ,可直接网上下载。安装成功后,在开始菜单里 “Git - Git Bash” 会弹出一个类似命令窗口,表示Git安装成功。
    因为Git 是分布式版本控制系统,需要填写用户名和邮箱作为一个标识。所以,在命令行中输入:
    git config --global user.name "yourname"
     
    git config --global user.email "youremail@qq.com"
     
    注:global 表示机器上所有Git 仓库都会使用这个配置。
     
    四:操作步骤
    1.创建版本库 repository
    举例:在D 盘 gitdemo文件目录下新建一个gitdemo1 版本库
     
     
    2.修改并提交仓库
    在gitdemo1 目录下新建记事本 readme.txt, 内容为1
    此时,在readme.txt 增加一行 22
    在命令行中输入git status , git diff readme.txt
     
    我们可以看到,readme.txt 内容从一行1 改成 二行22 内容
    此时可以放心提交到仓库了。
    git add
    git commit
     
     
    3.版本回退
    在readme.txt 中增加一行 333
     
    git log 命令显示从最近 到最远的显示日志
    可以使用git log -pretty=oneline 演示如下
    版本回退操作,有两种命令。
    1.git reset -hard HEAD^ , 如果回退到上上个版本,改成HEAD^^, 回退100 个版本
    git reset -hard HEAD~100
     
    版本回退,使用 git reset --hard
    问题:已经关掉一次命令行,或者333 的内容版本号我们并不知道,我们如何知道 要增加333 内容的版本号呢。
    git reflog
     
    增加内容333的版本号为 fa2740f
    git reflog --hard fa2740f 来恢复
     
    4工作区与暂存区
    工作区:电脑上看得到的目录,或者需要新建的目录文件等
    版本库:工作区有一个隐藏目录.git , 这属于版本库。版本库中存放很多东西,其中最重要的就是stage (暂存区), 还有Git 为我们自动创建了第一个分支master , 以及指向 master 的一个指针HEAD
     
    前文已知道,Git 提交文件到版本库有两步
    1.git add , 把文件添加到暂存区
    2. git commit 提交更改,把暂存区的所有内容提交到当前分支上。
     
    在readme.txt 增加一行4444, 新增文件 test.txt
     
     
    git add 命令添加到暂存区中,git status 查看状态
    git commit 提交全部文件
     
     
    5.Git 撤销修改和删除文件操作
    1.撤销修改
    在readme.txt 文件中增加一行 55555
    在我未提交前,我发现添加 55555 内容有误,可以有几种方法恢复以前版本。
    第1:如果知道要删除的内容,直接手动更改,然后add 添加到暂存区,最后 commit 掉
    第2:恢复到上一个版本: git reset --hard HEAD^
     
    可否直接使用撤销命令呢?
    cat readme.txt 查看当前内容
    先git status 查看一个当前状态
    git checkout --file 把文件在工作区做的修改全部撤销。这里有两种情况:
    第1:readme.txt 自动修改后,还没有放到暂存区,使用撤销修改就回到和版本库一模一样的状态
    第2.另外一种是readme.txt 已经放入暂存区,又作了修改,撤销修改就回到添加暂存区后的状态。
     
    对于 第2种情况,我们继续假定readme.txt 添加一行内容为666666 ,
    git add 添加到暂存区,
    接着添加内容 7777777
    此时我们想通过撤销命令让其回到暂存区后的状态。
     
     
    2删除文件
    假如我们在版本gitdemo1 目录下添加一个文件 b.txt
     
    继续查看 b.txt 文件已经删除了,此时有两个选择
    1.直接commit
    2.从版本库中恢复被删除的文件
     
    注:没有commit 之前,可以使用命令 git checkout -- b.txt 执行文件恢复操作
     
     
    6远程仓库
    先注册gitHub 帐号
    本地Git 仓库与GitHub 仓库之间通过SSH 传输加密的。
    第1:创建SSH key 。用户主目录下如果没有 .ssh 目录,目录下没有 id_rsa和 id_rsa.pub 两个文件,执行以下命令:
    ssh-keygen -t rsa -C "youremail@example.com"
     
    注:id_rsa 是私钥,一般不透露。id_rsa.pub 是公钥,可以告诉任何人。
    第2:登录github, 打开 settings - Add SSH Key , (进入路径可不同,有多种方式),填上任意title, 在Key 文本框里粘贴 id_rsa.pub 文件内容。
    操作1:添加远程库
    保持本地Git 仓库 和 githug 上的仓库进行远程同步
    首先,github 右上角 “New repostory”
     
    Repository Name 填 gitdemo01 ,点击创建
    此时testgit 仓库是空的,我们可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后把本地仓库的内容推送到github 仓库。
     
    本地运行命令
    git remote add origin https://github.com/xxx/gitdemo01.git
     
     
     
    使用 git push 命令将本地内容推送到远程,实际上是把当前分支 master 推送到远程。
     
    注:此时远程库是空的,我们第一次推送 master 分支时,加上 -u 参数,Git 不但会把本地master 分支内容推送的远程新的 master 分支,还会把本地master 分支和远程 master 分支关联起来,在以后的推送或者摘取时就可以简化命令。推送成功后,可以立刻在github 页面上看到远程和本地仓库内容已同步。
    此后,本地修改可通过命令修改提交:
    git push origin master
    现在,我们拥有了一个真正的分布式版本库。
     
     
    操作2:从远程克隆到本地
    首先登录github , 创建名为 gitdemo02 新仓库,注意多一步勾选 Initialize this repository
     
    执行命令
    git clone
     
    此时,本地获取同步目录 gitdemo02
     
     
    7创建与合并分支
    HEAD 严格来说,不是指向提交,而是指向master , master 指向提交,所以,HEAD 指向当前分支。
    每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支,截止目前,只有一条时间线,在Git 里,这个分支称之为 主分支,即master 分支。
    首先,创建 dev 分支,然后切换到 dev 分支上。
    git branch dev
    git checkout dev
    两条命令可以合并为:
    git checkout -b , -b 表示创建并切换
    git branch 列出所有分支,并在当前分支前显示星号。
     
    我们在readme.txt 添加内容7777777。
    查看内容,并提交。
     
    切换到主分支 master 上,继续查看内容
    git check master
     
    可以看到,添加到分支dev 上的内容 7777777 不见了。因为这里是master .
    使用命令:git merge 命令,可以合并指定分支到当前分支上。
     
    此时,可以删除dev 分支。
    命令:git branch -d name
     
    小结创建与合并分支:
    查看分支:git branch
    创建分支:git branch name
    切换分支:git checkout name
    创建+切换分支:git checkout -b name
    合并某分支到当前分支:git merge name
    删除分支:git branch -d name
     
    8如何解决冲突
    新建一个分支 branch02
    在readme.txt 中添加一行88888888,然后提交。
     
    切换到master ,在最后一行添加 99999999
     
    现在我们需要在分支上来合并 branch02, 发现冲突。
     
    注:<<<<<<, ======, >>>>>> 用于标记不同分支的内容。
    <<<HEAD 指主分支修改的内容。>>>branch02 指branch02 上修改的内容。
    我们可以本地修改并保存
     
    使用git log 可查看分支合并情况
     
     
    9分支管理策略
    通常合并分支时 , git 一般使用"Fast forward "模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 -no-ff 来禁用此模式。
    demo演示
    1.创建dev 分支
    2.修改readme.txt 内容
    3.添加到暂存区
    4.切换回主分支 master
    5.合并dev 分支,使用命令 git merge -no-ff -m 注释 dev
    6.查看历史记录
     
     
    分支策略:主分支master 通常用来发布新版本,一般不允许在上面干活。
    常在分支dev 上干活,分支代码稳定后可以合并到主分支master 上来。
     
     
    10bug 分支
    在Git 中,每个bug 都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临朝的分支删除掉。
    比如404错误。当前dev 分支上的工作还没有提交,或者工作进行一半时候,我们无法提交。怎么办呢?Git 提供一个stash 功能,可以把当前工作现场进行隐藏,等以后恢复工作后继续工作。
    命令stash ,并查看状态
    git stash
    git status
     
    首先,我们要确定在哪个分支上修复bug, 比如,在主分支master 上来修复,现在我们在master 分支上创建一个临时分支,
    演示:
    在master 分支上创建临时分支 issue-404
    查看内容,修改后查看内容,修改完成后,切换到master 主分支上并完成合并,最后删除issue-404分支。完成后,回到dev 分支上开始干活
     
    现在工作区是干净的,如何恢复工作场呢?我们可以使用命令git stash list 来查看。
     
    工作场还在,Git 把stash 内容存放在一边,恢复工作可以使用如下两个方法:
    1.git stash apply , 恢复后stash 内容并不删除,你需要使用命令 git stash drop 删除。
    2.git stash pop ,恢复的同时把stash 内容也删除。
     
     
    11 多人协作
    远程克隆时,实际上Git 自动把本场的master 分支和远程的master 分支对应起来了,并且远程库的默认名称是origin
    1.查看远程库信息:git remote
    2.查看远程库详细信息:git remote -v
    分为抓取分支,推送通知。
    1.推送分支
    推送分支就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支。这样,Git就会把该分支推送到远程训对应的远程分支上。
    命令:git push origin master
     
    推送成功。
     
    假如需要推送到dev 分支上,命令:git push origin dev
    哪些分支要推送呢?
    1.master 主分支需要保持与远程同步
    2.一些bug 分支不需要推送到远程,可以先合并到主分支上,再把主分支master 推送到远程。
     
    2.抓取分支
    模拟一下多少协作场景。成员将各自修改推送到各自的master 分支上。另一同事在另一台电脑(注意配置SSH key ),或者同一电脑不同目录克隆,新建目录名字gitdemo2
    我们首先把dev 分支推送到远程中。
     
    在将gitdemo2 目录克隆到本地
     
    现在小伙伴要在dev 分支上开发,必须把远程的origin 的dev 分支到本地来,于是可以使用命令创建本地dwv 分支 : git checkout -b dev origin/dev
    现在可以开发了,开发完成后把dev 推送到远程库即可。
     
    命令:
    git add readme.txt
    git commit -m "readme.txt 修改xxx内容"
    把现在在dev 分支推送到远程:git push origin dev
     
    此时,小伙伴最新提交的与我试图推送的有冲突。
     
    先用git pull 把最新提交的从origin/dev 抓下来,然后在本地合并,解决冲突再进行推送。
     
    oh, no 命令 git pull 也失败了,原因是没有指定本地dev 分支与远程 origin/dev 分支的链接。根据提示,设置 dev 和 origin/dev 链接。
    git branch --set-upstream dev origin/dev
     
     
    此时,git pull 一下。bingo 成功了。合并有冲突,需要手动解决。解决方法和分支管理中解决冲突完全一样。解决后,提交,再push
     
    git add readme.txt
    git commit -m "merge & fix readme.txt"
    git push origin dev
     
    因此,多人协作工作模式一般是这样的
    1.git push origin branch-name 推送
    2.推送失败,远程分支比本地更新的早,需要先git pull 试图合并。
    3.如果合并有冲突,解决冲突,并在本地提交。再用git push origin branch-name 推送。
     
    总结:
    日常使用Git 建议
    1.日志输出参数 .示例 git log --oneline --graph
    2.查看文件详细变更:示例:git -log -p filename
    3.查看文件中指定位置的变更 示例:git log -L 1, 1:some-file.txt
    4.查看尚未合并的变更 示例:git log --no-merges master
    5.查看其他分支中的文件 示例:git show some-branch:some-file.js
    6.关于变更基线的几点说明 示例:git pull --rebase
    7.本地合并后保留分支结构 示例 git merge --no-ff
    8 修复而非新建提交 示例:git commit --amend
    9 Git 中的三种状态及相互转换 示例:git reset --hard HEAD 与 git status -s
    10撤销而不产生提交信息 示例:git revert -n
    11用第三方差异工具查看整个工程而非单个目录的差异 示例:git difftoll -d
    12忽略空格变更 示例:git diff -w 或 git blame -w
    13 追加文件中的部分变更 示例:git add -p
    14 发现并清理无用分支 示例:git branch -a
    15 暂存部分文件 示例 git stash --keep-index 或 git stash -p
    16写好提交信息 示例:-应用这次提交,可以更新**README文件**
    --应用这次提交,为调用GET/user/:id API 追加确认
    --应用这次提交,回退到**11111*版本*
    17Git自动补全 https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks#Auto-Completion
    18创建常用命令的别名
    示例 git config --global alias.l "log --oneline --graph"
    这个命令会创建一个新的git 别名l ,git l 代替git log -oneline -graph
    也可以在alias 附加其他的参数。如git l -author = "Mike"
    19 快速定位故障版本 示例: git bisect
     http://git-scm.com/docs/git-bisect#_bisect_run
     
     
    原文链接:http://note.youdao.com/noteshare?id=6614c88657195d90d44808c1ef31e6ad&sub=EDABD299B4E64713AD41AA09E77909D6
    公众号:一只阿木木
  • 相关阅读:
    springcloud(十五):搭建Zuul微服务网关
    springcloud(十四)、ribbon负载均衡策略应用案例
    springcloud(十三):Ribbon客户端负载均衡实例
    springcloud(十二):Ribbon客户端负载均衡介绍
    springcloud(十):熔断监控Hystrix Dashboard
    springcloud(九):熔断器Hystrix和Feign的应用案例
    springcloud(八):熔断器Hystrix
    springcloud(七): 使用Feign调用Eureka Server客户端服务
    springcloud(六):Eureka提供数据的客户端连接Docker的mysql
    雏龙计划
  • 原文地址:https://www.cnblogs.com/yizhiamumu/p/yizhiamumu.html
Copyright © 2020-2023  润新知