相关笔记: https://blog.csdn.net/djdjiejsn/category_12893502.html
前言:
分布式版本控制系统(Distributed Version Control System,简称 DVCS)是一种将代码仓库完整地复制到每个开发者本地的版本控制系统。与集中式版本控制系统(如 SVN)不同,分布式版本控制系统中的每个开发者都拥有代码仓库的完整副本,包括所有的历史记录、分支和标签等信息。
在前面就讲过每一次提交都会有记录,有一条线,这是master的主分支。然而,我们还可以创建其他的分支,进行分支操作,分支编写代码。
下面就是没其他其他分支的master分支。
git log --graph --abbrev-commit
git branch进行创建分支,没有加名字就是查看当前所有的分支,加上就是创建分支
git branch //查看所有的分支
git branch (分支名) //创建分支
比如我查看我现在的分支:
现在只有一个分支:master分支,然后我们创建了dev1,dev2分支。
然后就再次用git branch进行查看分支就有三个了。
* 绿色的就是当前所在的分支。*表示HEAD指向的哪个分支。
前面的git checkout -- 是撤销工作区的修改,撤销到最近一次的暂存区或者版本库。
但是不加--的意思就是分支切换了。
git checkout (分支名) //分支切换
此时的HEAD就指向dev1分支了。
我们在dev1分支进行代码编写,然后完成一次add,commit操作以后,进行的就是dev分支进行操作。而且在其他分支下是看到这个新增的代码的。
在dev1新增,并且保存,在master分支,还有dev2分支都是看不到的。
要想在master分支看到,就要在master进行合并。
使用git merge进行分支合并。
git merge (分支名)
然后我们进行查看,就可以看到dev分支的内容了。
这时候就是正常的合并,没有出现合并冲突的。
特别注意一下Fast-forward这个,ff合并,不会产生新的commit信息。
下面的最新一次信息还是devcommit产生的信息。
这个用图示来解释就是master直接指向dev1分支了。
master直接就指向最新一次的dev1进行的commit。
简化的就是这样了:
正常情况下 ,merge如果没有发生冲突,也没有写--no-ff 进行合并,那么就是Fast forward模式进行合并,这种合并不会产生新的commit。这种合并,如果以后把分支删除了,就分辨不出来这部分是merge到master里面来的,还是正常master,commit提交的。所以我们不建议使用Fast forward模式进行操作。而是每次merge时都要--no-ff,表示不要进行Fast forward模式进行合并。
加上这个选项以后,就要-m "commit描述信息".
这样就会形成一个新的commit。
这种情况就要手动进行代码修改,然后再进行一次commit。
Auto-merging file1 CONFLICT (content): Merge conflict in file1 Automatic merge failed; fix conflicts and then commit the result.
提示信息说,自动合并出错,需要手动fix,然后进行commit最后的结构。
然后我们打开我们的file1
aaaaaaaaaaaaaaaaaa
dev1 add bbbbbbbbb
<<<<<<< HEAD
master master master
=======
dev dev dev dev dev
>>>>>>> dev
<<<<<<<<HEAD到=======是当前分支的内容。
=======到>>>>>>dev是dev分支修改的内容。
然后我们想要怎么修改,我们手动进行修改,再进行commit。
如果没有发生冲突,也是可以用--no-ff 进行mege形成新的commit的。
当分支合并以后,分支就基本没用了,我们就可以把分支删除了,使用的命令是:
git branch -d (已经合并的分支名)
这个只能删除已经合并的分支。
不能删除还没有合并的分支。
删除没有合并的分支,要d变为D才能删除。
git branch -D (未合并的分支名)
git stash的作用是保护还没有commit的工作区和暂存区。
git stash 的主要用途: 临时保存更改:当你正在开发某个功能或修复某个问题时,突然需要切换到另一个任务,但又不想提交当前未完成的更改。 清理工作区:在切换分支或合并代码之前,需要清理工作区,但又不想丢失当前的更改。 快速切换任务:在多个任务之间快速切换,而不需要频繁提交和回滚更改。
//保存当前更改到 Stash
git stash
//切换到修复问题的分支
git checkout fix-branch
//修复问题并提交
git add .
git commit -m "Fix urgent issue"
//切换回原来的分支
git checkout feature-branch
//重新应用保存的更改
git stash apply
//将stash放到工作区
git stash pop