git/github使用完整教程(2)分支

 

分支

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用git branch命令查看当前分支:

$ git branch
* devmaster

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:

Creating a new branch is quick.

然后提交:

$ git add readme.txt 
$ git commit -m "branch test"
[dev b17d20e] branch test1 file changed, 1 insertion(+)

现在,dev分支的工作完成,我们就可以切换回master分支:

$ git checkout master
Switched to branch 'master'

切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:

git-br-on-master

现在,我们把dev分支的工作成果合并到master分支上:

$ git merge dev
Updating d46f35e..b17d20e
Fast-forwardreadme.txt | 1 +1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

本地分支冲突

准备新的feature1分支,继续我们的新分支开发:

$ git switch -c feature1
Switched to a new branch 'feature1'

修改readme.txt最后一行,改为:

Creating a new branch is quick AND simple.

feature1分支上提交:

$ git add readme.txt$ git commit -m "AND simple"
[feature1 14096d0] AND simple1 file changed, 1 insertion(+), 1 deletion(-)

切换到master分支:

$ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.(use "git push" to publish your local commits)

Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。

master分支上把readme.txt文件的最后一行改为:

Creating a new branch is quick & simple.

提交:

$ git add readme.txt 
$ git commit -m "& simple"
[master 5dc6824] & simple1 file changed, 1 insertion(+), 1 deletion(-)

现在,master分支和feature1分支各自都分别有新的提交,变成了这样:

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.(use "git push" to publish your local commits)You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   readme.txtno changes added to commit (use "git add" and/or "git commit -a")

我们可以直接查看readme.txt的内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存:

Creating a new branch is quick and simple.

再提交:

$ git add readme.txt 
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed

github分支

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。要查看远程库的信息,用git remote

$ git remote
origin

或者,用git remote -v显示更详细的信息:

$ git remote -v
origin  git@github.com:yourname/learngit.git (fetch)
origin  git@github.com:yourname/learngit.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;

  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

多人分支冲突

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

实战:

如果你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:

$ git push origin dev
To github.com:yourname/learngit.git! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:yourname/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.git pull <remote> <branch>If you wish to set tracking information for this branch you can do so with:git branch --set-upstream-to=origin/<branch> dev

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

$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

再pull:

$ git pull
Auto-merging env.txt
CONFLICT (add/add): Merge conflict in env.txt
Automatic merge failed; fix conflicts and then commit the result.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组【数据结构】

前提 数组的定义以及数组的延伸 这种不好进行理解&#xff0c;那么我们下面以二维数组进行解释 多维数组的数据特点 存储数组结构的两种方式 问题抽象总结

Kafka深度解析

原创文章&#xff0c;转载请务必将下面这段话置于文章开头处&#xff08;保留超链接&#xff09;。 本文转发自技术世界&#xff0c;原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的&#xff0c;基于发布/订阅的消息系统。…

数据的存储特殊矩阵压缩存储【数据结构F】

以行为主序 以列为主序 矩阵的前提分类 三角矩阵

C++ 多态和虚函数

虚函数实现多态 #include <iostream> using namespace std;//基类People class People{ public:virtual void display(); //声明为虚函数 }; void People::display(){cout<<"无业游民。"<<endl; }//派生类Teacher class Teacher: public People{…

图的基本概念【数据结构】

序言 1对1的线性结构&#xff0c;一对多的树二叉树以及森林&#xff0c;第3种就是多对多的结构&#xff0c;也就是我们所要讲到的图的结构&#xff0c;图形结构是数据结构当中最复杂的一种结构&#xff0c;图形结构的特点就是在这个图当中任意两点之间都会有关系&#xff0c;这…

go语言一天入门(上)

第一个go程序 package mainimport "fmt"func main() {/* 这是我的第一个简单的程序 */fmt.Println("Hello, World!") } 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包&#xff0c;如&#xff1a;package m…

Jquery 全选,反选

<script src"../js/jquery-1.6.2.min.js" type"text/javascript"></script><script language"javascript" type"text/javascript">$(function(){$("#selectAll").click(function(){//全选$("#playLi…

go语言一天入门(下)

结构体 和c一样 package mainimport "fmt"type Books struct {title stringauthor stringsubject stringbook_id int }func main() {// 创建一个新的结构体fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407}…

图的遍历算法【数据结构F】

图的遍历算法有哪两种&#xff1f; 深度优先调度算法---------将图结构看成是树形结构&#xff0c;树形结构的子图直接是没有交叉的&#xff0c;但是对于图结构的树形结构之间是有交叉的&#xff0c;类比于树形结构的二叉树&#xff0c;左指数和右指数都会相应的经历三次&#…

go语言快速刷《程序员面试金典》(1)

实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 一个数组统计是否有 func isUnique(astr string) bool {var arr[26] int;for _,ch:range astr{num:ch-aif(arr[num]1){return false}arr[num]}return true } 给定两个字符串 s1 和 s2&#xff0c;请编写一…

最小生成树【数据结构】

前提 【1】网的最小生成树&#xff0c;涉及到生成树了那么就会有最小的权值在里面了 【2】对于一个图来说生成树是由多个的&#xff0c;并不是唯一的 【3】&#xff1a;广度优先算法的遍历是可以得到生成树的&#xff0c;深度优先算法也是可以得到生成树的 任意的一个联通网&am…

go语言快速刷《程序员面试金典》(2)

字符串轮转。给定两个字符串s1和s2&#xff0c;请编写代码检查s2是否为s1旋转而成&#xff08;比如&#xff0c;waterbottle是erbottlewat旋转后的字符串&#xff09;。 示例1 输入&#xff1a;s1 "waterbottle", s2 "erbottlewat" 输出&#xff1a;T…

广义表的基本概念【数据结构】

实名广义表与匿名广义表的区别&#xff1a;对于匿名的广义表的表示方法我们认为一对括号就是一个广义表&#xff0c;里面的数据可以是广义表也可以是 原子&#xff0c;对于有名字的广义表&#xff0c;也就是大写的字母我们可以直接认为大写的就是广义表的表示方法小练习----广义…

go语言快速刷《程序员面试金典》(3)

编写程序以 x 为基准分割链表&#xff0c;使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x&#xff0c;x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可&#xff0c;其不需要被置于左右两部分之间。 示例: 输入: head …

树和二叉树【数据结构】

基本概念 ADT的定义 基本操作 对比树形结构和线性结构 基本术语以及注意事项-不能错误简单的我以为 二叉树是度数小于等于2的树&#xff0c;而不是度为2的树&#xff0c;一定要记住这个概念 小知识&#xff1a;二进制转换成为十进制的方法名称叫做位权求和法&#xff0c;用到…

leetcode557. 反转字符串中的单词 III python,处理字符串的神!

给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1: 输入: "Lets take LeetCode contest" 输出: "steL ekat edoCteeL tsetnoc" 注意&#xff1a;在字符串中&#xff0c;每个单词由…

数据库2.1.1mysql的特点

在mysql5.1当中&#xff0c;mysqlab公司引入了新的插件式存储引擎体系结构&#xff0c;也许将存储引擎加载到正在运行的mysql服务器当中&#xff0c;使用mysql插件是存储引擎体系结构允许数据库用户为特定的应用需求选择专门的存储引擎&#xff0c;完全不需要管理任何特殊的应用…

leetcode369. 给单链表加一

用一个 非空 单链表来表示一个非负整数&#xff0c;然后将这个整数加一。 你可以假设这个整数除了 0 本身&#xff0c;没有任何前导的 0。 这个整数的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。 示例: 输入: [1,2,3] 输出: [1,2,4] 思路&#xff1a; hel…

MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇

一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎&#xff08;5.5版之前&#xff09;&#xff0c;由早期的 ISAM &#xff08;Indexed Sequential Access Method&#xff1a;有索引的顺序访问方法&#xff09;所改良。虽然性能极佳&#xff0c;而且提供了大量的特性&a…

leetcode193. 有效电话号码 正则了解一下

给定一个包含电话号码列表&#xff08;一行一个电话号码&#xff09;的文本文件 file.txt&#xff0c;写一个 bash 脚本输出所有有效的电话号码。 你可以假设一个有效的电话号码必须满足以下两种格式&#xff1a; (xxx) xxx-xxxx 或 xxx-xxx-xxxx。&#xff08;x 表示一个数字…