Git(三)

1.rebase

指令:rebase (变基)
他是把当前commit(包括他之前的commits)放应用到指定的需要rebase的commit上。
注意:Git上的每一个commit都是不会改变的,所以rebase之后的每个commit都是新产生的,而且不是对之前的commit的修改。

指令:rebase 的冲突
rebase冲突的解决办法与merge冲突一样,只是把git merge --continue 改成 git rebase --continue 就行。

提交东西后发现写错了
1.如果只是修改最新一条的内容:
指令:git commit --amend
需要注意的是,这个指令 commit --amend 并不是修改原来commit 的内容,他是新产生一个新的commit。(他是将当前commit的内容和暂存区里面的内容合并后创建一个新的commit,并且用这个新的commit把当前的commit替换掉)。
2.旧的提交需要修改:
指令:git rebase -I 指定的commit。
指令:git rebase -I :交互式的rebase
3.已经push到master的内容需要修改:
这个时候不能rebase,因为master上的东西是不能强行修改的
可以用git revert 指定commit来撤销。他的原理是创建一个新的commit,内容是指定commit 的相反内容。

2.rest

把当前的branch指向指定的commit
1.指令:git reset 指定commit
移动到指定commit,并把当前位置和指定位置的文件差异加入working tree
2.指令:git reset --harg 指定commit
移动到指定commit,并重置working tree
指令:reset 和 checkout的区别
他们都是移动HEAD,但checkout移动的时候自己不移动,不带走branch一起移动;而reset会带着branch一起移动。

3.rebase -i交互式rebase

用法:git rebase -I HEAD~2
常用选项:
pick或者p:沿用
reword或r:修改commit message
edit或e:修改commit内容
drop或d:删除
squash或s:和上一条融合,并且合并commit message
fixup或f:和上一条融合,并且沿用上一条的commit message

4.add -i交互式add

指令:git add -I
常用选项:
p(patch)
选取块时的常用选项:
y:选用当前块
n:不用当前块
s:把当前块做自动切分后再重新询问
e:手动选取修改内容

5.tag

另一种引用类型
和branch区别一:不能改变
和branch区别二:不能被HEAD指向
用处:设置持久标记,例如版本号
origin/master, origin/feature, origin/HEAD 和 tag 有相似之处:也不能从本地改变位置,也不能被 HEAD 指向
用法
Git reflog
用途
查看指定的引用(HEAD或branch)的移动历史,从而找到之前的某个特定commit

6.cherry-pick

用法:
指令:git cherry-pick commitl commit2
用途:应用指定的某个或某些 commit 到 HEAD 处

7.github flow

可以有三种 merge 选项:
1. 直接 merge
2. branch 上所有 commit 压合成一个后再 merge
3. branch 上所有 commit rebase 到 master 后再 commit
commit 的时候会自动应用 --no-ff 参数,强行增加一个 merge commit,用于增加记录信息
GitHub 的 release 和 tag:tag 是 Git 的功能,Release 是 GitHub 利用 Git 的 tag 功能所提供的额外功能

8.git flow

image.png

两条持久主线:master 和 develop
1.master
1.只用于存放所有的发布
2.每次有了新的 commit 之后,立即打一个 tag 来记录
2.develop
1.用于存放不稳定版本的发布(例如每夜版)
2.develop 并不是直接用于开发 feature 的,开发 feature 需要专门的 branch develop 在第一时间从 master 上分离出来
3.需要开发任何功能的时候,从 develop 创建出新的 feature branch,开发完成后合并回 develop(合并 的时候使用 --no-ff),然后删掉 feature branch
4.当下一正式版本需要的所有功能开发完成之后,从 develop 上创建新的 release branch,并在 release branch 合并到 master 后合并回 develop(合并的时候用 --no-ff),然后删掉 release branch
3.feature branches
1.每次开发新功能是从 develop 创建
2.开发完成后合并到 develop(使用 --no-ff),然后被删
4.release branches
1.每次下一版本的功能开发完毕后,从 develop 上创建
2.创建完成后,更新版本号,然后单独做一个新的 commit
3.如果有 bug fix,直接在 release branch 上创建
4.bug fix 完成后,合并到 master 和 develop(使用 --no-ff),然后被删掉
5.hotfix branches
已正式发布的产品发现 bug,直接从 master 或者出问题的 tag 上创建 hotfix branch,进行紧急修复, 修复完成后合并到 master 和 develop(或 release branch 如果有的话)(使用 --no-ff),然后被删掉

9.关于 Git 的「分布式」

fork:即服务端的 clone。含义来源于河流的分叉(forking) 两个本地仓库互相 clone:也是可行的,但 push 的时候记得把远端本地仓库的 HEAD detach 掉

你可能感兴趣的:(Git(三))