Git 分支被设计为故障安全的机制,用来在仓库之间整合代码和共享更改。 如何工作 中心化的工作将中央仓库作为项目中所有修改的唯一入口。默认的开发分支叫做 master,所有的更改都被提交到这个分支。...如何工作 Feature 分支工作流同样使用中央仓库,master 同样代码官方的项目历史。但是与其直接提交在本地的 master 分支,开发者每次进行新的工作时创建一个新的分支。...有些地方比功能分支工作流更复杂,为管理大型项目提供了框架。 和功能分支工作流相比,这种工作流没有增加任何新的概念或命令。它给不同的分支指定了特定的角色,定义它们应该如何、什么时候交流。...但是与其合并到 master,功能分支将开发分支作为父分支。当一个功能完成时,它将被合并回 develop。功能永远不应该支持在 master 上交互。 ?.../develop 开始了新的功能 当两个人都需要在不同分支上开始工作,即为自己的功能创建单独的分支。
写在前面 今天和小伙伴们分享一些Git分支工作流的笔记 学习的原因,希望通过学习了解大型项目的如何使用Git管理 博文为《Pro Git》读书笔记整理 感谢开源这本书的作者和把这本书翻译为中文的大佬们...「当你在Github或者Gitlab,Gitee上克隆一个项目,Git的clone命令会为你自动将其命名为origin,拉取它的所有数据,创建一个指向它的master分支的指针,并且在本地将其命名为origin...推送本地分支到远程 当你想要公开分享一个分支时,需要将其推送到有写入权限的远程仓库上。...如果在一个跟踪分支上输入git pu11,Git能自动地识别去哪91个服务器上抓取、合并到哪个分支。 当克隆一个仓库时,它通常会自动地创建一个跟踪origin/master的master分支。...拉取 fetch和pull的区别 当git fetch命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。
分布式 VCS 的缺点: 由于每一个机器都有完整的本地仓库,所以初次获取项目(Git 术语:clone)的时候会比较耗时; 由于每个机器都有完整的本地仓库,所以本地占用的存储比中央式 VCS 要高。...当 HEAD 指向一个 branch 时,commit 发生时,HEAD 会带着它所指向的 branch 一起移动。...master 是 Git 中的默认 branch,它和其它 branch 的区别在于: 新建的仓库中的第一个 commit 会被 master 自动指向; 在 git clone 时,会自动 checkout...push 的时候,如果当前分支是一个本地创建的分支,需要指定远程仓库名和分支名,用 git push origin branch_name 的格式,而不能只用 git push;或者可以通过 git config...的区别git diff --staged或者--cached 比对工作目录和暂存区的区别git diff 比对工作目录和上一条commit的区别git diff HEAD,新建的文件没有被追踪,所以是看不到工作目录新建文件和
分支管理 ? 分支管理 master 分支 不能往master 分支上提交代码,只能在该分支上进行代码合并操作,例如将其它分支的代码合并到 Master 分支上。...分支一同合并到 release 分支上,随后将针对 release 分支推送到测试环境,测试工程师在该分支上做功能测试,开发工程师在该分支上修改 bug。...hotfix 当生产环境发现 bug 时,我们需要从对应的 tag 上(例如 v1.0.0)拉出一条 hotfix 分支(例如 hotfix-1.0.1),并在该分支上做 bug 修复。...待 bug 完全修复后,需将 hotfix 分支上的代码同时合并到 develop 分支与 master 分支。同时在master上打上tag,v1.0.1。...origin的master主分支下载最新的版本到origin/master分支上,然后比较本地的master分支和origin/master分支的差别,最后进行合并。
多个 commit 如何合并成一条提交?如何定位分支上的一个提交(以便对比、回退、拉取新分支)?在一个分支上处理多个任务如何切换?如何调整一条分支上多个 commit 的顺序?...如何将一台机器上的修改打成补丁在另一台机器上提交?本地删除一个分支如何同步到远程?……下面随着教程我们来一探究竟。 本地分支操作 分支是 git 最重要的概念之一,用好分支是用好 git 的基础。...锚定 commit 分支很容易被人为移动,并且当有新的提交时,它也会移动,分支很容易被改变。当软件发布新的大版本或者是修正一些重要的 bug 或是增加了某些新特性,就需要永远指向某个提交记录的标识。...将变化更新到当前工作中 git fetch git merge/rebase/cherry-pick origin/master git pull 当远程分支中有新的提交时,你可以像合并本地分支那样来合并远程分支...当你克隆时,git 会为远程仓库中的每个分支在本地仓库中创建一个远程分支 (比如 origin/master)。
克隆之后的服务器与本地仓库 如果你在本地的 master 分支做了一些工作,然而在同一时间,其他人推送提交到git.ourcompany.com 并更新了它的 master 分支,那么你的提交历史将向不同的方向前进...这样,你就可以把不愿意分享的内容放到私人分支上,而将需要和别人协作的内容推送到公开分支。 如果希望和别人一起在名为 serverfix 的分支上工作,你可以像推送第一个分支那样推送它。...当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master 的 master 分支。...然而,如果你愿意的话可以设置其他的跟踪分支 - 其他远程仓库上的跟踪分支,或者不跟踪 master 分支。...可以像这样做:$ git fetch --all; git branch -vv 拉取 当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。
分支推送到origin主机同时指定origin为默认主机,把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程;由于远程库是空的,我们第一次推送master分支时,...加上了-u参数,Git不但会把本地的master分支内容;推送到远程库新的master分支,还会把本地的master分支和远程的master分支关联起来;在以后的推送或者拉取时就可以简化命令直接使用git...当有网络的时候,再把本地提交推送一下就完成了同步,而SVN在没有联网的时候是拒绝干活的!...三、解决冲突 合并分支往往也不是一帆风顺的,当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。...在feature1分支上提交: ? 切换到master分支,Git还会自动提示我们当前master分支比远程的master分支要超前7个提交。 ?
另外,你在使用 Git 合并分支时只会使用 git merge 吗?...当你在专用分支上开发新 feature 时,然后另一个团队成员在 master 分支提交了新的 commits,这会发生什么?...Merge 方式 最简单的方式是通过以下命令将 master 分支合并到 feature 分支中: git checkout feature git merge master 或者,你可以将其浓缩为一行命令...此时,同步两个 master 分支的唯一方法是将它们合并在一起,但是这样会产生额外的合并提交和两组包含相同更改的提交(原始提交和通过 rebase 更改的分支提交)。...当与另一个开发人员协作使用相同的功能并且你需要将他们的更改合并到你的 repository 时,就会发生这种情况。
创建Git仓库时,默认创建的分支是主分支master分支,当我们第一次推送时,实际上就是将本地master分支推送到远程代码仓库,这时远程代码仓库也有了一个分支,叫origin/master。...本地master分支和origin/master分支都处于同一个提交记录上,也就是本地master分支合并了origin/master分支的一个提交记录。拉取对应的Git命令为git pull。...衍合(Rebase) 上节描述的拉取实际上是一种理想情况,origin/master分支和本地master分支只存在一个提交的差别,即origin/master分支比master分支多一个提交,那么合并起来是非常轻松的...当release分支测试完成后,需要合并到master分支和develop分支。...分支合并 如果使用Git Flow进行开发管理,那么在开发过程中会存在大量的分支合并操作,比如当一个feature分支完成开发就要合并到develop分支上。
对了,这里要提一下,Git 和 Linux 是同一个爸爸,所以 Linux 系统上能跑的原生指令 Git 上面也都可以,反之也一样。 ---- git 分区原理 工作区。...---- Git 分支操作 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。...---- 合并分支 git merge 分支名 这里有个要注意的点:不仅是可以把旁支合并到主支上,主支也可以被合并到分支上,分支之间也可以互相合并。...反正你爱怎么玩怎么玩,都是在你本地仓库上,又没有推送到远程仓库。 那现在我们想把旁支合并到主支上要怎么做呢? 1、切换到主支 2、git merge 旁支名 这样就万事大吉了吗?不一定的。...hot-fix test >>>>>>> hot-fix HEAD 到 === 的部分是主支的,后面是 hot-fix 的 冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改
对了,这里要提一下,Git 和 Linux 是同一个爸爸,所以 Linux 系统上能跑的原生指令 Git 上面也都可以,反之也一样。 git 分区原理 工作区。新文件没被add到暂存区,显红色。...Git 分支操作 在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。...合并分支 git merge 分支名 这里有个要注意的点:不仅是可以把旁支合并到主支上,主支也可以被合并到分支上,分支之间也可以互相合并。...反正你爱怎么玩怎么玩,都是在你本地仓库上,又没有推送到远程仓库。 那现在我们想把旁支合并到主支上要怎么做呢? 1、切换到主支 2、git merge 旁支名 这样就万事大吉了吗?不一定的。...hot-fix test >>>>>>> hot-fix HEAD 到 === 的部分是主支的,后面是 hot-fix 的 冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改
当它们具有一定程度的稳定性后,再把它们合入更高级别的稳定性分支中。使用多个长期分支的方法并非必要,但是当你在一 个非常庞大或者复杂的项目中工作时,就会提供很大的帮助。...其次,Git提供了强壮的分支和合并模型。不像SVN,Git的分支设计成可以做为一种用来在仓库之间集成代码和分享修改的『失败安全』的机制。 ?...然后合并功能分支到本地master分支并push已经更新的本地master分支到中央仓库。 ?...但功能分支不是从master分支上拉出新分支,而是使用develop分支作为父分支。当新功能完成时,develop分支。 新功能提交应该从不直接与master分支交互。 ?...这意味着各个代码贡献者有2个Git仓库而不是1个:一个本地私有的,另一个服务端公开的。 和其它的Git工作流一样,Forking工作流要先有一个公开的正式仓库存储在服务器上。
如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。...干活都在 dev 分支上,也就是说, dev 分支是不稳定的,到某个时候,比如1.0版本发布时,再把 dev 分支合并到 master 上,在 master 分支发布1.0版本;你和你的小伙伴们每个人都在...dev 分支上干活,每个人都有自己的分支,时不时地往 dev 分支上合并就可以了。...常规开发流程 一般而言,我们在开发一个feature的时候,会从当前master拉取最新的代码到本地,然后在此代码基础上开发新feature代码,代码开发好以后,经过测试,会讲此feature的代码合并...当开发分支(dev)上的代码测试通过,要合并到master分支 git checkout master git pull git merge dev git push -u origin master
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。...的话可以从右键菜单中点击“拉取”(pull)或者“获取”(fetch) 3.4 搭建私有的Git服务器 3.4.1 服务器搭建 远程仓库实际上和本地仓库没啥不同,纯粹为了7×24小时开机并交换大家的修改...当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上: 你看,Git创建一个分支很快,因为除了增加一个dev指针...不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变: 假如我们在dev上的工作完成了,就可以把dev合并到master上。...在本地仓库文件夹中点击右键,然后从菜单中选择“创建分支”: 如果想创建完毕后直接切换到新分支可以勾选“切换到新分支”选项或者从菜单中选择“切换/检出”来切换分支: 4.2.2 合并分支
缺点:一旦删除分支或者分支指针往前走,会丢掉分支信息(原来这个分支的做了什么在log中体现不出来) 触发时机:合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,这样的合并被称为...现在 bugFix 分支上的工作在 master 的最顶端,同时我们也得到了一个更线性的提交序列。rebase之后,唯一的问题就是 master的HEAD位置还没有更新。...比如:dev 分支上的 76d12 提交添加了 index.js 文件,我们需要将本次提交更改加入到 master 分支,那么就可以使用 git cherry-pick 76d12 单独检出这条记录修改...7 git fetch 比如:你和你的同事在master分支上工作,如果你的同事将他做的更改提交到了远程分支上(orgin/master),而这些提交是你本地没有的,此时,就要使用 git fetch...拉取(pull) git pull 指令实际做了两件事:git fetch和 git merge这里,相当于在get fetch基础上,移动了Head指针。这里就不具体阐述了 9.
分支简介 git 通过保存一系列不同时刻的快照,来记录文件在不同时刻的差异。git 的分支,本质上是指向提交对象的可变指针。git 的默认分支名是 master。...在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。 git 的 master 分支并不是一个特殊分支。...分支的合并 通常情况下,需要单独建一个分支来开发功能,开发完成之后需要合并到主分支。...使得两个分支的代码保持提交的记录是一致的。 实际上不仅仅本地分支的合并可以使用rebase的方式。...将远端代码合并到本地的分支,我们也可以使用--rebase参数将本地分支的提交记录追加到远端的分支上,如下命令 git pull --rebase 5.
分支到 master 分支时,如果 master 分支的状态没有被更改过则触发快进合并 # 合并某分支到当前分支,默认 git merge --ff [待合入分支] $ git merge dev [...fast-forward.gif] 2.3 no-fast-forward 模式 触发时机:例如下图合并 dev 分支到 master 分支时,master 分支的历史记录有更新,合并两个分支修改会生成一个新的提交...复制提交 cherry-pick 有一种场景,如 BUG 修复,在 dev 分支上修复并提交,需要同样在 master 上修改,但是却不能直接合并 dev 分支,因为只需要复制其中某一个 commit,...# 在 master 分支执行 cherry-pick,将指定提交作为新提交添加到 master $ git cherry-pick [提交索引] 如下图,dev 分支上的 76d12 提交添加了 index.js...使用 git fetch 指令可以下载远程分支上最新的修改而不影响本地分支(即HEAD指针位置未改变),需要 git merge 手动合并;使用 git pull 指令可以下载远程分支上最新的修改并与本地合并
原文链接: Git 分支管理策略 最近,团队新入职了一些小伙伴,在开发过程中,他们问我 Git 分支是如何管理的,以及应该怎么提交代码?...当 develop 分支上的代码达到稳定,并且具备发版状态时,需要将 develop 的代码合并到 master,并且打一个带有发布版本号的 tag。...预发布分支是从 develop 分支上分出来的,预发布结束以后,必须合并进 develop 和 master 分支。...事实上,在我们做一个前端的大特性变更的时候,我们确实因为没办法 Toggle 而采用了一个独立的 feature 分支,我们认为即使为了这个分支单独做一套 Pipeline,也比在前端的各种样式间添加移除...如何进行线上 bug fix 在发布时打上 release tag,一旦发现这个版本有问题,如果这个时候 master 分支上没有其他提交,可以直接在 master 分支上 hot fix,如果 master
本地分支 和 branch 命令 Git 鼓励开发者频繁使用分支,正是因为有着这些特性作保障。Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。...一般当前本地分支前带有“*”号且为绿色,远程分支为红色 当合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。...要更新所有分支,命令可以简写为: $ git fetch 举例:将远程版本库上的修改同步到本地 git fetch origin master 会将远程版本库上的代码同步到本地,不过同步下来的代码并不会合并到任何分支上去...命令将 origin/master 分支上的修改合并到主分支上即可: git merge origin/master` 合并远程分支 pull git pull 操作有两个根本步骤,每个步骤都由独立的...如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。
领取专属 10元无门槛券
手把手带您无忧上云