git的分支操作
可以通过https://github.com/CameloeAnthony/GitTest 进行操作练习
1 查看远程分支(git branch -a)
这里可以看到我本地和远程分支如下:(前面带*号的代表你当前工作目录所处的分支)
$ git branch -a
dev-activity
dev-app
develop
* master
test
remotes/origin/HEAD -> origin/master
remotes/origin/dev-activity
remotes/origin/dev-app
remotes/origin/develop
remotes/origin/master
remotes/origin/test
remotes/origin/mydev
2 查看本地分支(git branch)
这是目前在我本地的分支, 工作目录分支在master分支:
$ git branch
dev-activity
dev-app
develop
* master
test
3 获取远程的分支(git checkout 分支名)
比如这里获取并切换mydev分支
$ git checkout mydev
Switched to branch 'mydev'
Your branch is up-to-date with 'origin/mydev'.
再次查看分支,已经切换到mydev了
$ git branch
dev-activity
dev-app
develop
master
test
* mydev
可以在github上看到分支情况
4 在本地创建分支(git branch 分支名)
$ git branch test01
当然我们也可以加上-b,创建并切换分支
$ git checkout -b test01
Switched to a new branch 'test01'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch test01
$ git checkout test01
Switched to branch 'test01'
5 把本地的分支推到远程仓库( git push origin 分支名)
$ git push origin test01
6 删除本地分支( git branch -d 分支名)
这里就把本地的test01分支删除了
$ git branch -d test01
Deleted branch test01 (was 641b395b).
如果你在test01上,就不能准确删除,需要先切换到其他分支,才能删除test01分支哦。
7 删除远程分支( git branch -r -d 分支名)
操作6中我们把本地的test01 分支删了,这里使用下面两种方法删除远程的test01
#第一种方法
$ git branch -r -d origin/test01
Deleted remote-tracking branch origin/test01 (was d8e6798).
#第二种方法
$ git push origin :branch-name
8 修改并提交( git add 文件名, git commit -m "提交说明)
首先我们切换到develop分支进行开发,这里模拟更改,增加一行文字。
这个时候没有提交更新,是不能切换分支的
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
README.md
Please commit your changes or stash them before you switch branches.
Aborting
这里提交develop
$ git add README.md
$ git commit -m "branch test on develop branch"
[develop fd94b13] branch test on develop branch
1 file changed, 1 insertion(+)
这里再次尝试切换到master分支,提示我们当前分支超出master分支1次提交, 成功切换。
git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
这里我们直接对master 分支进行更改:
$ git add README.md
git commit -m "branch test on master branch"
[master 27f26f4] branch test on master branch
1 file changed, 2 insertions(+), 1 deletion(-)
这里我们切换回develop分支还是master分支,我们发现我们的修改都在。这里就完成了吗?当然不是 。
我在我们的远程仓库(github)上可以看到develop和master的内容并没有提交上去。(哈哈,这是我以前刚学git的一个错误,总是忘记push)
9 合并(git merge)并解决冲突
针对上面,我们对master和develop分支分别做了一次更改。但是都还没有push到远程仓库,但是这不会影响本地的合并。
现在,我们把develop分支的工作成果合并到master分支上(合并(git merge)命令用于合并指定分支到当前分支。):
$ git merge develop
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
这里报错了,我们打开文件,可以清晰的看到我们master上和develop上的两个修改。
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,这里合并,解决冲突。
10 push到远程仓库(github)
我们在9中完成了冲突的修改,这里我们提交master分支。
$ git add README.md
$ git commit -m "merge and fix conflicts in develop and master"
$ git push origin master
Counting objects: 12, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (12/12), 1.03 KiB | 526.00 KiB/s, done.
Total 12 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/CameloeAnthony/GitTest.git
d8e6798..687157a master -> master
可以看到这里Github已经收到了更新
develop分支同样没有提交到github,这里也进行同样的提交(因为我们在8中已经commit了,所以这里不需要commit操作)。
$ git push origin develop
成功提交。
11 查看分支合并图(用git log --graph命令可以看到分支合并图)
在8中,我们看到我们在master(蓝色)和develop(红色)上分别做了修改,如下图
然后我们在9,10中merge develop到了master,如下图
所以我们通过git log --graph命令可以看到分支合并图(下图) 可以和上图对应理解。
参考文档
http://blog.csdn.net/arkblue/article/details/9568249
廖雪峰的Git教程