`
jaychang
  • 浏览: 734638 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

Git基本命令和GitFlow工作流

 
阅读更多

转载自:http://www.cnblogs.com/myqianlan/p/4195994.html

本篇博客讲解了git的一些基本的团队协作命令,和GitFlow工作流指南

git 团队协作的一些命令

  • 1.开分支

    git branch 新分支名
    例如,在master分支下,新开一个开发分支:
    git branch dev
  • 2.切换到新分支

    git checkout 分支名
    例如,在master分支下,切换到新开的dev:
    git checkout dev
  • 3.开分支和切换分支合并到一个命令

    git checkout -b 新分支名
    例如,新开一个开发分支,并立即切换到该分支:
    git checkout -b dev
  • 4.切换回原分支

    git checkout 原分支名
    例如,切换回master
    git checkout master
    注意:当前分支有修改,还未commit的时候,会切换失败,应当先commit,但可以不用push
  • 5.合并分支

    git merge 需要合并的分支名
    例如,刚刚已经切换回master,现在需要合并dev的内容:
    git merge dev
    建议在GitLab(或者其他git系统)上面创建merge request的形式来进行分支的合并和代码审核。
  • 6.查看本地分支列表

    git branch -a
    前面带remotes/origin 的,是远程分支
  • 7.查看远程分支列表

    git branch -r
  • 8.向远程提交本地新开的分支

    git push origin 新分支名
    例如,刚刚在master下新开的dev分支:
    git push origin dev
  • 9.删除远程分支

    git push origin :远程分支名
    例如,删除刚刚提交到远程的dev分支:
    git push origin :dev
  • 10.删除本地分支

    git branch 分支名称 -d
    例如,在master分支下,删除新开的dev分支:
    git branch dev -d
    注意:如果dev的更改,push到远程,在GitLab(或者其他git系统)上面进行了merge操作,但是本地master没有pull最新的代码,会删除不成功,可以先git pull origin master,或者强制删除
    git branch dev -D
  • 11.更新分支列表信息

    git fetch -p
  • 12.TortoiseGit(乌龟git)

    不可否认,在windows下,这个是个不错的工具。不管你是命令行新手还是重度使用者,我觉得都可以尝试一下。

Git工作流指南:Gitflow工作流

在你开始阅读之前,请记住:流程应被视作为指导方针,而非“铁律”。我们只是想告诉你可能的做法。因此,如果有必要的话,你可以组合使用不同的流程



 

Gitflow工作流定义了一个围绕项目发布的严格分支模型。虽然比功能分支工作流复杂几分,但提供了用于一个健壮的用于管理大型项目的框架。

Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。除了使用功能分支,在做准备、维护和记录发布也使用各自的分支。当然你可以用上功能分支工作流所有的好处:Pull Requests、隔离实验性开发和更高效的协作。

工作方式

Gitflow工作流仍然用中央仓库作为所有开发者的交互中心。和其它的工作流一样,开发者在本地工作并push分支到要中央仓库中。

历史分支

相对使用仅有的一个master分支,Gitflow工作流使用2个分支来记录项目的历史。master分支存储了正式发布的历史,而develop分支作为功能的集成分支。这样也方便master分支上的所有提交分配一个版本号。



 

剩下要说明的问题围绕着这2个分支的区别展开。

功能分支

每个新功能位于一个自己的分支,这样可以push到中央仓库以备份和协作。但功能分支不是从master分支上拉出新分支,而是使用develop分支作为父分支。当新功能完成时,合并回develop分支。新功能提交应该从不直接与master分支交互。



 

注意,从各种含义和目的上来看,功能分支加上develop分支就是功能分支工作流的用法。但Gitflow工作流没有在这里止步。

发布分支



 

一旦develop分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从develop分支上fork一个发布分支。新建的分支用于开始发布循环,所以从这个时间点开始之后新的功能不能再加到这个分支上 —— 这个分支只应该做Bug修复、文档生成和其它面向发布任务。一旦对外发布的工作都完成了,发布分支合并到master分支并分配一个版本号打好Tag。另外,这些从新建发布分支以来的做的修改要合并回develop分支。

使用一个用于发布准备的专门分支,使得一个团队可以在完善当前的发布版本的同时,另一个团队可以继续开发下个版本的功能。
这也打造定义良好的开发阶段(比如,可以很轻松地说,『这周我们要做准备发布版本4.0』,并且在仓库的目录结构中可以实际看到)。

常用的分支约定:

用于新建发布分支的分支: develop

用于合并的分支: master

分支命名: release-* 或 release/*

维护分支



 

维护分支或说是热修复(hotfix)分支用于生成快速给产品发布版本(production releases)打补丁,这是唯一可以直接从master分支fork出来的分支。修复完成,修改应该马上合并回master分支和develop分支(当前的发布分支),master分支应该用新的版本号打好Tag。

为Bug修复使用专门分支,让团队可以处理掉问题而不用打断其它工作或是等待下一个发布循环。你可以把维护分支想成是一个直接在master分支上处理的临时发布。

示例

下面的示例演示本工作流如何用于管理单个发布循环。假设你已经创建了一个中央仓库。

创建开发分支



 

第一步为master分支配套一个develop分支。简单来做可以本地创建一个空的develop分支,push到服务器上:

git branch develop
git push -u origin develop

以后这个分支将会包含了项目的全部历史,而master分支将只包含了部分历史。其它开发者这时应该克隆中央仓库,建好develop分支的跟踪分支:

git clone ssh://user@host/path/to/repo.git
git checkout -b develop origin/develop

现在每个开发都有了这些历史分支的本地拷贝。

工程师A和工程师B开始开发新功能



 

这个示例中,工程师A和工程师B开始各自的功能开发。他们需要为各自的功能创建相应的分支。新分支不是基于master分支,而是应该基于develop分支:

git checkout -b some-feature develop

他们用老套路添加提交到各自功能分支上:编辑、暂存、提交:

git status
git add
git commit

工程师A完成功能开发



 

添加了提交后,工程师A觉得她的功能OK了。如果团队使用Pull Requests,这时候可以发起一个用于合并到develop分支。否则她可以直接合并到她本地的develop分支后push到中央仓库:

git pull origin develop
git checkout develop
git merge some-feature
git push
git branch -d some-feature

第一条命令在合并功能前确保develop分支是最新的。注意,功能决不应该直接合并到master分支。冲突解决方法和集中式工作流一样。

工程师A开始准备发布



 

这个时候工程师B正在实现他的功能,工程师A开始准备她的第一个项目正式发布。像功能开发一样,她用一个新的分支来做发布准备。这一步也确定了发布的版本号:

git checkout -b release-0.1 develop

这个分支是清理发布、执行所有测试、更新文档和其它为下个发布做准备操作的地方,像是一个专门用于改善发布的功能分支。

只要工程师A创建这个分支并push到中央仓库,这个发布就是功能冻结的。任何不在develop分支中的新功能都推到下个发布循环中。

工程师A完成发布



 

一旦准备好了对外发布,工程师A合并修改到master分支和develop分支上,删除发布分支。合并回develop分支很重要,因为在发布分支中已经提交的更新需要在后面的新功能中也要是可用的。另外,如果工程师A的团队要求Code Review,这是一个发起Pull Request的理想时机。

git checkout master
git merge release-0.1
git push
git checkout develop
git merge release-0.1
git push
git branch -d release-0.1

发布分支是作为功能开发(develop分支)和对外发布(master分支)间的缓冲。只要有合并到master分支,就应该打好Tag以方便跟踪。

git tag -a 0.1 -m "Initial public release" master
git push --tags

Git有提供各种勾子(hook),即仓库有事件发生时触发执行的脚本。可以配置一个勾子,在你push中央仓库的master分支时,自动构建好对外发布。

最终用户发现Bug



 

对外发布后,工程师A回去和工程师B一起做下个发布的新功能开发,直到有最终用户开了一个Ticket抱怨当前版本的一个Bug。为了处理Bug,工程师A(或工程师B)从master分支上拉出了一个维护分支,提交修改以解决问题,然后直接合并回master分支:

git checkout -b issue-#001 master

Fix the bug

git checkout master
git merge issue-#001
git push

就像发布分支,维护分支中新加这些重要修改需要包含到develop分支中,所以工程师A要执行一个合并操作。然后就可以安全地删除这个分支了:

git checkout develop
git merge issue-#001
git push
git branch -d issue-#001

最后

Git是一个不错的版本管理工具,但也仅仅是工具。记住,这里演示的工作流只是可能用法的例子,而不是在实际工作中使用Git不可违逆的条例。所以不要畏惧按自己需要对工作流的用法做取舍。不变的目标就是让Git为你所用。

参考资料

  1. Comparing Workflows https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow/
  2. Git 版本控制系統 http://ihower.tw/git/index.html
  • 大小: 25.4 KB
  • 大小: 14.7 KB
  • 大小: 25.2 KB
  • 大小: 29.9 KB
  • 大小: 34.6 KB
  • 大小: 5.7 KB
  • 大小: 9.3 KB
  • 大小: 6.4 KB
  • 大小: 5.7 KB
  • 大小: 8.5 KB
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    Git基本命令和GitFlow工作流.docx

    Git的基本命令以及GitFlow工作流为团队协作提供了一套完整的工具和流程。正确使用这些命令可以帮助团队高效地管理工作流,提高代码质量和项目管理效率。通过合理的分支管理和交互,可以确保项目的稳定性和可维护性。

    配合Git flow 流程使用的git 操作命令指南

    通过遵循Git flow流程和熟练掌握相应的Git命令,开发团队可以更有效地协同工作,确保代码质量,降低出错风险,并提高软件开发的效率。不过,每个团队可能有自己的特定需求,因此在实际应用中,可以灵活调整或简化Git...

    Git工作流指南:Gitflow工作流

    Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。除了使用功能分支,在做准备、维护和记录发布也使用各自的分支。当然你可以用...

    git-flow.pptx

    以下是 Git Flow 的标准工作流: 1. 初始化:使用 `git flow init` 命令来初始化 Git Flow 环境。 2. 功能开发:使用 `git flow feature start` 命令来创建新特性分支,开发完成后使用 `git flow feature finish` ...

    gitflow安装手册

    为了更好地理解和实践GitFlow工作流,下面将详细介绍其安装过程: 1. **确保Git已安装** 在安装GitFlow之前,需要确认计算机上已安装Git。如果尚未安装,请访问[Git官方网站](https://git-scm.com/downloads)下载...

    gitflow相关文件.zip

    这个名为"gitflow相关文件.zip"的压缩包包含了Git Flow工作流的几个关键组件,用于确保在Windows环境下顺利运行Git Flow命令。下面将详细解释这些组件的作用以及如何在Git环境中设置它们。 1. **Git Flow**: Git ...

    git flow在Windows中的安装

    ### git flow 在 Windows 中的安装与使用 #### 一、Git Flow 概述 `git flow` 是一种基于 Git 的分支管理模型,旨在为软件开发团队提供...此外,熟练掌握 Git Flow 的常用命令对于有效利用这套工作流来说至关重要。

    gitflow使用指南

    除了命令行工具外,还有一些第三方工具提供了更友好的图形用户界面来支持GitFlow工作流,如SourceTree等。这些工具通常具有更好的用户体验,能够更直观地展示分支之间的关系和操作历史。 ### 结语 通过以上介绍...

    gitflow-maven-plugin:Git-Flow Maven插件支持各种Git工作流,包括GitFlow和GitHub Flow。 该插件从命令行运行Git和Maven命令

    Git-Flow Maven插件 支持各种Git工作流程的Maven插件,包括Vincent Driessen和 。... <build> <plugins> <plugin> <groupId>com.amashchenko.maven.plugin</groupId> <artifactId>gitflow-maven-

    git_flow工具介绍

    git_flow工具介绍 Gitflow工作流是经典模型,体现了工作流的经验和精髓。...Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。

    gitflow-extension-tools:基于扩展的gitflow工作流管理项目(JavaNodePython ...)的分支和版本

    Gitflow Extension Tools 是一个强大的工具集,用于管理和维护基于Gitflow工作流的项目。这个工具扩展了传统的Gitflow模式,支持多种编程语言如Java、Node.js和Python等,旨在为软件开发团队提供更加灵活和高效的...

    git-flow 备忘清单

    备忘清单中,基础建议是注意Gitflow命令的输出提示,理解每个操作的影响。此外,对于初学者而言,了解Git-flow的安装和初始化过程是必要的。在不同的操作系统中,如OSX、Linux、Windows等,安装Git-flow的步骤各不...

    git 教材 progit

    8. **Git工作流**:了解Git的不同工作流模型,如GitFlow、Forking Workflow等,可以帮助你更好地适应团队协作的场景。 9. **Git图形化工具**:除了命令行工具,还有许多图形化工具如SourceTree、GitKraken等,它们...

    Git版本控制管理 第2版.pdf.zip

    3. **Git Flow工作流**:理解并应用git flow命令行工具,包括初始化、创建feature分支、完成feature、发布release、维护hotfix等操作。 4. **解决冲突**:当多个用户修改同一文件时,Git如何处理冲突,以及手动解决...

    Git版本控制与工作流1

    3. Gitflow Workflow:更正式的分支模型,包括master(生产分支)、develop(开发分支)、feature(特性分支)、release(发布分支)和hotfix(热修复分支)。 4. Forking Workflow(分叉工作流):每个开发者有自己...

    Posh-GitFlow:用于执行 GitFlow 任务的 Powershell 脚本

    通过 Posh-GitFlow,你可以用命令行方式快速执行 GitFlow 中的各种操作,如初始化项目、创建和合并分支等,而无需手动输入复杂的 Git 命令。 GitFlow 工作流的核心概念包括: 1. **主分支 (Master)**:存储生产就绪...

    完全学会GIT+GITHUB+GIT+SERVER的24堂课

    在实际项目中,常见的Git工作流有Git Flow、GitHub Flow和GitLab Flow等。Git Flow强调预发布分支(如develop和feature)和长期分支(如master和release),而GitHub Flow则简化为master一个分支,强调快速合并和...

    git安装及使用

    常见的Git工作流包括GitFlow、Forking Workflow和GitHub Flow。每种工作流都有其适用场景,例如GitFlow适用于大型项目,强调分支管理和严格的发布流程;GitHub Flow则适用于敏捷开发,鼓励快速迭代和频繁合并。 ...

Global site tag (gtag.js) - Google Analytics