Git的版本和分支管理

转载 2017年11月15日 11:26:34

由于已经对git使用比较熟悉了,此篇关于git分支和版本的的管理将不会详细记录每一个细节。如果你还不熟悉git,请先参看:

[1] http://blog.csdn.net/xiahouzuoxin/article/details/9393119

[2] http://blog.csdn.net/xiahouzuoxin/article/details/9398629

[3] http://blog.csdn.net/xiahouzuoxin/article/details/18076043

本地的分支管理

创建分支,你可以使用

git branch dev

这就创建了一个dev(development之意),更好的,选择使用下面的方法创建两个分支——dev,创建后会自动切换到新创建的分支,

git checkout -b dev

要切回master分支怎么办?使用

git checkout master

当然你也可以使用

git checkout dev 

再次切换到dev分支。

好了,现在有两个分支:master和dev了。比如切来切去,突然暂停手下的活要先撸一把,撸完回过头不知道现在在哪个分支了,怎么办?

git branch

git-branch.png

搞定,git branch可以查看当前已有的分支信息,并在将当前所在分支高亮,当前分支前还有个*号。

某天要调试某个新算法,又不能保证能调好,又怕打乱了原有的程序,怎么办?建一个新分支:

git checkout -b debug

在debug分支中慢慢玩,master分支和dev分支毫不受影响。这时就有两种情况:

  • 悲剧的最后还是没调出来,我又有强迫症,debug分支一直放在那总是不爽,删了
git branch -d debug
  • 恭喜,算法调试成功,我要合并到master中
git checkout master   // 切换到master
git merge debug       // 合并debug到master 

这时如果你很幸运,直接合并成功。悲伤的事情总是时有发生,“合并发生冲突”是常有的事,因此一旦出现类似下面的提示

CONFLICT (content): Merge conflict in ...
Automatic merge failed; fix conflicts and then commit the result.

就得自己动手解决冲突了,git会用

<<<<<<<HEAD
 master原有的内容
=======
 debug分支中冲突的内容
>>>>>>>debug

这样的格式提醒你,只要修改保留实际需要的内容后即可解决冲突,解决冲突后就可以执行git commit。

好了,我们合并了master和debug,做IT的人总会偷个腥,想看看git是怎么记录合并的,没问题,

git log --graph --pretty=oneline --abbrev-commit

就可以直接看到分支合并的过程。我这有个大点的工程合并效果的例子,

example.png

最后,反正debug我玩完了,删除debug分支

git branch -d debug

远程的分支管理

我们所有的开发工作都在dev上进行,一旦有了大的突破,则合并到master。

  • 既然有了dev分支,我也要把它推送到github上

如果不在dev,切换到dev,

git branch
git checkout dev 

还记得我们之前推送master分支到远程origin吗?

git push -u origin master

推送dev也是一样的,只要指定分支名为dev就可以了,

git push -u origin dev 
  • 同学A开头写了个项目,老板让我也跟着做,同学A说,你到github上图clone我的代码吧
git clone git@github.com:....

这是,你用git branch看看,这只是clone了master分支,dev呢?这可是费劲苦心,要在同学A的dev分支上开发,就必须创建远程的dev分支到本地

git checkout -b dev origin/dev 

再用git branch看看?有了吧。

  • 在同学A的基础上我又添了新功能,老板催着,赶紧提交
git checkout dev 
git pull origin dev 
  • 老板某天突然和我说:你看同学A,又修改了好多Bug,还不下下来学学
git pull origin dev  

可能出现冲突,解决后才能进行下一次的提交。

极少的场合,要不就是老板的老婆月经乱了,要不就是。。。哎,不说了,非要删除远程dev分支,也是有办法的,

git push oringin :dev 

本地Tag管理

哇,第一个里程碑式的突破,有木有,这时你可小小的庆幸一下,打个标签(Tag),表示这是个可靠的可发布版本,

git tag -a v1.0 -m "第一个里程碑的突破"

当然,注释别向上面一样(”第一个里程碑的突破”)写得那么没有营养。起个好名字很重要。默认的标签将打在最新的commit上。

查看打了哪些标签使用

git tag 

查看某个标签的信息用

git show v1.0

好了,好马也有失前蹄的时候,标签打错也是正常的,

git tag -d v1.0

果断删了v1.0标签。

远程Tag管理

我想要把v1.0推送到远程,

git push origin v1.0

把所有的标签一次推送到远程更爽,

git push origin --tags

删除远程的标签,你可以到github上删除,也可以,

  • 先删除本地的
git tag -d v1.0
  • 删除远程的
git push origin :refs/tags/v1.0

git回到指定版本命令

git reset 是指将当前head的内容重置,不会留log信息。
git reset HEAD filename  从暂存区中移除文件
git reset --hard HEAD~3  会将最新的3次提交全部重置,就像没有提交过一样。
git reset --hard [commit哈希值](38679ed709fd0a3767b79b93d0fba5bb8dd235f8)
 回退到 38679ed709fd0a3767b79b93d0fba5bb8dd235f8 版本

 ·eg:
 (1)回退到指定版本
 git reset --hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96
 (2) 把修改推到远程服务器
 git push -f -u origin master 
根据--soft --mixed --hard,会对working tree和index和HEAD进行重置:
(1)git reset --mixed:此为默认方式,不带任何参数的git reset,它回退到某个版本,只保留源码,回退commit和index信息
(2)git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
(3)git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
  • 例如:
    我要彻底返回在上一次提交以前的版本。git reset –hrad HEAD~1
    我要回到上一次提交的版本:git reset –hard

结尾及参考

好了,告一段落了,接着就是使用git策马奔腾吧!

[1] 廖雪峰Git教程

maven git 工程版本管理

版本项: maven工程 pom.xml git 的分支和tag 详解: maven的版本管理,pom.xml 中的该包的版本号,主要是在打包后携带版本信息,以此,我们可以通过配置maven的snap...
  • lipingping951462
  • lipingping951462
  • 2017年02月11日 21:59
  • 1127

Git版本控制:Git分支处理

分支的意义与管理 创建分支可以避免提交代码后对主分支的影响,同时也使你有了相对独立的开发环境。 创建并切换分支,提交代码后才能在其它机器拉分支代码git checkout -b new_branc...
  • pipisorry
  • pipisorry
  • 2015年07月19日 21:59
  • 2362

svn与git结合,实现版本管理

1、实际使用的是svn与git结合,没有单纯的使用svn或git,当然svn和git都是一套完整的VCS(version control system)。   2、为什么要结合使用git? 之前使用的...
  • juechen507
  • juechen507
  • 2015年06月03日 15:05
  • 2289

Git的版本和分支管理(高级用法 写的较好)

由于已经对git使用比较熟悉了,此篇关于git分支和版本的的管理将不会详细记录每一个细节。如果你还不熟悉git,请先参看: [1] http://blog.csdn.net/xiahouzuox...
  • sdkdlwk
  • sdkdlwk
  • 2017年12月09日 16:58
  • 68

git使用总结。分支管理,版本跳转回退

git checkout作用于工作区。reset还原来自版本库 master是一个指向快照的指针。HEAD可以指向master也可以指向其他的分支比如dev,feature,issue等等。都可以的。...
  • me4weizhen
  • me4weizhen
  • 2016年06月15日 16:12
  • 2187

04-Git版本备份/分支管理(补充了解)

* 在git中不是通过拷贝代码来解决备份和开启分支的* * git 直接打标签, 通过控制head指向,来回到任一版本** 1> 版本备份 * 建立共享库 创建文件夹shareWeibo ...
  • loyalwind
  • loyalwind
  • 2015年12月02日 21:40
  • 165

版本控制(八)--git分支&管理

分支原理分支实质Git 是如何储存数据的?Git 保存的不是文件差异或者变化量,而只是一系列文件快照。 在 Git 中提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容快照的指针...
  • houseq
  • houseq
  • 2015年06月12日 01:11
  • 749

Rails项目中,利用Git做版本控制及分支管理实践总结

Git is awesome!! 在拜读了几篇Git的文章,并且亲身实践之后,由衷的感觉!   下面,就来说一说,我自己在整个项目中使用Git的一些方法及体会:(这里假设你已经安装好了git,并...
  • a8885313
  • a8885313
  • 2013年01月13日 16:42
  • 238

git的版本管理使用(三)-拉取分支代码

*之前2篇是在github上操作的git版本管理,这篇是在开源中国·码云 上面的git版本管理。使用下来都差不多,暂时没有发现不一样的内容。 关于分支内代码的拉取的问题: 问题详述:看下图,我...
  • yangjianbo456
  • yangjianbo456
  • 2016年07月22日 16:13
  • 15203

iOS-在Xcode中使用Git进行源码版本管理(四:分支)

分支(Branches) 试想一下,你现在的工程有一个即将发布的版本,或是已经发布的版本,你突然想添加一些新的特性,如何防止这些新添加的代码让整个项目陷入瘫痪呢?答案很简单:你需要使用分支。 ...
  • Axing1991
  • Axing1991
  • 2015年12月14日 17:46
  • 373
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Git的版本和分支管理
举报原因:
原因补充:

(最多只允许输入30个字)