dcoker laravel
今天我们利用 Docker 模拟出两个终端, 来进行 git 提交操作
1. 安装 docker 应用, 命令行输入
- docker -v
如果出现上面的提示就说明 docker 下载成功了! 然后让我们启动 docker 服务
- service docker start
接下来我们要拉取 Git 镜像包, 我这里使用的是阿里云镜像
- git clone docker pull registry.cn - hangzhou.aliyuncs.com / kancloud / git
下载成功我们来启动三个容器
- docker run - it --name yi - d registry.cn - hangzhou.aliyuncs.com / kancloud / git: latest / bin / bash docker run - it --name er - d registry.cn - hangzhou.aliyuncs.com / kancloud / git: latest / bin / bash docker run - it --name san - d registry.cn - hangzhou.aliyuncs.com / kancloud / git: latest / bin / bash
然后用
来查看我们正在运行中的容器
- docker ps
开启三个终端分别进入三个容器内
- docker exec - it [容器的ID] / bin / bash
现在我们就有三个终端了!
在 github 上注册账号, 创建一个库 (接下来为了区分我们把 github 上面的这个库叫做远程仓库), 创建之后呢, 因为 github 号召大家代码开源, 所以你的代码所有人都可以看到, 但是并不代表谁都可以向你的远程库里面提交代码, 在这里安全配置是通过 id_rsa.pub 来进行控制的, 如何获取 id_rsa.pub 在这里我们就不过多介绍了, 大家可以看看我的这篇博客
http://blog.csdn.net/li_haijiang/article/details/75668343
在分别获取 id_rsa.pub 后我们要把他们填入 github 中, 如图所示
1. 点击用户头像, 在下拉列表中选择 settings
2. 在左边选择 SSH and GPG keys
3. 然后再右边就可以看到 New SSH key
4. 把我们获得 id_rsa.pub 填入第二个输入框, 在第一个框里填入标识名
我们把远程仓库起名为 itxdl, 让我们在客户终端看看是否能连通远程仓库吧
首先在 yi 里面进行操作
- #后面的这个地址是github给出来的地址git clone [email protected] : lihaijiang123 / itxdl.git
下载成功后我们来查看一个, 可以发现 itxdl 这个仓库已经被我们拉下来了, 进入库里查看里面的文件, 就是 github 上创建的库
成功!
通过 git init 命令把这个目录变成 Git 可以管理的仓库, 我们刚刚拉下来的 itxdl 库已经是一个可被 git 管理的仓库了, 所以不需要再
- git init
下面我们拉入一个 laravel 框架到宿主机上, 然后推送到 github 上
- #宿主git add * git commit - m "all clean laravel"git push origin master
注意 : git 上传. env 文件是不会上传的
在终端 yi 的文件夹中下载下来
- git clone [email protected] : lihaijiang123 / itxdl.git
可以看到 itxdl 库已经克隆到我们本地文件夹
进入文件夹, 可以发现我们的文件夹中就有了 laravel 这个框架的全部内容
我们先进行本地操作
首先我们新建一个
, 在里面新建 index 方法, 查看一下
- User控制器
第一步:使用命令 git add UserController.php 添加到暂存区里面去。如下:
现在我们已经提交了一个 UserController.php 文件到本地仓库了,我们下面可以通过命令 git status 来查看是否还有文件未提交,如下:
说明没有任何文件未提交,但是我现在继续来改下 UserController.php 内容,比如我在下面添加 show 方法, 使用 git status 来查看下结果,如下:
上面的命令告诉我们 readme.txt 文件已被修改,但是未被提交的修改。
接下来我想看下 readme.txt 文件到底改了什么内容,如何查看呢?可以使用如下命令:
- git diff UserController.php
如上可以看到,UserController 控制器里面新增了一个 show 方法;
知道了对文件做了什么修改后,我们可以放心的提交到仓库了,提交修改和提交文件是一样的 2 步
- git add UserController.phpgit commit - m "UserController新增show方法"
版本退回
现在我继续对 UserController.php 进行修改,新建 add 方法
执行提交
- git add UserController.phpgit commit - m "UserController.php增加add方法"
那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 git log 演示如下所示:
- git log
git log 命令显示从最近到最远的显示日志,如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline 演示如下:
如果使用版本回退操作,我想把当前的版本回退到上一个版本
有两种方法:
- git reset --hard HEAD ^
那么如果要回退到上上个版本只需把 HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前 100 个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset –hard HEAD~100 即可。
未回退之前的 UserController.php 内容如下:
- git reset hard -- HEAD ^
可以看到,内容已经回退到上一个版本了。可以继续使用 git log 来查看下历史记录信息
我们看到 新建 add 方法内容没有了,但是现在我又想回退到最新的版本,如:有 add 方法的内容要如何恢复呢?我们可以通过版本号回退,使用命令方法如下:
- git reset --hard 版本号
但是现在的问题假如我已经关掉过一次命令行或者增加 add 方法的版本号我并不知道呢?要如何知道增加 add 方法内容的版本号呢?可以通过如下命令即可获取到版本号:
- git reflog
通过上面的显示我们可以知道,增加 add 方法的版本号是 fcb6553. 我们现在可以命令
- git reset --hard fcb6553
修改一下 add 方法里的内容 , 在我未提交之前,我发现添加 i am a boy 内容有误,所以我得马上恢复以前的版本,现在我可以有如下几种方法可以做修改:
第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后 add 添加到暂存区,最后 commit 掉。
第二:我可以按以前的方法直接恢复到上一个版本。使用
- git reset --hard HEAD^
但是现在我不想使用上面的 2 种方法,我想直接想使用撤销命令该如何操作呢?首先在做撤销之前,我们可以先用 git status 查看下当前的状态。如下所示:
这时 Git 会告诉你,
可以丢弃工作区的修改,如下命令:
- git checkout -- file
- git checkout -- file
命令
意思就是,把 UserController.php 文件在工作区做的修改全部撤销,这里有 2 种情况,如下:
- git checkout -- UserController.php
UserController.php 修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
另外一种是 UserController.php 已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
对于第二种情况,我想我们继续做 demo 来看下,假如现在我对 add 方法添加一行 内容为 111111111,我 git add 增加到暂存区后,接着添加内容 22222222,我想通过撤销命令让其回到暂存区后的状态。操作如下
- #恢复到没有22222的状态git checkout -- UserController.php
注意:命令
中的
- git checkout -- file
很重要,如果没有
- --
的话,那么命令变成创建分支了。
- --
删除文件
假如我现在目录添加一个文件 TestController.php, 然后提交, 然后删掉
- git add TestController.phpgit commit - m "新增TestController控制器"rm TestController.php
只要没有 commit 之前,如果我想在版本库中恢复此文件如何操作呢?
可以使用如下命令 git checkout – b.txt,如下所示:
- #放弃工作区里的操作,
- 恢复到上次提交后的样子git checkout -- TestController.php
1. 首先设置我们的身份
获取远程库的信息
当你从远程库克隆时候,实际上 Git 自动把本地的 master 分支和远程的 master 分支对应起来了,并且远程库的默认名称是 origin。
要查看远程库的信息 使用 git remote
要查看远程库的详细信息 使用 git remote –v
可以用
推送到远程仓库, 那么我们就使用这个命令
- git push
推送成功! 这是我们到 github 上查看一下
可以看到有三个控制器 succeed !
这时我们加入第二个终端 "er"
克隆 github 上的仓库 , 保持终端 er 和终端 yi 的内容一致
- git clone [email protected] : lihaijiang123 / itxdl.git
然后回来终端 yi 继续干活, 修改一下 UserController.php 后提交到远程, 这时终端 er 和 github 上的内容不一致了, 我们在终端 er 修改 UserController.php 的内容后推送看看会怎么样呢
这里 git 提示我们提交失败, 原因是远程包含我所坐的操作, 并且提示我可以先使用
然后在
- git pull ...
- git push
执行
后提示下载成功, 但是合并有冲突,需要手动解决,解决的方法和分支管理中的 解决冲突完全一样。解决后,提交,再 push, 我们查看一下 UserController.php
- git pull
<<< HEAD 是当前本地分支的指针
==== 下面的是远程的分 , 手动解决冲突就好了
然后提交, 推送
成功! 我们来 github 看一下
ok, 终端 yi 和终端 er 的冲突已经解决了
在版本后退里,我们已经知道,每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在 Git 里,这个分支叫主分支,即 master 分支。HEAD 严格来说不是指向提交,而是指向 master,master 才是指向提交的,所以,HEAD 指向的就是当前分支。
首先,我们来创建 dev 分支,然后切换到 dev 分支上。
- //本地创建和远程对应的分支git checkout -b 本地分支名 origin/远程分支名//创建分支并切换单该分支上git checkout -b dev//查看分支git branch
git branch 查看分支,会列出所有的分支,当前分支前面会添加一个星号。然后我们在 dev 分支上继续做 demo,比如我们现在在 TestController.php 里新建一个 index 方法, 然后提交到本地仓库
- git branch vim TsetController.phpgit add TestController.phpgit commit - m "Test控制器新建index方法"
PS : (如果想提交当前 dev 分支可以使用 git push origin dev)
这时我们再切换回 master 分支, 查看 TestController.php 文件, 里面并没有 index 了控制器
- git checkout master cat TestController.php
因为当前不是分支 dev, 现在我们可以把 dev 分支上的内容合并到分支 master 上了,可以在 master 分支上,使用如下命令
- git merge dev
注意到上面的 Fast-forward 信息,Git 告诉我们,这次合并是 "快进模式",也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。
合并完成后,我们可以接着删除 dev 分支了
分支冲突
当两条分支对同一个文件同一个文本块进行了不同的修改, 并试图合并时, Git 不能自动合并的, 称为冲突 (conflict), 解决冲突需人手动修改, 和上面说的两个人解决冲突的方法是一样的
分支管理策略
通常合并分支时,git 一般使用 "Fast forward" 模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数
来禁用 "Fast forward" 模式。当不使用 fast forward 模式后, 删除的分支在 git log 中同样可以查的到的
- --no-ff
- git merge --no - ff - m "注释" dev
- git log --graph --pretty = oneline --abbrev - commit
首先 master 主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的 dev 分支上干活,干完后,比如上要发布,或者说 dev 分支代码稳定后可以合并到主分支 master 上来。
BUG 分支
在开发中,会经常碰到 bug 问题,那么有了 bug 就需要修复,在 Git 中,分支是很强大的,每个 bug 都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。
比如我在开发中接到一个 404 bug 时候,我们可以创建一个 404 分支来修复它,但是,当前的 dev 分支上的工作还没有提交. 并不是我不想提交,而是工作进行到一半时候,我们还无法提交,比如我这个分支 bug 要 2 天完成,但是我 issue-404 bug 需要 5 个小时内完成。怎么办呢?还好,Git 还提供了一个 stash 功能,可以把当前工作现场 "隐藏起来",等以后恢复现场后继续工作。如下:
- git statsh
现在我可以通过创建 issue-404 分支来修复 bug 了。
首先我们要确定在那个分支上修复 bug,比如我现在是在主分支 master 上来修复的,现在我要在 master 分支上创建一个临时分支,演示如下:
- git checkout - b issue - 404
修复完成后,切换到 master 分支上,并完成合并,最后删除 issue-404 分支。
- git checkout master git merge --no - ff - m "合并404分支" issue - 404git branch - d issue - 404
然后在切换回 dev 分支, 我们工作现场被保存到去哪里呢?我们可以使用命令 git stash list 来查看下
- git stash list
那么我们怎么恢复工作区呢
- //恢复不删除git stash apply//删除保存的内容git stash drop//另一种方法是 恢复的同时并删除git stash pop
Git 是帮助我们提高工作效率的, 而不是让我们因为他感觉到难的, git 到这里我们就介绍这么多了, 祝您工作愉快, 下面给大家总结一下 git 的命令
来源: http://www.bubuko.com/infodetail-2228346.html