Python中国社区  »  Git

Git 中的分支创建和冲突解决

安东尼_Anthony • 4 天前 • 8 次点击  

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教程


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/r6a3X56njw
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/5279
 
8 次点击  
分享到微博
分享
社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
WEB开发
linux   NoSql   DATABASE   Jquery   Bootstrap   NGINX   js   其他Web框架   Git   peewee   web工具   bottle   zookeeper   IE   MongoDB   MQ   tornado   Redis  
机器学习
机器学习算法  
Python88.com
公告   社区推广   反馈