很多朋友对于git commit和gitlab官网不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
一、git commit 是什么
1、 gitcommit”的意思为“git提交”,是git系统的一个命令,主要用于将暂存区里的改动内容提交到本地仓库中;语法为“gitcommit-m[message]”,“[message]”可以是一些备注信息。
2、 gitcommit命令的-a选项可只将所有被修改或者已删除的且已经被git管理的文档提交倒仓库中。如果只是修改或者删除了已被Git管理的文档,是没必要使用gitadd命令的。gitadd.命令除了能够判断出当前目录(包括其子目录)所有被修改或者已删除的文档,还能判断用户所添加的新文档,并将其信息追加到索引中。gitcommit--amend对于已经修改提交过的注释,如果需要修改,可以借助gitcommit--amend来进行。
3、 COMMIT(操作指令),COMMIT命令用于把事务所做的修改保存到数据库,它把上一个COMMIT或ROLLBACK命令之后的全部事务都保存到数据库。使用COMMIT提交当前事务,使事务中执行的变更永久化,所有事务的更改都将为其他事务可见,而且保证当崩溃发生时的可持续性。
二、git commit命令是做什么用的
1、git commit主要是将暂存区里的改动给提交到本地的版本库。
2、每次使用git commit命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。
3、git commit-a-m"提交的描述信息"
4、git commit命令的-a选项可只将所有被修改或者已删除的且已经被git管理的文档提交倒仓库中。如果只是修改或者删除了已被Git管理的文档,是没必要使用git add命令的。
5、git add.命令除了能够判断出当前目录(包括其子目录)所有被修改或者已删除的文档,还能判断用户所添加的新文档,并将其信息追加到索引中。
6、git commit--amend对于已经修改提交过的注释,如果需要修改,可以借助 git commit--amend来进行。
7、COMMIT命令用于把事务所做的修改保存到数据库,它把上一个COMMIT或ROLLBACK命令之后的全部事务都保存到数据库。
8、使用COMMIT提交当前事务,使事务中执行的变更永久化,所有事务的更改都将为其他事务可见,而且保证当崩溃发生时的可持续性。
9、通过修改的表,查看事务期间所作的任何更改,但其他用户不能看到所做的更改。
10、可以回滚ROLLBACK语句与事务过程中所做的任何更改。
11、可以使用此语句手动提交疑问在分布式的事务上。
12、可以使用此语句终止SET TRANSACTION语句的只读事务。
三、如何写好git commit message
每次提交,Commit message都包括两个核心部分:标题和内容。
<类型>(可选):<主题>//空一行<内容>
其中,标题是必需的,内容无需过多描述的话,正文内容部分可以省略。
不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。
标题部分只有一行,包括字段:类型和主题。
标题限制总字数在50个字符以内,以保证容易阅读。
feat: init LearnGit.gitI got a wrong-style git commit, so I init a.git for learninghow to write a git commit message in right way.And the last line just write here for a simple test,it's useless acturally.
类型用于说明 commit的类别,只允许使用下面7个标识。
init:项目初始化(用于项目初始化或其他某种行为的开始描述,不影响代码)
opt:优化和改善,比如弹窗进行确认提示等相关的,不会改动逻辑和具体功能等
style:格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
other:用于难以分类的类别(不建议使用,但一些如删除不必要的文件,更新.ignore之类的可以使用)
(可选)类型后面可以加上括号,括号内填写主要变动的范围,比如按功能模块分,某模块;或按项目三层架构模式分,分数据层、控制层之类的。
#student-->表示学生模块(具体的模块开头字母小写,驼峰命名)
#ALL-->表示所有模块(特殊含义如ALL表所有,MOST表大部分,用大写字母表示)
e.g. feat(#student):新增添加学生的功能——表示student模块新增功能,功能是添加学生
主题是 commit目的的简短描述,不超过50个字符。
以动词开头,使用第一人称现在时,比如change,而不是changed或changes
内容部分是对本次 commit的详细描述,可以分成多行,正文在 72个字符处换行。
使用正文解释是什么(what)和为什么(why),而不是如何做,以及与以前行为的对比。
2.2格式化后Commit message的好处
2.2.1提供更多的历史信息,方便快速浏览
比如,下面的命令显示上次发布后的变动,每个commit占据一行。你只看行首,就知道某次 commit的目的。
关于更多git log的输出格式,参考以下:
2.2.2可以过滤某些commit(比如文档改动),便于快速查找信息
比如,下面的命令仅仅显示feat类型的commit。
5.3 Git log高级用法过滤提交历史
四、《Git/Gitlab进阶》十三:多样化处理本地commit记录
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
在本地开发时,有提交很多次,但是其中提交信息,可能有些是可以合并到一起,有的可能没必要可以删除,有的需要修改 commit measssge……
这些都可以使用 git rebase命令的相关参数指令实现。
在本地的 tensorflow项目中添加几次提交
假如需要修改 commit id为 699b10610的 commit message。
因为这不是最近的一条 commit,所以 git commit--amend无法使用。
需要使用 git rebase指令相关参数
输入 git rebase-i<commit id>,进入 interactive模式
其中<commit id="" style="box-sizing: border-box;">为此次想要调整这个节点(commit id)开始至 HEAD中间的提交纪录。</commit>
因为我们要修改 commit id为 699b10610的 commit message,所以此处 git rebase-i后面的 commit id,可以是 699b10610的前一个 4f092caa。
输入指令后,会弹出文件,编辑需要调整的 commit记录,以及指令说明,如下图
注意:在 Rebase状态看到的这个纪录是跟我们平常看的纪录是反过来的,越新的 Commit在越下面。
所以,我需要修改 commit id为 699b10610的 commit message,只需要把这份文件中第一行改为 reword+修改后的message再保存执行即可
保存并关闭文件之后,会弹出一份新的文件,主要用于确认和修改 commit meassge,如下图
保存并退出后,可以看到 git rebase命令执行完成
查看日志,之前 commit id为 699b10610的提交,已经被修改为 commit id为 11d4ec53,内容也为修改后的内容。但是其它内容没有异动。
同上,使用 git rebase-i指令即可修改
根据上述指令说明,这可能需要执行多次。如果需要一并修改 commit message,要使用 squash,用第一条代替合并后的 commit message,使用 fixup。
示例:合并 commit id aa0312a和 c78d4fe和 026345ca,并修改 commit meassge为:“修改 tensorflow1.txt内容”
使用 git rebase-i进入 interactive模式
修改弹出文件第三句指令为 squash(注意,这个 commit的 squash,需要从下往上合并,否则可能会报 error: cannot'squash' without a previous commit错误)
然后会弹出合并 commit message的确认和修改画面
此时查看日志,就发现之前的 3条 commit,变成两条了
所以,再执行一次,即可达到最开始的需求,3合 1
这个不再赘述,同样使用 git rebase-i<commit id>进入 interactive模式,把需要删除的信息从 pick改为 drop,或者直接删除掉,再保存即可。
rebase的<commit id>要在被删除提交信息之前,不然看不到;
如果删除的那次提交会导致冲突,根据解决冲突的效果,影响对应 commit信息保留结果。
其它指令不再一一说明,简单带过。例如
想要调整提交信息顺序,直接把 interactive模式中看到的信息对应调整即可,诸如此类。
想要在已提交信息中间添加新的 commit信息,在新增起点的<commit id>的 interactive,模式改为 edit,
这会中止 rebase,然后就可以使用 git commit--amend修改当前信息,
或者实际修改文件/夹,再使用 git add和 git commit命令去添加新的 commit信息。
直到添加完成,再使用 git rebase--continue即可。
不要一定要注意,慎重,因为有一些提交和后续的提交是相互依存的,删除或者变动之前的可能会导致后续的提交出现异常,导致项目出现问题。
使用 git rebase-i<commit id>,可以对本地的提交记录做很多变动。
在进入 interactive模式后,对该文件(git-rebase-todo)做相应修改:
关于git commit到此分享完毕,希望能帮助到您。