分支的操作
啥是分支,比如老师留了作业让做一个系统,我懒的自己做,就和别人要了一份,但还不能完全用别人的,需要自己改改,但又怕自己没改成功,把给的那份也弄坏了。为了防止自己改错了还不能反悔。可以要过来别人的程序之后,先复制一份,在复制的这份中做改动,改坏了,大不了再复制一份。复制的这个就可以叫做分支,比喻可能不太恰当,git中的分支要比这强大,但大概就是这么个意思。
现在我把gitTest中的东西全删了包括那个.git文件。
初始化仓库git init,新建一个a.txt,在里边写个a,执行git add a.txt,然后执行git commit -m ‘add a.txt’
现在创建分支dev然后切换到dev分支
YZ@YZ MINGW64 /d/gitTest (master)
$ git branch dev
YZ@YZ MINGW64 /d/gitTest (master)
$ git checkout dev
Switched to branch 'dev'
上面两条命令可以用一条命令代替,git checkout -b dev
。git checkout命令加上-b参数表示创建并切换。
使用git branch查看当前分支
$ git branch
* dev
master
git branch命令会列出所有分支,当前分支前面会标记一个*号。
然后我们就可以在dev分支上正常提交,我在a.txt中另起一行写个b,然后执行git add a.txt,然后执行 git commit -m ‘branch test’。现在dev分支的工作完成,切换到master分支。
$ git checkout master
Switched to branch 'master'
会发现我在a.txt中添加的b没有了。a.txt文件仍然保持原先的状态,并没有添加b。dev分支的更改不会影响到master分支,这正是在开发中创建分支的优点。只要创建分支,就可以在不互相影响的情况下同时进行多个功能的开发。
现在,我们切换到dev分支
$ git checkout -
Switched to branch 'dev'
上面用“-”代替分支名,就可以切换至上一个分支。当然,将“-”替换成dev同样可以切换成dev分支。切换到dev分支后就会看到里边有b了。
我们假设dev分支已经是实现完毕,想要将它合并到主干分支master。首先切换到master分支
$ git checkout master
Switched to branch 'master'
然后把dev分支的工作成果合并到master上,为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。因此,在合并时加上–no-ff参数。如果啥参数都不加的话为Fast forward模式,这个模式下不会把这次操作记录下来,也就不用写备注了,但不推荐这样做。–no-ff的意思就是禁用Fast forward模式。
$ git merge --no-ff dev
随后编辑器会启动,用于录入合并提交的信息。刚进去的时候不能编辑,因为此时是命令模式,输入i就会进入到编辑模式,就可以编辑内容了。编辑完成后,按下Esc,退回命令模式。然后输入冒号:进入底行模式,在底行模式下输入wq代表写入内容并退出,即保存。输入q!代表强制退出不保存。
因为默认信息中已经包含了Merge branch ‘dev’这样的相关信息,可不必做任何更改。将编辑器中显示的内容保存,关闭编辑器。然后就会看到。
如果就想写一句话的可以加一个参数-m,git merge –no-ff -m “Merge branch dev” dev
Merge made by the 'recursive' strategy.
a.txt | 1 +
1 file changed, 1 insertion(+)
这样一来,dev分支的内容就合并到master分支中了。
git log –graph,这条命令可以以图形的方式来查看日志,非常直观。
$ git log --graph
* commit 2eb7668305c3cda852d49ec7636346992990e51c (HEAD -> master)
|\ Merge: c939f6d 952616a
| | Author: eaglezsx <[email protected]>
| | Date: Sun Aug 27 19:35:54 2017 +0800
| |
| | Merge branch 'dev'
| |
| * commit 952616a9e5091441c13218d8fc0fe69caac3f840 (dev)
|/ Author: eaglezsx <[email protected]>
| Date: Sun Aug 27 19:35:14 2017 +0800
|
| branch test
|
* commit c939f6d9ae81cd758725289e9fd9bd8c190e7d30
Author: eaglezsx <15732621728@163.com>
Date: Sun Aug 27 19:34:04 2017 +0800
add a.txt
可以清楚的看到dev提交的东西已被合并。除此以外,分支的创建以及合并也都清楚明了。
合并完后,就可以放心的删除dev分支了
$ git branch -d dev
Deleted branch dev (was 952616a).
删除后查看branch,就只剩下master分支了
$ git branch
* master