版权声明:转载请注明出处 https://blog.csdn.net/fan521dan/article/details/89918413
Git分支管理(详,小白专用)
- 几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
- 有人把 Git 的分支模型称为"必杀技特性",而正是因为它,将 Git 从版本控制系统家族里区分出来。
分支命令
- 创建分支
git branch (branchname)
- 当你执行
git init
的时候,缺省情况下 Git 就会为你创建"master"分支
- 当你执行
- 切换分支
git checkout (branchname)
- 当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录
- 合并分支
git merge (branchname)
- 你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支
- 查看分支
git branch
- 删除分支命令:
git branch -d (branchname)
分支示例
下方的示例将会使用以上4种分支命令和上一章的部分命令,作为命令的详细解释
- 准备环境
-
git init demoBranch
创建一个仓库,命名为 demoBranch -
cd demoBranch
进入该仓库的目录 -
touch README
、vim README
- 创建README文件,并写入
demo.com
- 创建README文件,并写入
-
touch hello.php
、vim hello.php
- 创建hello.php文件,并写入
<?php echo 'demo例子:www.demo.com'; echo 'demo例子:www.demo.com'; ?>
- 创建hello.php文件,并写入
-
git add .
将文件写入仓库 -
git commit -m '第一次提交'
提交
-
- 查看当前分支
git branch
- 会显示出 * master ,意思是有一个叫做"master"的分支,并且该分支是当前分支。
- 创建一个名为 testing 的分支
现在我们可以看到,有了一个新分支 testinggit branch testing git branch * master testing
我们看到现在2个分支都有这2个文件,继续切回到master分支$ ls hello.php README $ git checkout testing $ ls hello.php README $ git checkout master
- 修改 master 分支的文件
echo 'demo.com' > test.txt
将‘demo.com’写入到test.txt文件中git add .
写入到仓库git commit -m 'add test.txt'
提交
- 列出分支
测试发现切换到testing分支时,并没有test.txt文件,切换为master时,test.txt文件又出现了$ ls hello.php README test.txt $ git checkout testing $ ls hello.php README $ git checkout master $ ls hello.php README test.txt
- 再次创建一个新的分支
使用git checkout -b newtest
命令来创建新分支并立即切换到该分支下
如你所见,我们创建了一个分支,在该分支的上下文中移除了一些文件,然后切换回我们的主分支,那些文件又回来了。$ ls hello.php README test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest) $ git rm README rm 'README' Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest) $ ls hello.php test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest) $ git commit -am 'remove README' [newtest 41cf349] remove READMEE 1 file changed, 1 deletion(-) delete mode 100644 README Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (newtest) $ git checkout master Switched to branch 'master' Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ ls hello.php README test.txt
使用分支将工作切分开来,从而让我们能够在不同上下文中做事,并来回切换。 - 删除分支
$ git branch -d testing
删除testing 分支
- 合并分支
整理好分支的内容,要将它合并到主分支里去
以上实例中我们将 newtest 分支合并到主分支去,README 文件被删除$ git branch * master newtest Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ ls hello.php README test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ git merge newtest Updating 6b48939..41cf349 Fast-forward README | 1 - 1 file changed, 1 deletion(-) delete mode 100644 README Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ ls hello.php test.txt
合并冲突
- 合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改
- 首先创建一个名为“change_site” 的分支,切换过去,将test.txt文件的内容修改为“www.demo.com”
- 将修改的内容提交到 “change_site” 分支中。 然后切换回 “master” 分支我们可以看内容恢复到我们修改前的,我们再次修改test.txt文件
- 代码如下所示
现在我们开始合并分支Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ cat test.txt demo.com; Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ git checkout -b change_site Switched to a new branch 'change_site' Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site) $ vim test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site) $ head -1 test.txt www.demo.com; Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site) $ git commit -am 'change the site' [change_site 17dd99e] change the site 1 file changed, 1 insertion(+), 1 deletion(-) Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (change_site) $ git checkout master Switched to branch 'master' Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ head -1 test.txt demo.com; Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ vim test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ git diff diff --git a/test.txt b/test.txt index c31eb3f..60faec6 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ -demo.com; +runoob.com; +新增一行 Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ git commit -am '新增加一行' [master 6befd7e] 新增加一行 1 file changed, 2 insertions(+), 1 deletion(-)
发现合并的时候 test.txt 文件发生了冲突,接下来我们需要手动去修改它。Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master) $ git merge change_site Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ cat test.txt <<<<<<< HEAD runoob.com; 新增一行 ======= www.demo.com; >>>>>>> change_site
Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ vim test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ cat test.txt www.runoob.com; 新增一行 Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ git diff diff --cc test.txt index 60faec6,b1fa8ff..0000000 --- a/test.txt +++ b/test.txt @@@ -1,2 -1,1 +1,2 @@@ - runoob.com; -www.demo.com; ++www.runoob.com; +新增一行
- 在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决
现在我们成功解决了合并中的冲突,并提交了结果。Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ git status -s UU test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ git add test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ git status -s M test.txt Administrator@SKY-20180822OFR MINGW64 ~/demoBranch1 (master|MERGING) $ git commit -m '解决合并冲突' [master c17592e] 解决合并冲突