基础知识:多人使用一个Github仓库

在公司进行项目开发,每个项目组多人,往往会共用同一个Github仓库地址。在合并分支的时候,有很多情况是出错的,无法合并。

目录简介

  • 分支简介
  • 分支创建
  • 快速合并分支
  • 删除分支
  • 分支合并冲突
  • 普通合并分支
  • 分支管理策略
  • 团队多人协作开发
  • 推送分支
  • 抓取分支

分支简介

  • master分支并不是一个特殊的分支,只是主分支的默认名字,在你进行git init的时候,就会生成master这个名字,所有的记录都会在隐藏的文件夹.git/
  • master的名字可以修改。

创建分支

  • 创建分支执行以下命令:git branch newBranchName ,Enter.
  • 创建的分支,是为当前提交的对象上创建一个指针。

如图,分支是当前提交对象的指针。Git是通过HEAD的指针,获取当前的分支名字。HEAD是一个指向所在的本地分支。git branch命令仅仅创建一个分支,并不会自动切换到新的分支去,指针并不会发生移动。

  • 你可以使用git log --online --decorate来查看当前所致的对象
  • 示例
    • git log --online --decorate
    • f30ab(HEAD,master,newBranchName)add xxxxxx...balabala...
    • balabala。。。

切换分支

  • git checkout newBranchName,这样HEAD就指向newBranchName分支了

画重点了

  • 创建分支并且切换分支的命令的是:git checkout -b newBranchName 这样有什么优点呢??
  • HEAD分支随着新的提交的操作向时间线后移动,但是master分支却没有移动,仍然是上个版本的提交的对象。
  • 现在我们切换master分支看看:git checkout master

这个命令做了两件事情

  • 使得HEAD重新指向master分支
  • 将目录恢复成master分支所指向快照的内容
  • 这就说明了,忽略了testing分支所做的修改,以便向另一个方向进行开发。
  • 可以使用git branch,查看当前分支,带 * 的是当前分支。

分支切换会改变你工作目录的文件夹

  • 在切换分支的时候,一定要注意开发者开发目录的文件会发生改变,如果是切换到一个较旧的分支,工作目录会恢复到该目录最后提交的样子。

快速合并分支

如果我们在testing分支完成工作了,怎么讲testing分支的开发内容合并到maser上面呢? 因为指针的存在,就直接把master指向test当前的提交。就完成了合并。这里需要git merge命令

  • git merge testing命令用于合并指定分支当前分支,合并后,在查看内容。至此完成合并。

删除分支

合并完成分支之后,就可删除。

  • 使用命令进行操作git branch -d testing

分支合并冲突

在合并分支的时候,会出现内容冲突,合并出错不成功的现象。

  • 创建并使用新的分支进行开发:git checkout -b dev
  • 修改README.md文件的内容,在dev分支上提交

切换到master分支

  • git checkout master
  • Switch to branch master
  • Your branch is up-to-date with origin/master

Git会自动提示我们当前master分支比远程分支要超前1个提交,在master分支上把README.md文件的最后要修改,提交。 现在,master分支和dev分支都分别有新的提交,变成了这样。

这样情况下,Git无法进行快速合并,只能把各自修改的合并起来。但是这种合并可能会有冲突。

  • git merge dev,回车。 如果文件冲突,会报错,会提示:Automatic merge failed;fix conficts and then commit the result
  • 冲突以后必须要手动解决冲突后再提交。使用git status命令
  • Git用<<<<<<< , ======= ,>>>>>>>标记不同分支的内容,我们修改后保存提交。这样,master和dev的分支如下:

普通合并分支

  • 合并分支的时候,Git可能会用Fast forward 模式,但是这种的模式下,删除分支后,会丢掉分支信息。
  • 如果要强制禁用Fast forward模式,Git就会在merge是生成一个新的commit,这样,从分支历史上就可以看到分支信息。

使用No-ff的方式git merge

  • 首先,创建并切换分支:git checkout -n dev
  • 修改提交的文件,并重新提交
  • 切换回master,git checkout master,流程图如下:
  • 准备合并分支的时候,请注意参数--no-ff参数,表示禁用Fasr forword
  • git merge --no-ff -m "merge with no-ff"
  • 合并后,用以下语句查看分支历史
  • git log --graph --pretty=online --abbrev-commit
  • 不使用Fast forward模式,merge就像是这样:

分支策略管理

公司开发一般需要三个分支:

  • master主分支用来发布
  • dev日常开发
  • bug用来修改bug用的分支
  • 推送到其他分支:git push origin dev

总结

一般多人协作的模式一般是这样

  • 首选,可以尝试用git push origin branch-name推送自己修改。
  • 如果推送失败,则因为远程分支比你本地更新,需要你先用git pull 尝试合并。
  • 如果合并有冲突,则解决冲突,并在本地提交。
  • 如果没有冲突或者解决掉冲突以后,,在用git push origin branch-name推送。
  • 如果git pull 提示no tracking information,则说明本地分支和远程分支的连接没有创建。

汇总一下命令

  • git branch 查看当前分支
  • git branch -v查看每个分支的最后一次提交。
  • git branch -a查看本地和远程分支情况
  • git branch --merged查看已经与当前分支合并的分支
  • git branch --no-merged查看已经与当前分支未合并的分支
  • git branch -r 查看远程分支
  • git branch dev创建dev分支
  • git checkout dev切换到dev分支
  • git checkout -b dev创建并切换分支
  • git merge dev 名称为dev的分支与当前分支合并
  • git branch -d dev 删除分支dev

原文发布于微信公众号 - 数据库SQL(SQLdba)

原文发表时间:2018-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

Git知识总览(三) 分支的创建、删除、切换、合并以及冲突解决

前两篇博客集中的聊了git的一些常用命令,具体请参见《Git知识总览(一) 从 git clone 和 git status 谈起》、《Git知识总览(二) g...

3349
来自专栏IT探索

git使用笔记

git config --global user.email "email_address"

461
来自专栏一个爱瞎折腾的程序猿

git常用命令记录

451
来自专栏玩转JavaEE

Git分支管理

Svn中也有分支管理,但是很low,Git的分支管理非常强大,本文先不去说分支管理内部到底怎么做的,我们先来看看Git中最基本的分支管理操作。 本文是Git系列...

3535
来自专栏carven

git分支管理

git用了挺久,但是对分支管理还是不熟悉。用这篇博客来记录一下常用的分支管理命令 1.首先绑定远程仓库

760
来自专栏我的博客

Git常用操作

git pull 拉远程分支并合并到本地 git fetch 拉远程分支不做合并 忽略文件 .gitignore 添加文件 git add . 提交所有修改 g...

2755
来自专栏技术博文

Git怎样撤销一次分支的合并Merge

出现的问题: 某一天,所有的开发文件已经在development分支上,但是这时候,线上出了一个问题,需要及时修复,于是从master分支上,拉了一个bug分支...

2626
来自专栏我是东东强

Git工作区、版本库与暂存区

Git与其它版本控制系统如SVN的一个最大的不同之处就是发明了暂存区的概念,本文从创建Git版本库开始,依次描述了追踪文件、修改文件、丢弃修改、提交修改等基本G...

672
来自专栏一“技”之长

Git命令集十二——切换分支与还原文件 原

921
来自专栏java思维导图

一篇文章,教你学会Git

在日常工作中,经常会用到 Git 操作。但是对于新人来讲,刚上来对 Git 很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触 Git 的新人,理解 Git ...

2613

扫描关注云+社区