# Git实战

# My Git Flow

有代码审核的情况下,feature用于代码审核,feature-dev用于开发人员常规提交。没有代码审核的情况feature和feature-dev合并为一个。

master:

feature-1.0:

feature-1.0-dev:

# Git暂存区存在的意义

在学习Git三大区域的时候,一直有个疑惑,为啥要暂存区,通过工作区直接提交到本地仓库不就OK了!那么暂存区存在有什么作用,存在的意义是什么?

答案:会有这个疑惑的,请先问问自己,使用git时候是否都是所有的修改全部提交了,根本没有考虑到多个修改文件,是和多个功能有关,而每一个功能应该单独做成一次提交,这样可以保证提交历史的清晰。否则,当你想要回滚历史的时候,你会无所适从,根本分不清每个版本包含了哪些功能,修复了哪些bug.而暂存区的作用就是为了,可以选择提交,比如你在开发B功能的时候,发现A功能还存在Bug,这时候就需要先修复A中的Bug,然后先提交修复的A中的Bug,然后再提交B功能开发的文件。这样就可以提高提交版本历史记录的清晰,方便回滚。而提交是原子性操作,文件的选择就交于暂存区去做,每一次提交都是一个完整的功能开发,保证commit的干净,降低commit的粒度。

# 合并分支

一般我们把别的分支合并到master时用merge,而把master合并到别的分支时会用到rebase

rebase解析

基于上述内容,可以使用如下流程来提交代码:

  1. 在dev1分支上进行开发,然后commit提交,在dev1分支上生成一个提交单。
  2. 切换到master分支,与remote/master分支同步。
  3. 切换回dev1分支,将master分支rebase到dev1分支上,如果有冲突,修改冲突。rebase操作的冲突修改与merge不一样,修改完冲突后,保存进index,然后直接git rebase --continue即可,不同再多做一次提交。
  4. 切换回master分支,合并dev1分支,此时合并会非常顺畅。然后push。

# 删除具体某个commit的方法

比如我的提交历史如下,我现在想删除commit_B,但是不影响commit_B之后的提交历史

commit_C 

commit_B

commit_A

操作方法如下:

假如要删除备注为add B.txt commit为0fb295fe0e0276f0c81df61c4fd853b7a000bb5c的这次提交

  1. 首先找到commit_B之前的一次提交commit_A的id(假设为id-commit_A)
  2. 执行如下命令
git rebase -i  id-commit_A
  1. commit_B这一行前面的pick改为drop,然后按照提示保存退出
  2. 至此已经删除了指定的commit,可以使用git log查看下 git push origin HEAD –force 然后推送到远程仓库 此时 commit_B 就被干掉了,没有影响后面的提交
Last Updated: 1/8/2020, 4:29:58 PM