`
li.oo
  • 浏览: 51505 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Git使用规范流程

阅读更多
团队开发中,遵循一个合理、清晰的Git使用流程,是非常重要的。

否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。

下面是ThoughtBot 的Git使用规范流程。我从中学到了很多,推荐你也这样使用Git。



第一步:新建分支

首先,每次开发新功能,都应该新建一个单独的分支(这方面可以参考《Git分支管理策略》)。


# 获取主干最新代码
$ git checkout master
$ git pull

# 新建一个开发分支myfeature
$ git checkout -b myfeature
第二步:提交分支commit

分支修改后,就可以提交commit了。


$ git add --all
$ git status
$ git commit --verbose
git add 命令的all参数,表示保存所有变化(包括新建、修改和删除)。从Git 2.0开始,all是 git add 的默认参数,所以也可以用 git add . 代替。

git status 命令,用来查看发生变动的文件。

git commit 命令的verbose参数,会列出 diff 的结果。

第三步:撰写提交信息

提交commit时,必须给出完整扼要的提交信息,下面是一个范本。


Present-tense summary under 50 characters

* More information about commit (under 72 characters).
* More information about commit (under 72 characters).

http://project.management-system.com/ticket/123
第一行是不超过50个字的提要,然后空一行,罗列出改动原因、主要变动、以及需要注意的问题。最后,提供对应的网址(比如Bug ticket)。

第四步:与主干同步

分支的开发过程中,要经常与主干保持同步。


$ git fetch origin
$ git rebase origin/master
第五步:合并commit

分支开发完成后,很可能有一堆commit,但是合并到主干的时候,往往希望只有一个(或最多两三个)commit,这样不仅清晰,也容易管理。

那么,怎样才能将多个commit合并呢?这就要用到 git rebase 命令。


$ git rebase -i origin/master
git rebase命令的i参数表示互动(interactive),这时git会打开一个互动界面,进行下一步操作。

下面采用Tute Costa的例子,来解释怎么合并commit。


pick 07c5abd Introduce OpenPGP and teach basic usage
pick de9b1eb Fix PostChecker::Post#urls
pick 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
上面的互动界面,先列出当前分支最新的4个commit(越下面越新)。每个commit前面有一个操作命令,默认是pick,表示该行commit被选中,要进行rebase操作。

4个commit的下面是一大堆注释,列出可以使用的命令。

pick:正常选中
reword:选中,并且修改提交信息;
edit:选中,rebase时会暂停,允许你修改这个commit(参考这里)
squash:选中,会将当前commit与上一个commit合并
fixup:与squash相同,但不会保存当前commit的提交信息
exec:执行其他shell命令
上面这6个命令当中,squash和fixup可以用来合并commit。先把需要合并的commit前面的动词,改成squash(或者s)。


pick 07c5abd Introduce OpenPGP and teach basic usage
s de9b1eb Fix PostChecker::Post#urls
s 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend
这样一改,执行后,当前分支只会剩下两个commit。第二行和第三行的commit,都会合并到第一行的commit。提交信息会同时包含,这三个commit的提交信息。


# This is a combination of 3 commits.
# The first commit's message is:
Introduce OpenPGP and teach basic usage

# This is the 2nd commit message:
Fix PostChecker::Post#urls

# This is the 3rd commit message:
Hey kids, stop all the highlighting
如果将第三行的squash命令改成fixup命令。


pick 07c5abd Introduce OpenPGP and teach basic usage
s de9b1eb Fix PostChecker::Post#urls
f 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend
运行结果相同,还是会生成两个commit,第二行和第三行的commit,都合并到第一行的commit。但是,新的提交信息里面,第三行commit的提交信息,会被注释掉。


# This is a combination of 3 commits.
# The first commit's message is:
Introduce OpenPGP and teach basic usage

# This is the 2nd commit message:
Fix PostChecker::Post#urls

# This is the 3rd commit message:
# Hey kids, stop all the highlighting
Pony Foo提出另外一种合并commit的简便方法,就是先撤销过去5个commit,然后再建一个新的。


$ git reset HEAD~5
$ git add .
$ git commit -am "Here's the bug fix that closes #28"
$ git push --force
squash和fixup命令,还可以当作命令行参数使用,自动合并commit。


$ git commit --fixup 
$ git rebase -i --autosquash
这个用法请参考这篇文章,这里就不解释了。

第六步:推送到远程仓库

合并commit后,就可以推送当前分支到远程仓库了。


$ git push --force origin myfeature
git push命令要加上force参数,因为rebase以后,分支历史改变了,跟远程分支不一定兼容,有可能要强行推送(参见这里)。

第七步:发出Pull Request

提交到远程仓库以后,就可以发出 Pull Request 到master分支,然后请求别人进行代码review,确认可以合并到master。

(完)
分享到:
评论

相关推荐

    git使用规范(绝密).pdf

    首先,规范的第一部分介绍了开发人员使用Git的流程。这一流程包括了克隆代码库、创建本地分支、基于开发分支新建本地开发分支、更新代码以及修改代码后提交等步骤。值得注意的是,在克隆代码库时,可以使用`***:/...

    git使用流程和规范1

    本文主要探讨了在团队中如何有效地使用 Git,以实现高效的工作流程和规范,从而提高团队的长期工作效率,灵活应对产品需求变化,以及方便自动化测试和部署。 首先,我们来看一种常见的 Git 工作流模型——git-flow...

    git版本管理使用规范-团队开发规范文档

    制定此规范的主要目的是为了统一团队的Git操作流程,提高开发效率,减少因版本管理不善导致的问题,保证代码的稳定性和可追溯性。 ### 2. 背景 在多人协作的开发环境中,代码的频繁修改和合并容易引发冲突,因此...

    git使用流程图,图文并茂,比较详细

    git使用流程,使用规范,使用细节,发布流程,研发版本,修复版本,补丁版本等控制。本地远程比较。代码合并,分支管理。

    git命令流程图

    git命令流程图,便于理解git的使用流程;

    Git协作开发流程规范

    ### Git协作开发流程规范 #### 一、Git协作开发流程的重要性及定义 在现代软件开发过程中,团队协作显得尤为重要。为了确保项目的顺利进行,并保证所有团队成员能够在同一个方向上高效工作,就需要有一套规范化的...

    git开发流程规范

    git开发流程规范,及简单代码提交与代码拉取,完整的开发流程。

    Git工作流程.pdf

    Git工作流程,作为多人协作中不可或缺的一部分,指的是在使用Git进行版本控制时,团队内部按照一定的规范来协作完成代码的开发、测试、发布等环节。阮一峰在其网络日志中介绍了三种广泛使用的Git工作流程:Gitflow、...

    git使用规范

    本文将深入解析Git的使用规范,涵盖工作流程、基本操作命令及其应用场景,帮助开发者更好地理解和运用Git。 #### 工作流程 **初始化项目** - **`git clone`**: 当项目开始时,通过`git clone URL`命令,可以克隆...

    XXX软件git发布管理流程规范V1.0.doc

    该文档主要介绍了XXX软件git发布管理流程规范V1.0的相关知识点,涵盖了目标、外网迁回内网内容、发布流程、补丁发布流程、主版本发布流程、产品实施流程、XXX系统管理流程、发布策略、禅道问题解决流程、相关资料、...

    Git开发操作流程v1.0 Git使用笔记 git常用命令 git常见问题

    Git是分布式版本控制系统,用于跟踪对文件和目录的更改,广泛应用于软件开发。本文将详细介绍Git的开发操作流程,常用命令以及...在实际工作中,结合团队的流程规范,合理运用Git能够极大地提高开发效率和代码质量。

    XXX软件git发布管理流程规范V1.1(简化).doc

    《XXX软件Git发布管理流程规范V1.1(简化)》文档主要针对小团队的软件发布流程进行了简化,旨在提高工作效率、减少沟通成本,并增强流程的预见性和可控性。以下是该流程规范的关键知识点: 1. **目标设定**: - *...

    gitblit及使用教程

    在本教程中,我们将深入探讨Gitblit的安装配置以及日常使用,帮助你更好地理解和掌握这一强大的Git服务器。 1. **Gitblit简介** Gitblit以其简洁的界面和易用性赢得了用户的喜爱。它不仅支持本地运行,还可以作为...

    gitflow开发流程.pdf

    根据文件中提供的信息,我们可以详细阐述gitflow开发流程的相关知识点: 首先,Gitflow是一种针对git仓库操作的分支管理模型,它特别适合...但同时也需要团队成员之间良好沟通和遵守规范,才能充分发挥gitflow的优势。

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

    以下是一些关于如何配合Git flow流程使用的Git操作命令的详细说明: 1. **初始化Git flow** 在开始使用Git flow前,需要先安装git flow工具,然后在项目根目录下运行`git flow init`初始化。初始化时,你需要指定...

    分支管理规范-GIT分支流程开发规范

    《分支管理规范-GIT分支流程开发规范》 在软件开发过程中,版本控制是至关重要的,而Git作为目前最流行的分布式版本控制系统,其分支管理机制在团队协作中扮演着核心角色。本规范旨在定义一套适用于大多数开发团队...

    git的使用规范

    ### git的使用规范 #### 一、概述 `git`是一种分布式版本控制系统,广泛应用于软件开发过程中,用于跟踪代码的变化历史、支持多人协作等。本文档将从几个方面详细介绍git的基本使用方法及其注意事项,帮助开发者更...

    git使用培训教程

    为了排除一些不希望被Git跟踪的文件,可以在仓库目录下创建一个.gitignore文件,文件中规定了需要忽略的文件或目录模式。例如,可以在.gitignore中加入`*.log`来忽略所有.log文件。 在Git配置方面,可以使用`git ...

Global site tag (gtag.js) - Google Analytics