Py学习  »  Git

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

安东尼_Anthony • 6 年前 • 787 次点击  

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
 
787 次点击