Git相关知识(分支管理、主要命令和冲突解决)

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操作

gitresetsoft5ec3455dae0c02537c2d9ff1e001b5da97e71d9a 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

参考:http://www.cnblogs.com/mengdd/p/3585038.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章