git的分支管理
比起同类软件,Git其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便。有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称”快照”)的指针,因此非常快捷易用。
分支管理中常用的分支有三种:master、develop、临时性分支(feature(功能分支),release(预发布分支)、fixbug(bug修复)),主要分支是前两种,fixbug分支主要应用于对一些特定目的的版本开发,使用完之后,merge到主要分支中然后立即删除。
`git checkout master
git merge --no-ff dev
# 对合并生成的新节点,做一个标签
git tag -a 1.2`
其中--no-ff
会执行正常合并,在Master分支上生成一个新节点。默认情况下,不是用这个参数,Git执行”快进式合并”(fast-farward merge),会直接将Master分支指向Develop分支。
临时性分支
1,功能分支(feature)
功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。
2.预发布分支(release)
预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。
3,修改分支(fixbug)
修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。
参考资料:http://www.ruanyifeng.com/blog/2012/07/git.html
git命令
git branch
没有参数,显示本地版本库中所有的本地分支名称。
当前检出分支的前面会有星号。
git branch newname
在当前检出分支上新建分支,名叫newname。
git checkout newname
检出分支,即切换到名叫newname的分支。
git checkout –b newname master
这个命令将上面两个命令合并:在master分支上创建分支newname分支并检出到该分支。
2.压合合并(squashed commits):
将一条分支上的若干个提交条目压合成一个提交条目,提交到另一条分支的末梢。
把dev分支上的所有提交压合成主分支上的一个提交,即压合提交:
git checkout master
git merge --squash dev
此时,dev上的所有提交已经合并到当前工作区并暂存,但还没有作为一个提交,可以像其他提交一样,把这个改动提交到版本库中:
git commit –m “something from dev”
3.拣选合并(cherry-picking):
拣选另一条分支上的某个提交条目的改动带到当前分支上。
每一次提交都会产生一个全局唯一的提交名称,利用这个名称就可以进行拣选提交。
比如在dev上的某个提交叫:321d76f
git checkout master
git cherry-pick 321d76f
选多个提交,可以给git cherry-pick命令传递-n选项,比如:
git cherry-pick –n 321d76f
这样在拣选了这个改动之后,进行暂存而不立即提交,接着可以进行下一个拣选操作,一旦拣选完需要的各个提交,就可以一并提交。
冲突处理
对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。
删除一个分支
删除dev2:
git branch –d dev2
注意不能删除当前所在分支,需要转到别的分支上。
如果要删除的分支已经成功合并到当前分支,删除分支的操作会直接成功。
如果要删除的分支没有合并到当前所在分支,则会出现提示,如果确定无须合并而要直接删除,则执行命令:
git branch –D dev2
进行强删。
重命名分支:
git branch –m oldname newname
-m不会覆盖已有分支名称,即如果名为newname的分支已经存在,则会提示已经存在了。
如果改成-M就可以覆盖已有分支名称了,即会强制覆盖名为newname的分支,这种操作要谨慎。
以下方法适用于:撤销最后一次提交的情况
步骤如下:
步骤1、使用 ”Git log“ 命令 找到 想要撤销的操作之前的一次提交的commit id ;
比如:使用 git log命令如下结果
commit-id1
commit-id2
commit-id3
如果想要撤销commit_id1的话,那么我们就要选择commit-id2
步骤2、使用如下两个命令撤销提交:
git reset –har d commit-id2
git push originEAD –force
$ git log -3
commit 40e8c12abff40aba66d8fa6ed4970a93890d755a
feature 2.2
commit f0aac7525f6cb0be069662b0b3c52e8edf411a62
feature 2.1
commit 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a
function 1
使用git reset –soft,撤销最近的两次commit操作
gitreset–soft5ec3455dae0c02537c2d9ff1e001b5da97e71d9a
git status
$git reset –hard 撤销本地文件、statge、local repo的修改
git reset –hard
git push origin HEAD –force
$ git reset --soft 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a
$ git status
$git reset –hard 撤销本地文件、statge、local repo的修改
git reset --hard <commit_id>
git push origin HEAD --force