版本控制系统Git进阶(二)

上一篇版本控制系统Git 进阶(一)

产生冲突

  • 创建分支featureA与分支featureB(注:还不懂怎么创建分支的请查看版本控制系统Git 进阶(一)),然后使用git branch查看分支列表。
    《版本控制系统Git进阶(二)》
  • 使用命令git checkout featureA切换到featureA,并在git.txt 添加“add featureA”,然后commit 在此分支上。
  • 切换到主干分支master,并且使用git merge featureA,把featureA分支合并到master分支上。
    《版本控制系统Git进阶(二)》
    解析:上图 1 + 表示有git.txt 有一行添加进来。使用cat git.txt可以查看添加的内容,此处就不截图。
  • 切换到分支featureB上,使用命令cat git.txt查看git.txt的内容,此时是空的,在git.txt上第一行添加内容add featureB,再commit到分支上。
  • 切换到主分支master上,合并分支到featureB,看看提示。

    《版本控制系统Git进阶(二)》

解析:提示有冲突。打开git.txt看看有什么内容。

《版本控制系统Git进阶(二)》

解析下,
=======以上部分是当前HEAD的内容,一下部分是featureB的内容。我们理想的状态是这样

《版本控制系统Git进阶(二)》

但是,为什么会那样?回想下,在分支featureA上添加内容到git.txt上时,是在第一行上添加的,而在分支featureB上添加内容到git.txt也是在第一行上的,合并的时候,出错了,第二次合并的时候,发现第一行有内容了,那么在fetureB的内容该放在哪里并不知道。此时应该解决冲突,手动去解决。

解决冲突

解决冲突很简单,打开git.txt编辑好后直接提交到master分支。使用git status查看冲突解决了。

《版本控制系统Git进阶(二)》

删除分支

featureA分支与featureB分支做的功能已经完成,并且也合并到主分支中,那么就应该删除这两个分支,这是个良好的习惯,使用命令git branch -d <name>

压缩历史 git rebase -i

在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一个历史记录。

  • 创建一个分支featureC

    《版本控制系统Git进阶(二)》

    作为featureC分支的功能实现,在git.txt,添加一行文字并且故意是写错的。

《版本控制系统Git进阶(二)》

其实应该写“add featureC”,故意写错成featuuuC,然后使用命令
git commit -am "add featureC"提交到分支上。

《版本控制系统Git进阶(二)》

注意:此刻我是直接使用git commit -am,代替了 先add ,再commit。

  • 修改拼写错误
    修改刚刚的featuuuC为featureC,然后使用git diff,查看修改后的差别
    《版本控制系统Git进阶(二)》

然后提交。

《版本控制系统Git进阶(二)》

  • 更改历史
    实际上,你可能不需要在历史记录中看到这两天记录,因为你提早发现了错误,并作出改正,所以可以把这两次提交的记录压缩成一次。使用命令git rebase - i HEAD~2进入到编辑器中。
    《版本控制系统Git进阶(二)》

接下来,将ec1a087 fix这条历史记录压缩到83e04a0这条记录中,只需要将ec1a087 fix 左侧的pick改为fixup,然后保存退出。

分支featureC的功能完成,这时候也应该删除了。

    原文作者:nullStr
    原文地址: https://www.jianshu.com/p/82e724450d42
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞