git--分支管理

分支

什么叫分支呢?我们之前用git进行开发的时候,都是在主分支上(master)。你可以理解为master就是我们线上的版本,假设我们现在要开发一个新功能,我们可以单独拉个分支进行开发,在这个分支上进行开发,这样就不会影响我们之前的版本了。当我们开发了一段时间之后,发现线上有一个bug,需要紧急修复。我们可以切换到master分支上,在拉一个分支,这时,这个分支是没有我们的新开发的代码的。我们可以在这个分支上修改bug,修改完bug之后,合并到master上上线。在切换到新功能的分支上进行开发,开发完之后再和master进行合并。

 git branch

git branch用于查看所有的分支

我们现在master上有三个版本

 查看一下分支

# git branch
* master

git branch命令会列出所有分支,当前分支前面会标一个*号

创建分支

既然v3版本是我们的线上版本,我们要开发新功能肯定不能在这个分支上进行更改,我们可以新建一个dev分支,在dev分支上开发新功能

# git branch dev

在来查看一下分支

# git branch
  dev
* master

切换分支

我们已经创建了一个dev分支,既然要在dev分支上开发新功能,那我们首先要切换到dev分支上

git checkout 分支名称

# git checkout dev

查看下我们在哪个分支上

# git branch
* dev
  master

*表示当前在dev分支上。

上面我们创建了分支,然后切换了分支,其实我们可以一步完成

# git checkout -b dev
# git checkout 命令加上-b参数表示创建并切换,相当于以下两条命令:

# git branch dev

# git checkout dev

切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:

# git switch -c dev

既然切换到了dev分支上,那我们就开发新功能

复制粘贴了n行代码之后。。。

发现线上有了个bug,需要我们紧急处理,我们先把我们写的新功能提交到版本库里

# git add .

# git commit -m '新功能50%'

既然有bug了,我们肯定优先处理bug,肯定不能在当前分支处理,新功能可能还没开发完成。我们可以新创建一个bug分支,在那个分支上进行bug修复

首先切换到master分支,这时master上是没有我们新开发的功能代码的

# git checkout master
Switched to branch 'master'

创建一个bug分支

# git branch bug

切换到bug分支

# git checkout bug
Switched to branch 'bug'

既然我们已经切换到了bug分支上了,那我们修改bug,复制粘贴。。。

在提交到版本库

# git add .

# git commit -m '修复bug'

合并分支

现在bug已经修改完了,我们要把修复bug的代码合并到master分支上发布上线

我们要把bug分支合并到master上,所以我们要切换到master上,这时master上是没有修复bug的代码的,也就是只有v3版本的代码

# git checkout master
Switched to branch 'master'

git merge 要合并的分支

# git merge bug
Updating b119263..21e1638
Fast-forward
 manage.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

在去看代码,我们修复bug的代码都已经合并到master上了。

既然我们的bug已经解决了,那bug分支就没有用了,我们可以删掉

删除分支

git branch -d 分支名称

# git branch -d bug
Deleted branch bug (was 21e1638).

这时候在使用git branch查看就没有bug分支了

解决冲突

既然bug已经解决了,那我们可以继续开发我们的新功能了,切换到dev分支上

# git checkout dev
Switched to branch 'dev'

复制粘贴之后,我们的新功能也开发完成了。提交到版本库

# git add .

# git commit -m '新功能完成'

既然新功能已经完成了,就要发布上线了,切换到master上

# git checkout master
Switched to branch 'master'

合并分支

# git merge dev
Auto-merging manage.py
CONFLICT (content): Merge conflict in manage.py
Automatic merge failed; fix conflicts and then commit the result.

git告诉我们合并失败了,我们打开我们的文件

可以看到这里失败了,这是因为我们之前拉了两个分支dev和bug,在bug分支上修复了bug之后合并到了master分支上,这时master的代码和dev的代码不一致,导致我们合并的时候,git不知道怎么合并,所以会失败,我们可以手动进行合并,然后再提交到版本库

# git add .

# git commit -m '新功能上线'

最后在使用git log --pretty=oneline查看下版本

# git log --pretty=oneline
727f1a099b14080eedf72ebc87ee4fa501e39c15 (HEAD -> master) 新功能上线
9e645c85a404d65ff6ea2a1b2dcb8f657a29f264 (dev) 新功能完成
21e16380e4ba0dce46bb02ce530d3a82ab80dc73 修复bug
832b337fa420e2620343f59eca32780d439a39da 新功能
b119263bf20d6e9b1cc521ea3edd7e2d0cfa2274 v3版本
7eb789f8b7002c432c958c281c838b3076a779a1 v2版本
09403486af1fd13ca9f844326e1bd7c187611be8 v1

Beyond Compare

上面我们解决冲突是靠手工一行一行的解决的,如果有成百上千个文件有冲突,这样肯定是不行的。beyond compare提供这种比较,把所有冲突的文件找出来,然后我们只需要点点点就可以了

首先需要安装 官网:http://scootersoftware.com/

安装完成之后需要进行配置,执行下面的命令

# git config --local merge.tool bc3
# git config --local mergetool.path '你的compare的安装路径'
# git config --local mergetool.keepBackup false

配置完成之后只需要执行下面的命令,就会打开compare软件,自动找到有冲突的文件

# git mergetool

 注意:上面的--local表示只在当前目录里有效,也就是如果你还有一个文件夹也被git管理,在那个里面不会生效

posted @ 2019-11-15 22:45  邹邹很busy。  阅读(239)  评论(0编辑  收藏  举报