Home  >  Article  >  Development Tools  >  Version control tool Git - branch management

Version control tool Git - branch management

齐天大圣
齐天大圣Original
2020-06-22 09:56:592924browse

Branch is a killer application of Git. Unlike other version control tools, git is extremely efficient in creating and switching branches.

Introduction to branches

What is a branch? Let’s start with a scenario that we are very familiar with. A product that has been launched now needs to add a new function. At this time, if we continue to develop on the original branch, it will be very inconvenient, because it is an application that has already been launched, and it must be tested before it can be launched. Generally, our approach is to create a new branch, develop new functions on this new branch, and then merge them into the main branch after testing.

Creation and switching of branches

The current situation of my repository branches is as follows:

Version control tool Git - branch management

Create a branch

Now we create a new branch, dev. The commands to create a branch and view the branch are as follows:

git branch 分支名
git branch

# git branch dev
# git branch
  dev
* master

Switch branch

The branch has been established successfully. Now let's switch to a new branch. The command to switch branches is as follows git checkout branch name

# git checkout dev
Switched to branch 'dev'

Version control tool Git - branch management

Now, we make some modifications in the new branch, then commit, and then switch Go to the master branch, make some changes and submit. Then, we look at the status of the branch.

git vim config.php # 修改config.php文件
git add . && git commit -m 'add config.php'

git checkout master # 切换到主分支
git vim config.php
git add . && git commit -m 'change config.php'

Version control tool Git - branch management

$ git log --oneline --decorate --graph --all
* ca4589c (HEAD -> master) add config file
| * 43a5a8f (dev) add config.php
|/
* 19e3186 add index.php
* 9cc82f9 first commit

One command to create and switch branches

git checkout -b 新分支名

Branch merging

First introduce a scenario, which is very common:

  • A system has been online

  • The system needs to be updated with a new feature, so you create a new branch (dev) and work on this branch.

  • At this time, a problem suddenly occurred in the system and required urgent investigation and processing.

  • Then, at this time you need to switch to the online version (master) first, then create a new branch (fixbug) and correct the errors on the new branch

  • After completing the test, switch to the online branch, then merge the fixbug branch, and then push the changes to the online branch.

  • Finally, we can switch to the dev branch to continue working.

Currently, the status of our repository is as follows:

Version control tool Git - branch management

Now, we need to create a new branch and add new ones on the new branch Function.

git checkout -b dev

Then make some modifications on the new branch.

Version control tool Git - branch management

At this time, it was discovered that a serious bug appeared online and needed to be dealt with urgently. Well, first I need to switch to the master branch. But an error occurred during the switch

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        login.php
Please commit your changes or stash them before you switch branches.
Aborting

We often encounter the above error, this is becauseWhen merging branches, the workspace and staging area must be "clean". There are two ways to achieve the above requirements

  • Submit changes

  • Temporary storage

We are here Use staging method to demonstrate

$ git stash
$ git checkout master
Switched to branch 'master'

当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。

现在,我们新建fixbug分支,在这个分支上修复bug。

$ git checkout -b fixbug

合并分支

修复完成且测试通过时,就可以把它合并到master上了。合并使用git  merge 分支名

$ git checkout master Switched to branch 'master' 
$ git merge fixbug

删除分支

这个时候,fixbug功能已经完成了,可以将它给删除掉了。

$ git branch -d fixbug 
Deleted branch fixbug (was cca73bb).

现在,我们可以继续在dev分支上工作了。我们需要把之前暂存的内容取出来。

$ git checkout dev

$ git stash pop
On branch dev
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   login.php

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (2f8476defbaa813e31f3e1b081f5b88416b2ff50)

新功能完成后,提交到版本库。

Version control tool Git - branch management

冲突解决

现在我们新的功能完成了,那么就可以把它合并到master分支上了。现在我们来演示合并时遇到冲突时,如何去解决。

$ git checkout master
Switched to branch &#39;master&#39;

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

提示我index.php合并的时候有冲突,我们来看看该文件

$ cat index.php
<?php

<<<<<<< HEAD
echo &#39;hello world&#39;;
=======
echo &#39;version 1.1 finished&#39;;
>>>>>>> dev
<br/>
$ cat index.php 
<?php 
echo &#39;version 1.1 finished&#39;;

然后再add并提交,最后在提交

$ git commit -m &#39;merge dev&#39;

这个时候就合并成功了,现在就去删除dev分支吧。

$ git branch -d dev

The above is the detailed content of Version control tool Git - branch management. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn