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:
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'
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'
$ 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:
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.
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)
新功能完成后,提交到版本库。
冲突解决
现在我们新的功能完成了,那么就可以把它合并到master分支上了。现在我们来演示合并时遇到冲突时,如何去解决。
$ git checkout master Switched to branch 'master' $ 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 'hello world'; ======= echo 'version 1.1 finished'; >>>>>>> dev
<br/>
$ cat index.php <?php echo 'version 1.1 finished';
然后再add并提交,最后在提交
$ git commit -m 'merge dev'
这个时候就合并成功了,现在就去删除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!