Git的入门教程<四>

Git 的入门教程<四>

5> git分支的管理

git默认的有一个主分支叫做master,随着每次的提交,master主分支会形成一条线,而HEAD是指向当前的主分支master的,一般来说,我们将master分支作为向外发布的主分支,而开发的时候会新建一个分支或者好多分支,作为开发分支,等到开发分支完成,在一次性的想master主分支上合并,并进行发布。

5.1 git 分支的创建、删除、切换

git branch dev            //创建分支
git checkout dev         //切换分支
git checkout -b dev     //创建并切换分支
git branch             //查看当前仓库的分支
git branch -d dev     //删除dev分支

git checkout -b  dev == git branch dev + git checkout dev

查看所有分支:

git branch

在之前的git文件夹中,打开bash,创建并切换到dev 分支上,增加一个branch文件,并提交到dev的仓库。

此时ls后,会看到branch 和readme.txt两个文件,然后我们切换到master分支看到并没有branch,那么dev做出修改后,如何提交到主分支哪?

5.2 git 分支的合并,整合

git merge dev    //合并dev分支到主分支

此时ls后,在主分支master下就能看到branch文件。

git merge dev 之后,看到 提示
Fast-forward

这个的意思就是快速合并,意思就是将当前指向master的HEAD指针,直接移动到dev上。这样做的后果就是查看历史的时候,看不到这次的合并信息。

而如果合并的时候,添加 --no-ff 参数则会保留下合并的信息,意思就是禁止Fast-forward 模式

git merge dev --no-ff

两次查看历史的比较:

git merge dev

git reset --hard HEAD^
git merge dev --no-ff

说到合并,还有一种情况,就是两个人操作dev分支,一个对dev分支下的branch文件做出了修改,并上传合并到主分支,另一个也同样做了修改,另一个进行上传的时候,会是什么情况哪?

首先创建另一个分支dev_other,并修改branch文件内容,提交修改内容,并进行合并。

git checkout -b dev_other
echo "hello,dev_other" >> branch
git add branch
git commit -m "dev_other"

然后切换回dev分支,并修改branch文件内容,提交修改内容,并进行合并。

git checkout dev
echo "hello,dev" >> branch
git add branch
git commit -m "dev_other"

合并之后会报错,如下

提示合并冲突,合并失败,要你修改冲突,在次提交,我们此时打开branch文件看到

<<<<<<<  HEAD
hello,dev_other
======
hello,dev
>>>>>>>  dev

HEAD 指的是当前的主分支上的内容,======来区分两个分支,下面是dev分支上的内容,很清楚吧,将合并冲突的地方很清楚的划分出来。

既然已经知道冲突,那么就要结局冲突,此时是切换不到dev分支的,会提示没有完成合并,不能切换分支,那么修改后提交。

git add branch
git commit -m "resolve conflict"

如果在分支没有提交之前,想要删除该分支的话,使用大写的D进行强制删除

git branch -D dev_other

5.3 git 的stash功能

git提供了stash的功能,以防止你正在增加某个功能,但是之前的版本有bug继续修复,可以利用stash功能将未完成的分支暂存起来,然后新建分支进行修改bug,之后提交合并到master之后,在恢复到之前未完成的分支,就是恢复stash,继续进行。

新建job分支,并增加job模块(新建job文件)

git checkout -b work
touch job
echo "working" >> work
git add job
git commit job

此时来了一个bug_1急需修复

首先在job分支下,存储job,并查看当前分支的状态

git status               //发现有新增job<没有提交
git stash                //提示存储到stash的版本
git status               //此时状态是nothing

然后新建bug_1分支进行修复

git checkout -b bug_1

修复完成提交并合并到master

git add branch
git commit -m "resolve bug_1"
git checkout master
git merge bug_1 --no-ff

修复完成之后,我们需要将刚刚dev分支下未完成的代码在调出来,继续工作。

git stash list            //查看当前stash列表
//第一种方式
git stash apply [email protected]{0}
git stash drop [email protected]{0}
//第二种方式直接从stash中pop一下,就会将最后保存的stash恢复 并从stash list 栈中将此stash删除。
git stash pop

5.4 git 分支的远程多人协作

git可以将本地的分支推送到服务器端。

git push origin master
git push origin dev

此时A在dev分支下进行开发,添加了remote文件,并提交到远程服务器

touch remote
echo "hello,remote" >>remote
git add remote
git commit -m "hello,remote"
git push origin dev

假如B和A一起写这个软件的另一个功能,则B    clone了这个链接。(B:本地创建的一个名字为GitClone的文件,模拟成另一个开发人员)

克隆之后,就只有master这个主分支,B不能再主分支上进行开发,所以他需要新建一个dev分支,并且和远程服务器的dev关联起来。

git clone [email protected]:/home/git/first.git
git branch
git checkout -b dev origin/dev

关联之后,ls 就能看到服务器 推过来的文件,就是之前 A  push到服务器的文件。

此时B修改了remote文件,并提交上传服务器。

echo "............." >> remote
git add remote
git commit -m "..........."
git push origin dev

然后此时  A 也修改了 remote 文,件并提交上传服务器。

echo "111111111111" >> remote
git add remote
git commit -m "111111111111"
git push origin dev

推送失败,因为B最新提交和你试图推送的提交有冲突,Git提示,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送.

然后此时要

git pull

     git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,则设置devorigin/dev的链接:

git branch --set-upstream-to=origin/dev dev

之后再git pull,成功。

然后这个时候就需要解决冲突,并提交,就行了。解决冲突查看5.2章节的内容。

A端:

然后B端在使用的时候,再次git  pull , 得到最新的内容,就是A 结局冲突之后最新提交的内容

B端:

OK ,到这里,结束本章节内容。

ps:累屎了,截图累屎了。

时间: 2024-11-03 03:29:45

Git的入门教程<四>的相关文章

Git的入门教程&lt;三&gt;

Git 的入门教程<三> 4> git远程仓库的使用 续之前的(http://blog.csdn.net/xuheazx/article/details/43229781) 4.2 git远程服务器的搭建 我目前的服务器版本: Linux hehe.xu 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux 因为是为了做教程,所以采用的是虚拟机来进行搭建git服务器. 4.2.1

jQuery 入门教程(三): Selectors

jQuery Selector 是jQuery库中非常重要的一个组成部分. jQuery Selector 用来选择某个HTML元素,其基本语句和CSS的选择器(Selector)是一样的,所有jQuery selector 都是以$()开始. 选择HTML标记 选择某个HTML元素的方法是直接使用该元素的标记名称,比如选择所有<p>元素 $("p") 下面的例子当用户点击一个按钮时,隐藏所有的<p>元素 $(document).ready(function()

BootStrap入门教程 (三)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

Git的入门教程&lt;二&gt;

Git 的入门教程<二> 4> git远程仓库的使用 我们在使用git进行代码管理的时候,协同办公,需要一个24小时不间断的隐形同事,此时,如果在局域网内,则直接开一台局域网内的24小时开机运行的机器就可以,但是如果在homework的时候就需要这个24小时运行的机器拥有独立的外网IP,这样消耗就比较大,幸好,网上有一个github,提供给我们一个免费的仓库,让我们可以在同事之前推送代码,下面介绍github的使用. 4.1 github的使用 首先 登录github的官网: https

无废话ExtJs 入门教程三[窗体:Window组件]

无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/19

PySide——Python图形化界面入门教程(三)

PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widgets,以及将他们布局的两种不同的方法.今天我们继续讨论Python/Qt应用响应用户触发的事件:信号和槽. 当用户执行一个动作——点击按钮,选择组合框的值,在文本框中打字——这个widget就会发出一个信号.这个信号自己什么都不做,它必须和槽连接起来才行.槽是一个接受信号的执行动作的对象. 连接内建P

Git的入门教程&lt;一&gt;

Git 的入门教程<一> 1> 为什么要用git git采用分布式框架,没有中央服务器,每人电脑上都一份单独的代码,单独的仓库,不需要联网,只是在有改动的时候,向对方进行推送一下,这样双方都能看到各自修改的代码了. 并且git相比于svn来说,比较安全,假如你的电脑硬盘坏掉了,此时在另一台电脑上只需从同事那里git pull 一下,就能拿到最新的代码. 那么同事之前如何进行协同办公的那? ps: git的好处当然不止这些,下面会列出. 2> git 的协同办公 一般来说,git需要

BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

RabbitMQ入门教程(三):Hello World

原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78583480 分享一个朋友的人工智能教程(请以"右键"->"在新标签页中打开连接"的方式访问).比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. Hello World示例功能简介 功能描述