还在把GIT当做SVN用?用了这么久的GIT,你知道它也有规范吗?
yuyutoo 2024-11-09 15:29 3 浏览 0 评论
作为版本控制软件,SVN早已被淘汰了,现在越来越多的开发者都已经拥入了GIT的怀抱。
可是,你一直在使用GIT的方式,真的用对了吗?
下面就给大家列出一些常见的错误使用方式和一些规范和技巧,注意事项。
错误做法1:commit之后立即push
有些人还是停留在SVN的落后思想中,还是使用SVN那种陈旧的提交方式,还特地为自己找了一个看似很合理的借口:
“我这样可以避免发生冲突”,“我不想解决冲突”
你这样真的是很让别人头大啊,对于项目管理来说,这种方式虽然能减少自己代码的冲突解决,但是你会给别人造成很多麻烦。
正确使用git,不要落入svn的使用行为模式: commit + push,这是集中式版本控制系统的最常见工作模式:每一个commit都立即push到server上。
这样就失去了分布式版本控制的灵活性:因为只要还没有push,就有足够的灵活性,我们可以对自己的commits进行修改,甚至删除,在git典型的工作模型中,你每天都可能产生10-30个commits,但我们仅仅需要2~3次的push,只要是不紧急的bug-fix或者feature-develop,都不必要频繁的进行push。
错误做法2:不清理提交历史,就直接push
push之前,记得清理你的提交历史,很多原因导致我们的提交历史图谱是混乱的,通常导致图谱混乱的原因有:
- “我需要多个commit来解决一个bug”;
- “我可能在commit时写了错别字,后来又进行更改”;
- “甚至我在某次提交中,纯粹是为了懒惰,不想使用stash,我可能把很多的修改变更进行了一次临时的commit”;
这些场景都会导致一个混乱的提交历史产生,难以阅读,难以理解,难以让他人看懂,这里的他人也可能是你自己,想想两个月后你再回来看自己的提交历史吧?
提交历史是非常有用的,能够追溯代码来源,谁修改了,改了哪里,产生了什么问题,通常用来后续定位代码问题所在,比如当你的某次提交把别人代码搞丢了的时候,就得通过提交历史来查看你到底做错了什么把别人代码弄丢了。
很幸运的是,git给了我们重新清理的机会:
- 重新修改提交记录(比如修改最近的一次提交记录:git commit --amend)
- 把所有提交放回暂存区,重新进行一次提交(squash)
- 重新对提交顺序进行调整
- 删除某个commit
- 合并某些commit
重新整理commit命令见 git rebase -i
奇淫巧技:cherry-pick
这个命令用于将某个指定的提交copy到当前分支。目的是将某个commit在当前分支上重演一遍。
使用方法:
git cherry-pick [commitId]
比如你在自己分支上改了很多功能,其中一个提交修复了一个bug的,但其他提交都是跟功能特性开发相关,但是这是测试分支、或者UAT分支需要紧急修复你改掉的那个BUG,那怎么把你那个提交放到对应分支上,又不会把其他修改带过去呢?这个情况下 cherry-pick 命令非常有用。
对于rebase命令,需要牢记的一个黄金定律
一句话总结: 只要还未push,都可以安全rebase!
学会使用git rebase -i 清理本地commit历史
命令行中在要清理的分支执行:
git rebase -i [baseCommitId]
会以交互式方式对本地提交进行整理,比如修改commit的注释,合并commit,重新对commit排序,删除某个commit等,以保证push后的提交历史清晰易读有用。
一般使用 rebase -i 清理历史时,往往base就是当前分支的remote tracked branch, 例如:
git rebase -i origin/test
由于经常要使用这个命令,因此可以配置一个全局的别名命令 tidy 来代替上述命令:
git config --global alias.tidy "rebase -i @{upstream}"
然后使用命令:
git tidy
就可以执行清理了! git tidy就相当于git rebase -i [origin/branchName]
尽量不要使用默认的pull命令
git pull 命令是 git fetch + git merge 两个命令的组合。
而通常情况下我们希望远程仓库的分支历史信息是线性化的,然而pull自带的merge操作会进行分支合并,融合,使得分支历史产生交叉点,如果一次 git pull 操作是快进(fast-forward)模式的话,并没有什么影响,然而如果是一个三路合并(three-way-merge),将会自动产生一个merge commit,其注释信息就例如 “Merge branch 'test' of git@git.xxx.com:xxx-developer/scmv6.git into test”这样,就产生了一个远程仓库的分支合并到本地仓库分支,产生一个交叉点,但实际上这个交叉的合并是完全没有意义的。
对于上面说的这种问题,我们为了保证远程分支历史的可读性,线性化,我们要避免使用 git pull 默认的merge动作,我们需要显式的指定使用rebase操作:
git pull --rebase
这样就明确要求 git pull 产生三路合并时通过变基(rebase,中文变基,也称衍合)来进行合并。但这需要我们时刻注意 git pull 操作使用rebase而不是merge,但我们往往会忘记,因为是人就会有犯错误的可能,因此我们可以:
- 先fetch,然后进行rebase
- 修改pull默认的合并方式,全局配置:pull.rebase = true 或者branch级别配置:branch.branchName.rebase = true
上面两种方式二选一,如果你已经习惯了使用git pull,改用fetch + rebase不习惯或者觉得太麻烦(是人总想偷懒),那么就用第二种方式。
rebase还有一些注意事项
git rebase 命令使我们在分支提交历史管理上用非常棒的方式来进行合并,切片,清理等操作,但要注意的是rebase会使提交历史变成线性的,我们在使用rebase合并时,不希望产生merge带来的分支交叉,但仍希望保留merge清晰的语义,线性的提交历史让人讨厌。
举个栗子:
比如我们将自己的分支text_xxx通过merge合并到了关联远程仓库分支的本地test分支,然后进行了 git pull --rebase 或 git fetch + git rebase;然后查看test分支历史,发现我们合并test_xxx分支的历史都变成了线性的,看不出test_xxx分支合并的信息了,但我们仍然希望保留这个分支历史信息,我们就要使用 git pull --rebase=preserve 命令来保证合并记录。
仍然觉得命令 git pull --rebase=preserve太长,不容易记住,我们可以通过全局配置来修改rebase的默认行为:
git config --global pull.rebase "preserve"
尽量使git merge 强制使用three-way-merge
我们在合并自己的本地分支到远程分支时,如果是一个fast-forward模式的,在合并后删除我们的本地分支,那么远程分支历史图谱上变看不到我们的分支开发记录,我们希望在删除分支后,仍然保证我们的分支历史是清晰可见的,我们就不能使用 ff 方式进行merge,我们需要显式指定:
git merge --no-ff
eclipse操作merge时,要注意勾选:if a fast-forward, create a merge commit 选项。
或者全局配置默认merge操作以防忘记:
git config --global merge.ff false
专专心心做技术经验分享,一门心思搞科技知识普及。我是大师兄,喜欢我的分享的话,点个关注吧!@小影迷大师兄
相关推荐
- 野路子科技!2步教你把手机改造成一个FTP服务器,支持PC互传
-
哈喽,大家好,我是野路子科技,今天来给大家带来一个教程,希望大家喜欢。正如标题所言,就是教大家如何把售价改造成FTP服务器,而这个时候估计有朋友会问了,把手机改造成FTP服务器有什么用呢?现在有Q...
- 不得不看:别样于Server-U的群晖文件存储服务器的搭建与使用
-
我先前的作品中,有着关于Server-U的ftp文件存储服务器的搭建与访问的头条文章和西瓜视频,而且我们通过各种方式也给各位粉丝介绍了如何突破局域网实现真正意义上的公网访问机制技术。关于Server-...
- Qt三种方式实现FTP上传功能_qt引入qftp库
-
FTP协议FTP的中文名称是“文件传输协议”,是FileTransferProtocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经...
- Filezilla文件服务器搭建及客户端的使用
-
FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户...
- 美能达柯美/震旦复印机FTP扫描怎么设置?
-
好多网友不知道怎么安装美能达/震旦复印机扫描,用得最多是SMB和FTP扫描,相对于SMB来说,FTP扫描安装步骤更为便捷,不容易出问题,不需要设置文件夹共享,所以小编推荐FTP来扫描以美能达机器为例详...
- CCD(简易FTP服务器软件)_简单ftp服务器软件
-
CCD简易FTP服务器软件是一款很方便的FPT搭建工具,可以将我们的电脑快速变成一个FPT服务器。使用方法非常简单,只要运行软件就会自动生效,下载银行有该资源。该工具是不提供操作界面的,其他用户可以输...
- Ubuntu系统搭建FTP服务器教程_ubuntu架设服务器
-
在Ubuntu系统上搭建FTP服务器是文件传输的一个非常实用方法,适合需要进行大量文件交换的场景。以下是一步步指导,帮助您在Ubuntu上成功搭建FTP服务器。1.安装vsftpd软件...
- 理光FTP扫描设置教程_理光ftp扫描设置方法
-
此教程主要用来解决WIN10系统下不能使用SMB文件夹扫描的问题,由于旧的SMB协议存在安全漏洞,所以微软在新的系统,WIN8/WIN10/SERVER201220162018里使用了新的SMB传...
- 纯小白如何利用wireshark学习网络技术
-
写在前面工欲善其事必先利其器!熟悉掌握一种神器对以后的工作必然是有帮助的,下面我将从简单的描述Wireshark的使用和自己思考去写,若有错误或不足还请批评指正。...
- 京东买13盘位32GB内存NAS:NAS系统安装设置教程
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:yasden你没有看错,我在京东自营商城购买硬件,组装了一台13盘位,32GB内存的NAS,硬盘有13个盘位!CPU是AMD的5500!本文...
- python教程之FTP相关操作_python ftps
-
ftplib类库常用相关操作importftplibftp=ftplib.FTP()ftp.set_debuglevel(2)#打开调试级别2,显示详细信息ftp.connect(“I...
- xftp怎么用,xftp怎么用,具体使用方法
-
Xftp是一款界面化的ftp传输工具,用起来方便简单,这里为大家分享下Xftp怎么使用?希望能帮到有需要的朋友。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新...
- 树莓派文件上传和下载,详细步骤设置FTP服务器
-
在本指南中,详细记录了如何在树莓Pi上设置FTP。设置FTP可以在网络上轻松地将文件传输到Pi上。FTP是文件传输协议的缩写,只是一种通过网络在两个设备之间传输文件的方法。还有一种额外的方法,你可以用...
- win10电脑操作系统,怎么设置FTP?windows10系统设置FTP操作方法
-
打印,打印,扫描的日常操作是每一个办公工作人员的必需专业技能,要应用FTP作用扫描文件到电脑上,最先要必须一台可以接受文件的FTP服务器。许多软件都需要收费标准进行,但人们还可以应用Windows的系...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)