Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Git 使用规范流程

Git 使用规范流程

作者头像
ruanyf
发布于 2018-04-13 06:56:50
发布于 2018-04-13 06:56:50
9650
举报

团队开发中,遵循一个合理、清晰的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。

(完)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年8月 5日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Git 合并多个 commit,保持历史简洁
开发过程中,本地通常会有无数次 commit ,可以合并“相同功能”的多个 commit,以保持历史的简洁。
叨叨软件测试
2020/09/01
149.6K0
Git 使用记录 - 各种撤销
以上操作用于撤销保存在工作区修改,但是不会撤销暂存区中的修改。 由于修改还没记录到 git 中,撤销无法恢复,请慎重!
orientlu
2018/09/13
1.3K0
如何使用 Git 撤消(几乎)任何操作
任何版本控制系统最有用的功能之一就是能够“撤消”错误。在 Git 中,“撤消”可能意味着许多略有不同的事情。
madneal
2023/12/05
2700
如何使用 Git 撤消(几乎)任何操作
姐姐问我什么是变基操作(git-rebase)
话说,我和姐姐的缘分是在那一个月黑风高的晚上,啪,姐姐一巴掌打在了我的脸上并说了一句:能不能讲重点~~~。哈哈,不开玩笑了,直接说重点吧。我们先来看一个场景,我查看了一下我github上的个人仓库,commit提交次数很多,提交内容如下:
Golang梦工厂
2022/07/08
6470
姐姐问我什么是变基操作(git-rebase)
45个 GIT 经典操作场景,专治不会合代码
git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令。
程序员小富
2022/03/04
1.9K0
45个 GIT 经典操作场景,专治不会合代码
Git 合并多次提交
在合并分支的时候,希望将多次提交合并成一个,然后再 cherry-pick 到主分支。
zucchiniy
2020/05/22
1.5K0
git合并历史提交
背景 以前一直觉得只要pull和push就够了,但合作中总会遇到各种非理想的情况。这时候才发现git其他命令的作用。 现在的情况是,repo是一个远程team维护的,我们需要增加新feature,那么就是一个feature分支了。由于开发中各种修改,本feature分支多次commit。最后,交给远程team review的时候,人家看着乱七八糟的修改历史很蛋疼:很难看懂各种增量修改。其实,对人家来说,我们的改动应该就是增加或者删除。给他们看开发过程的增量反而太乱。于是,人家要求我们将feature分支的提
Ryan-Miao
2018/03/13
2.2K0
如何维持整洁的 Git 提交记录?送你三个锦囊!
背景 大家都有学习如何规范简洁的编写代码,但却很少学习如何规范简洁的提交代码。现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 workflow 来提交/合并 code,这种灵活性把控不好,也会带来很多问题 最常见的问题就是乱成一团的 git log history,那真的是老太太的裹脚布, 又臭又长, 个人极其不喜欢这种 log 造成这个问题的根本原因就是随意提交代码。 代码都提交了,那还有什么办法拯救吗?三个锦囊,就可以完美解决了 如果您正在学习Spring C
程序猿DD
2023/04/04
3790
如何维持整洁的 Git 提交记录?送你三个锦囊!
【linux命令讲解大全】013.Git:分布式版本控制系统的先驱和常用命令清单(二)
我还遇到了如下面错误,lab默认给master分支加了保护,不允许强制覆盖。Project(项目)->Setting->Repository 菜单下面的Protected branches把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。
全栈若城
2024/03/02
1200
git 更新历史提交
有时候我们在git commit后才发现,之前的一些提交有些问题,比如有些代码忘提交了或者有一些typo需要修改。如果要修改的地方是需要添加到最后一次提交上的,那么可以参考我的这篇博文修改,如果是在非最后一次提交上的,那么就需要用git rebase来操作。这里简单记录一下操作的过程。
王云峰
2023/10/23
2840
Git 帮助手册
国外网友制作了一张 Git Cheat Sheet,总结很精炼,各位不妨收藏一下。
硬件开源小站
2023/04/07
4.4K1
Git 帮助手册
动图详解常用的git命令
git merge用于将一个分支(branch)的修改应用到另一个分支(branch)上。git merge包含两种类型:fast-forward和no-fast-forward。
YoungTimes
2022/04/28
1.4K0
动图详解常用的git命令
Git实用技巧
原文:https://www.escapelife.site/posts/f6ffe82b.html
吾非同
2022/04/11
4070
Git实用技巧
关于 Git 重写提交历史的一些笔记
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
4180
git 整体提交记录(rabase)后合并(merge)
为了合并 dev 分支到 master 分支,同时确保代码不丢失且提交记录规整,你可以使用交互式的 git rebase 命令。这允许你重新排列、修改、合并或分割提交。以下是操作步骤:
宋天伦
2023/10/21
5200
如何克服解决Git冲突的恐惧症?(Git移交提交记录)
接下来要讨论的这个话题是“整理提交记录” :开发人员有时会说“我想要把这个提交放到这里,那个提交放到刚才那个提交的后面”, 而接下来就讲的就是它的实现方式,看起来挺复杂, 其实是个很简单的概念。
前端黑板报
2020/12/10
6130
如何克服解决Git冲突的恐惧症?(Git移交提交记录)
git 使用流程规范(merge-request)
git 使用流程规范(merge-request) 如果你的git workflow 采用此模式,谨记一定要忘记 git merge,除了在 master 分支上 git pull 可以使用 git pull,其他分支如果要 git pull应该使用 git pull --rebase 使用 git rebase 的黄金法则就是:分支的开发者尽量是一个人,重写提交历史不会影响别人 新建分支 # 创建分之前,先切换到 master 分支,更新到最新版本,确保你的新分支是基于最新版本的master # 在
luxixing
2019/05/28
9.8K1
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
上篇博客聊了《git分支管理之rebase 以及 cherry-pick相关操作》本篇博客我们就以Learning Git中的关卡进行展开。下方列举了LearningGit中的 merge、rebase、reset、revert、cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析。后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例。 learngitbranching的地址为:https://l
lizelu
2018/03/28
17.5K0
Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase
Git 使用规范流程
首先,每次开发新功能,都应该新建一个单独的分支(这方面可以参考《Git分支管理策略》)。
小小杨
2021/10/13
1.2K0
Git秘籍: Git and Git Flow Cheat Sheet
注意:git remote rm 不会从服务器上删除远程仓库。它只是从本地仓库中删除远程文件及其引用。
MoyiTech
2023/02/27
1.8K0
Git秘籍: Git and Git Flow Cheat Sheet
相关推荐
Git 合并多个 commit,保持历史简洁
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档