开发环境之git:团队协作git工作流与常用命令

此篇文章只是一篇傻瓜式的,记录工作中比较规范且常见的一个git工作流需要用到的命令,让你可以快速的开始工作。而不是一些长篇大论的理论知识,如果你有用过sourcetree或者其它图形化工具,结合你正在使用的工具,敲这些命令,看图形化工具中的变化,对比思考这些命令可能会更容易吸收。

1.基本配置

刚入职公司开始做项目拉代码,需要经历的第一件事。配置个人的用户名称和电子邮件地址(通常是公司邮件地址)

1.1 配置用户名和邮箱

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

1.2 设置public key

首先需要在本地生成key

ssh-keygen -t rsa -C "你的邮箱"

一路回车,接下来复制public key

cat ~/.ssh/id_rsa.pub

当然也可以去系统里找到这个文件自己手动复制,
windows用户,文件一般在

C:\Users\Administrator\.ssh\id_rsa.pub

mac用户,文件在

用户名\.ssh\id_rsa.pub

可以在命令行里输入

open ~/.ssh

有可能你的[用户名]目录下只有[公共, 图片, 文稿, 下载, 音乐,影片] 等这类文件夹,你就可以同时按下 shift command . 三个键,就可以看到里面会有一个 .ssh 文件夹了。
还有可能你的文件夹目录甚至都没有[用户名]这一栏,可以按照 访达 --> 偏好设置 --> 边栏 中勾选你的用户名就好了。

扯远了,回到主题。复制好 .ssh 下的 id_rsa.pub 文件后,打开你的gitlab 或者 其它你们公司用的git仓库管理系统,将它添加到你的账户上

右上角点击头像 --> 点击settings --> 点击 SSH KEYS --> 点击 ADD SSH KEYS --> 将获取的 id_rsa.pub 文件内容粘贴于此

2.开发阶段的实际场景与常用命令

2.1 如果是启动一个新项目,组长需要做什么?

// 2.1.1:新建gitlab仓库,复制ssh仓库地址
// 2.1.2:克隆项目到本地文件夹
git clone "复制的地址"
// 2.1.3:此时默认是在maser分支上,进到拉取的本地项目目录中去,将本地仓库与远程仓库关联起来。
git remote add origin '复制的地址'
// 2.1.4:推送本地master分支到远程master分支
git push -u origin master
// 2.1.5:新建一个本地dev分支,并切换到本地dev分支
git checkout -b dev
// 2.1.6:在此之前远程是没有dev分支的,需要推送本地dev分支到远程dev分支
git push -u origin dev

master分支将来控制着发布到线上的稳定版本代码,普通成员不可以对master分支进行操作,不然每个组员改点东西,很有可能把线上代码搞崩。组员们只能在dev分支上进行操作。

2.2 接下来组员们需要做什么

// 组员小智:
// 2.2.1 将组长建好的仓库克隆到本地
git clone "复制的地址"
// 2.2.2 默认在master分支上,需要检出远程dev分支到本地dev
git checkout -b dev origin/dev
// 2.2.3 不直接在本地dev分支上写代码,不然就跟svn没什么两样了,基于本地dev分支建一个自己的本地分支,名为xiaozhi
git checkout -b xiaozhi dev
// 2.2.4 此时,就切换到了本地xiaozhi分支上,开始写功能,比如task0001,写完后
git status
// 查看你本地做了哪些修改
git add '修改的文件名(包含目录)'
// 或者
git add *
// 来把你的修改添加到暂存区去,接下来提交代码到本地xiaozhi分支
git commit -m "task0001:基础布局功能"
// 2.2.5 建议每完成一个任务的其中一个小功能就重复一次2.2.4步骤,每天下班前至少要合并推送一次到dev分支。确保你的代码不能影响别人的运行,也不会跟最新的代码相差太远。首先,切换到本地dev分支
git checkout dev
// 2.2.6 拉取最新dev分支代码,可能在你写task0001的时候,别人提交过代码了
git pull
// 2.2.7 合并本地xiaozhi分支代码到本地dev分支
git merge xiaozhi
// 2.2.8 推送你改动的代码到远程dev分支
git push
// 2.2.9 切换到本地xiaozhi分支
git checkout xiaozhi
// 2.2.10 合并本地dev分支到本地xiaozhi分支
git merge dev
// 至此,你将你的改动推送到了远程,你的本地也是最新代码了,继续去做task0003。重复2.2.4-2.2.10步骤

...
...
...
// 当你在2.2.1步骤的时候,可能你的同事小狒也要开始做task0002,他在他的电脑上又是怎么操作的呢?
git clone '复制的地址'
git checkout -b dev origin/dev
git checkout -b xiaofei dev
git status
git commit -a -m "task0002: 基础布局功能"
git checkout dev
git pull
git merge xiaofei
git push
git checkout xiaofei
git merge dev

// 每个组员除了基于dev分支新建的本地分支命名不一样之外,其他基本一样。

2.3 此过程可能会遇到的问题

在执行 git pull 或者 git merge 操作的时候

2.3.1 如果出现这样的代码

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch。
# lines starting with "#" will be ignored, and an empty message aborts the commit

// 可以按 ESC 退出键,输入 :wq  然后敲回车就可以恢复正常,然后继续git push 即可

2.3.2 发现有冲突怎么办?

// 如果提示有冲突,在你的编辑器里看到代码是这样的

>>>>>> HEAD
// 从HEAD到下面的====之间的代码是你拉取的别的组员的代码
function a () {
    console.log('a')
}
======
// 从======到下面的>>>>>之间的代码是你修改的代码
function a () {
  console.log('aa')
}
>>>>>> xiaofei
// 需要小狒和小智商量,保留小智的还是保留小狒的,还是两个人的都要保留一部分。手动改好代码后,执行
git add '冲突的文件名'
git commit -m '解决冲突'
git push

2.3.2 如何放弃本地修改?

// 当小智在他的本地xiaozhi分支上加功能时,可能他开始没考虑全面,想把本地修改的内容都删掉重新来过。

// 当小智还没有 git add 缓存代码时
git checkout -- '想放弃修改的文件名(带路径)'
// 或者放弃所有文件的修改
git checkout .

// 当小智已经把想撤销修改的文件执行了 git add 的时候
git reset HEAD '想放弃修改的文件名(带路径)'
git checkout -- '想放弃修改的文件名(带路径)'

// 当小智已经把想撤销修改的文件不仅git add还git commit的时候
git reset --hard HEAD^
// 可以用这条命令来恢复至上一次commit的状态,如果发现已经提交了好几次怎么办,噗,没忍住笑出了声。如果直接回退肯定是可以的,但是这中间的几次commit可能又有你想要的代码,这个说实话,有点惨。说个比较实际的方案吧。把现在的代码文件夹先复制一份。再执行
git log
// 看看你想回退到哪次commit的状态,找到那次commit的版本号(记住关键的前几位就可以了),然后
git reset --hard e235a
// 然后再从复制的那份文件夹中去对比,看看哪些是你想要的,想要的就加进来。

3. 测试阶段的实际场景与常用命令

终于到了开发完成,要测试的时候了。此时,所有人各自对应的本地分支代码(xiaozhi分支,xiaofei分支)都应该和dev保存一致了。
其实就可以把release分支当作dev分支,只不过开始是大家都推送到dev分支上做开发,而现在是都推送到release分支上改bug。

// 组长:
git checkout -b release dev
git push -u origin release

// 组员小智:
git checkout -b release origin/release
git checkout xiaozhi
git status
git add *
git commit -m "bug0001:修复首页xxxx的问题"
git checkout release
git pull
git merge xiaozhi
git push
git checkout xiaozhi
git merge release
// 继续解决下一个bug

// 组员小狒
git checkout -b release origin/release
git checkout xiaofei
git status
git add *
git commit -m "bug0002:修复列表页的XXXX的问题"
git checkout release
git pull
git merge xiaofei
git push
git checkout xiaofei
git merge release
// 继续解决下一个bug

// 当所有测试提出的bug都解决完后,大家应该保证dev分支,release分支,各自的本地分支(xiaozhi,xiaofei)都一样
// 组长:
// 合并release分支到dev分支上
git checkout dev
git merge release
git push
// 合并release分支到master分支上并打上标签版本号
git checkout master
git merge release
git push
git tag -a v1.0.0 -m '1.0.0版本'
git push origin --tags

// 组员们继续写功能开始进行下一版本的产品迭代,重复2.2.4-2.2.10步骤

4. 上线后客户反馈有bug怎么办?

有可能当组员们已经在各自的本地分支(xiaozhi, xiaofei)上去做下一版本的开发的时候,客户反馈一些测试小姐姐们当时没有测出来的bug。此时大家肯定不会直接去把dev分支再去合并到master分支了。

// 组长:
// 4.1.1 基于master分支新建一个hotfix001分支
git checkout -b hotfix001 master
// 4.1.2 与远程hotfix001分支关联起来
git push -u origin hotfix001

// 组长将这个重大而又紧急的任务指派给小智
// 组员小智:
// 4.1.3 检出远程分支hotfix001到本地分支hotfix001
git checkout -b hotfix001 origin/hotfix001
// 4.1.2 小智一顿牛逼操作之后
git commit -a -m "hotfix001: 解决线上xxxx的问题"
git push
// 4.1.3 测试通过后组长去拉取hotfix001的代码并合并回master分支
git checkout hotfix001
git pull
git checkout master
git merge hotfix001
git push
git tag -a v1.0.1 -m '1.0.1版本:修复XXXX等一系列的问题'
git push origin --tags
// 4.1.4 接下来判断这个线上的bug下一版本是否还要处理,可能让人头大的产品脑壳有包,刚上线没几天就要全部推翻重新搞,那就不需要做什么操作了。如果这个功能还要的话,那组长还需要把这个hotfix001分支合并到dev分支中去
git checkout dev
git pull
git merge hotfix001
git push
// 4.1.5 线上bug分支hotfix001完成了它光荣的使命,可以删除了
git branch -d hotfix001
git push origin --delete hotfix001

5.后话:

我也在用git图形化工具,比如sourcetree。相信很多人也在用,其实用命令行还是不如sourcetree那么方便而强大的。比如在撤销修改的时候,sourceTree可以只撤销这个文件你所改动的某一部分,而git命令行只能对某一个文件的所有改动撤销修改(当然,可能是我对git命令行操作还不那么深入的缘故,但是我相信就算git命令行能做到,也远没有图形化工具那么方便)。

不过我觉得我写这篇文章其实还是有意义的,工作了这么久,几乎天天都会用到git,一些常见git命令都不懂也说不过去,对自己要求并不那么高,并不是要强到什么都可以立刻想到用什么git命令去解决,而此篇文章中工作流常用到的命令还是要熟记于心的。

大家可以用自己的github账号并且找一个小伙伴去建一个仓库模拟体验一下上述多人协作的过程,如果有问题可以一起交流下。

另外,你可能会感兴趣的一些点:

原文地址:https://www.cnblogs.com/hezhi/p/10166307.html

时间: 2024-09-30 08:21:26

开发环境之git:团队协作git工作流与常用命令的相关文章

精通Git(第2版)+Git团队协作+GitHub入门与实践+Git版本控制管理(第2版)

资源链接:https://pan.baidu.com/s/1FElckzWH6sqyugNK5o8b7w搜集并整理了网上有关GitHub学习的9本书籍,如下:<精通Git (第2版)>中英文PDF<Git团队协作>中英文PDF<Git权威指南(第2版)>和第1版PDF<Git版本控制管理 (第2版)>中英文PDF<GitHub入门与实践>PDF,以及Git桌面Win64bit版最新安装包目录及截图如下: 原文地址:http://blog.51ct

Git flow的分支模型与及常用命令简介

Git flow是git的一个扩展集,它基于Vincent Driessen 的分支模型,文章"A successful Git branching model"对这一分支模型进行了描述,其示意图如下: Git flow的源码可以通过以下链接下载: https://github.com/nvie/gitflow 或者,直接输入以下命令安装git flow: apt-get install git-flow 在Windows平台下安装git flow,可以参考<Windows环境下

Git团队协作工具

-- 故国神游,多情应笑我,早生华发. Git是什么? Git是一个版本控制工具,代码管理工具,团队协作工具.它跟SVN等传统工具实现同样的目的:但从某种程度来说,它更快,更灵活.我想绝大多数读者都已经在接触这个工具了,并且用于日常的项目中去了.我的这篇文章,不是作为一个Git入门教程,也不是作为一本大块头的教科书.(说到教科书,我推荐下面的这本.这本书确实好,很全面.我的这篇文章,其实就是这本书的读书笔记而已.) Pro Git -- http://git.oschina.net/progit

Git Flow——Git团队协作最佳实践

规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢失等. 就像代码需要代码规范一样,使用Git进行代码管理同样需要一个清晰的流程和规范, Git Flow就是一个被广泛认可的Git使用最佳实践. Git Flow是Vincent Driessen提出的一个分支管理的策略, 应用这个规范可以使得版本库的演进保持简洁,主干清晰,各个分支有不同的职责,在

Leangoo:用敏捷开发管理思维做团队协作的SaaS软件

第一次看到leangoo这个产品时,笔者觉得又是一款团队协作软件工具,和其它的团队协作并没有什么本质区别. 当听创始人廖靖斌说起leangoo人员结构时,笔者起初蛮诧异,一家20多人的创业公司,顾问和研发差不多各占一半. 一家看起来做saas的公司为什么需要这么多顾问? 在和廖靖斌进行一个多小时的交流中,这个困惑渐渐被解开… Leangoo:一家顾问公司研发的SaaS工具 作为一个八年的“创业老兵”,廖靖斌始终在做的一件事就是实践.推广Scrum和敏捷开发.Scrum是风靡全球的敏捷产品开发框架

Git 项目提交代码及一些常用命令

在dev_ysg分支 : git add . //把项目添加到仓库 git commit -m "test" // 提交加注释 git push //推到dev_ysg分支上去 git checkout dev //切换到dev分支 在dev分支提交的: git pull //拉取一下代码,在多人开发中 要随时更新dev分支的代码 防止冲突 保证修改的是最新的版本 git pull orgin dev // 多加一步 如果没有拉取到 加个orgin 目标 git merge dev_y

git常见操作--忽略文件以及常用命令【转】

转自:http://www.cnblogs.com/elfsundae/archive/2011/07/17/2099698.html References: http://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide http://www.kernel.org/pub/software/scm/git/docs/ http://progit.org/book/ git安装.

Git 团队协作开发

步骤一:进入别人github中的项目 步骤二: 步骤三: 修改 one.txt 或者 新增 文件 都可以 步骤四: 在提交时,要习惯 使用 git pull 命令,防止有人在你写代码时候,提交过一些东西,从而导致你得到的项目文件不全 步骤五: 到这里 你的任务 基本完成了. 下面 是 源项目主人的操作 退出分支的话,将仓库删除即可. 原文地址:https://www.cnblogs.com/nongzihong/p/10448516.html

Git团队协作 - 新feature的开发过程

新feature的开发过程 建议使用SmartGit,以下是命令行操作 git checkout -b dev (对于没有分支的人)新建dev分支 git pull origin dev拉取最新数据 git checkout -b $feature建立一个新分支,名称为具体内容,用于开发新功能 git commit -a -m "msg"在修改工作目录的文件后提交修改 git checkout dev切换回dev分支 git pull origin dev下载服务器最新的dev数据,保