Android技术研究gitAndroidDeveloper

Git+GitHub,构建自己的开源仓库之Git分支

2016-07-09  本文已影响1035人  星际之痕
封面--来源网络

简介

最近公司里还是没什么事做,虽然工资还是在正常发,但是还是要有忧患意识,毕竟,生于忧患,死于安乐。所以,最近一段时间都处于学习状态,越学习越发现要学的东西太多,越学习越发现自己懂得少。言归正传,今天记录一下Git分支的相关知识。


远离舒适区,常驻学习区

Git分支命令

命令 描述 示例
git branch <branch-name> 创建分支 git branch dev
git branch 查看本地分支 git branch
git branch -r 查看远程分支 git branch -r
git checkout <branch-name> 切换分支 git checkout develop
git checkout -b <branch-name> 创建并切换到分支 git checkout -b release
git branch -d <branch-name> 删除分支 git branch -d bug-fix-109
git branch -D <branch-name> 强制删除分支 git branch -D bug-fix-110
git merge <branch-name> 合并分支到当前分支 git merge develop
git log --graph --pretty=oneline --abbrev-commit 查看分支合并记录 git log --graph --pretty=oneline --abbrev-commit

上表中列出了git分支操作的基本命令,还有一些高级用法,以及一些配合使用的其他命令,如git log --graph --pretty=oneline --abbrev-commit,下面就逐条来解读这些命令。

我们在操作这些命令的时候,都要注意一些,要明白自己当前在哪个分支操作,要对哪个分支产生效果。我们在创建完一个本地仓库后,会自动创建一个主分支,即master分支,在未进行任何分支操作之前,我们都是在master主分支上操作的。

创建分支

创建一个develop分支:

git branch develop

查看本地分支

git branch

这条命令会列出本地已创建的分支,并且会在分支名字前面用星号*标记当前所在的分支:

 chengshengyang@csy-pc MINGW64 ~/test (master)
$ git branch
  develop
* master

查看远程分支

git branch -r

列举远程仓库的分支

$ git branch -r
  origin/HEAD -> origin/master
  origin/master

可以看到远程仓库只有一个分支,本地的develop还没有push到远程仓库,指针HEAD指向的是master分支。

切换分支

git checkout develop

切换到develop分支

$ git checkout develop
Switched to branch 'develop'

切换分支其实是Git将HEAD指针做了修改,指向了develop,所以这个过程很快。

创建并切换分支

其实就是创建切换二合一的命令,可以快速的切换到新的分支

 git checkout -b release

chengshengyang@csy-pc MINGW64 ~/test (develop)
$ git checkout -b release
Switched to a new branch 'release'
chengshengyang@csy-pc MINGW64 ~/test (release)

直接从develop分支切换到了新建的release分支了,一步到位。

合并分支

git merge develop

此时,我们在develop上的工作完成了,需要合并到master分支,准备发布用。先切换到master分支:

git checkout master

开始合并:

git merge develop

这之前,我们在develop分支对b.txt文件做了修改:

$ cat b.txt
00000000000000000000000000
111111111111111111111111111
2222222222222222323333333333
chengshengyang@csy-pc MINGW64 ~/test (develop)
$ vim b.txt

chengshengyang@csy-pc MINGW64 ~/test (develop)
$ cat b.txt
00000000000000000000000000
111111111111111111111111111
2222222222222222323333333333
git create branch is fast.

提交修改:

chengshengyang@csy-pc MINGW64 ~/test (develop)
$ git add b.txt

chengshengyang@csy-pc MINGW64 ~/test (develop)
$ git commit -m "modify b.txt"
[develop eb926ac] modify b.txt
1 file changed, 2 insertions(+), 1 deletion(-)

切换到master分支后,同样,也修改一下b.txt文件的最后一行:

chengshengyang@csy-pc MINGW64 ~/test (master)
$ cat b.txt
00000000000000000000000000
111111111111111111111111111
2222222222222222323333333333
chengshengyang@csy-pc MINGW64 ~/test (master)
$ vim b.txt

chengshengyang@csy-pc MINGW64 ~/test (master)
$ cat b.txt
00000000000000000000000000
111111111111111111111111111
2222222222222222323333333333
git merge branch is fast.

chengshengyang@csy-pc MINGW64 ~/test (master)
$ git add b.txt

chengshengyang@csy-pc MINGW64 ~/test (master)
$ git commit -m "modify b.txt master"
[master 9e2050b] modify b.txt master
1 file changed, 2 insertions(+), 1 deletion(-)

现在master分支和develop分支都修改了b.txt的同一个位置,现在合并develop分支到master分支肯定会冲突:

chengshengyang@csy-pc MINGW64 ~/test (master)
$ git merge develop
Auto-merging b.txt
CONFLICT (content): Merge conflict in b.txt
Automatic merge failed; fix conflicts and then commit the result.

现在看看b.txt被合并成什么样子了:

$ cat b.txt
00000000000000000000000000
111111111111111111111111111
2222222222222222323333333333
<<<<<<< HEAD
git merge branch is fast.
=======
git create branch is fast.
>>>>>>> develop

跟其他版本控制系统类似,会用<<<<<<<<、========、>>>>>>>>来划分冲突的内容。因为Git不知道master分支和develop分支哪个提交的内容是正确的,需要程序员手动修改后提交,注意我们此时所处的分支状态是这样的:

chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)

(master|MERGING)状态,说明在主分支master进行合并的状态,合并未完成。解决冲突后提交:

$ cat b.txt
00000000000000000000000000
111111111111111111111111111
2222222222222222323333333333D
git merge branch is fast.
git create branch is also fast.

chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)
$ git commit -m "merge develop"
U       b.txt
error: commit is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)
$ git add b.txt

chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

    modified:   b.txt


chengshengyang@csy-pc MINGW64 ~/test (master|MERGING)
$ git commit -m "merge develop-fix conflict"
[master abffc90] merge develop-fix conflict

这里我犯了个错,解决冲突后没有add就直接commit,于是有了上面的一个提交失败提示。
冲突解决后,文件需要执行add操作后才能commit,如果不清楚可以先用git status查看状态

查看分支合并记录

git log --graph --pretty=oneline --abbrev-commit

这条命令是说用线条的形式显示分支的合并记录:

chengshengyang@csy-pc MINGW64 ~/test (master)
$ git log --graph --pretty=oneline --abbrev-commit
*   abffc90 merge develop-fix conflict
|\
| * eb926ac modify b.txt
* | 9e2050b modify b.txt master
|/
* 7bbd5fc add 19.png for jianshu.io

这条命令比较长,不好记,可以给它设置一个简单的别名,但是这里暂时不说如何设置,还是多写写这些命令,等记住了,熟练了再设置个别名,提高效率顺便装装逼啥的。

上面的合并方式是普通模式,已经很快了,但是有种模式叫“快进模式”,即Fast Forward,更快。一般合并没有冲突的时候,Git都会使用Fast Forward模式快速合并,这种合并模式也是修改指针,所以快。但是,使用Fast Forward模式合并后,如果删除合并的分支,使用上面的命令git log --graph --pretty=oneline --abbrev-commit就看不到分支的信息了,如果要避免这种情况,要使用下面的命令来合并:

git merge --no-ff -m "commit description" fix-bg-001

参数"--no-ff"指定合并不使用快进模式,使用普通模式。

删除分支

如果你现在在一个bug分支上解决一个bug,然后去develop分支、master分支合并成功了,这个分支也就没什么用了,可以删掉了:

chengshengyang@csy-pc MINGW64 ~/test (master)
$ git branch -d fix-bug-001
Deleted branch fix-bug-001 (was 0309fed).

如果分支内容还没有合并就要删除,会提示错误信息:

$ git branch -d test
error: The branch 'test' is not fully merged.
If you are sure you want to delete it, run 'git branch -D test'.

而且提示了可以使用

git branch -D test

来强制删除:

$ git branch -D test
Deleted branch test (was 92b398f).

以上就是git分支的一些基本命令的解读了,学会了这些基本操作,才能更好的理解分支管理的策略。

分支管理策略

其实说到分支管理策略,我本人也没有什么值得借鉴的经验,所以,这里就做了点功课,看看别人是怎么做分支管理的。

一般企业中开发一个项目的分支策略:

以上是根据网上摘取的关于分支管理策略的一些内容,不一定适合每个人,仅供参考。

总结

对于分支的操作就写这么多,如果您还有什么想知道的,就自己去网上找找相关资料,留言给我也可。如果觉得我的文章对你有用,欢迎点赞。有不足之处欢迎留言指出,谢谢。
看完本文的你或许对前两篇内容也感兴趣
Git+GitHub,构建自己的开源仓库之Git命令
Git+GitHub,构建自己的开源仓库之初识Git

最后,分享一首歌曲:
Girl From Heavens

上一篇下一篇

猜你喜欢

热点阅读