合并
git 推荐我们在开发过程中要使用分支的技术来进行开发,比如我们从远端clone一个仓库,其实是一个origin/master分支,然后自动在本地创建了一个master分支,然后默认会进行merge操作,将origin/master分支合并到本地分支中,这一系列的流程都是git clone一个命令完成了。那么我们在开发中如何显式的进行分支的管理呢?
查看分支
git branch命令可以列举所有分支,星号*标识的代表当前所处分支
$ git branch
* master
创建分支
有2种方式:git branch 分支名和git checkout -b 分支名
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch
* master
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch dev
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch
dev
* master
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git checkout -b dev1
Switched to a new branch 'dev1'
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (dev1)
$ git branch
dev
* dev1
master
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (dev1)
$
从上面的结果可以看到,git branch <分支名>创建后,分支不会切换到新的分支,还保持在当前分支。而git checkout -b <分支名>的方式会在创建完成后自动切换到新创建的分支。
切换分支
在各个分支之间来回切换,需要使用git checkout <分支名>,注意这里不带参数-b
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git checkout dev
Switched to branch 'dev'
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (dev)
$ git checkout dev1
Switched to branch 'dev1'
合并分支
讲到现在才讲到git merge的内容,因为讲合并必须有分支的概念,不然就无从谈起merge了。我们刚才已经创建了2个新分支,为dev和dev1,git官方是提倡将master作为一个已经成熟的分支,或者即将提交到origin仓库中的分支,我们开发的时候不要直接对master操作,而是要新建一个开发分支来进行提交,然后再合并到master中,具体如何操作,来看例子:
首先:我们将dev分支当成我们的开发分支。切换到该分支
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (dev1)
$ git checkout dev
Switched to branch 'dev'
然后我们修改一下该分支下面的一个文件,然后git add,git commit
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (
$ git add README.md
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (
$ git commit -m 'first commit'
[dev 65104ea] first commit
Committer: unknown <hui.qian@HuiQianPC.spreadtrum.co
Your name and email address were configured automatic
on your username and hostname. Please check that they
You can suppress this message by setting them explici
git config --global user.name "Your Name"
git config --global user.email you@example.com
After doing this, you may fix the identity used for t
git commit --amend --reset-author
1 file changed, 1 insertion(+)
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (
$ git log
commit 65104ea16ac90b8b06925e24901ff82025c5f443
Author: unknown <hui.qian@HuiQianPC.spreadtrum.com>
Date: Tue Mar 3 11:31:29 2015 +0800
first commit
commit eed415fb38da8dbceb921d49b91c1c74dba3be43
Author: Hui Qian <542113578@qq.com>
Date: Mon Mar 2 20:04:25 2015 +0800
Update README.md
commit 99bbcf63644e08d55b23a94be0e7fcfce084263e
Merge: 3af2416 40b6a49
Author: unknown <hui.qian@HuiQianPC.spreadtrum.com>
Date: Mon Mar 2 17:30:22 2015 +0800
merge from origin
commit 40b6a495ba3be5459331a05acf960d3049eb5d19
Author: Hui Qian <542113578@qq.com>
Date: Mon Mar 2 16:42:09 2015 +0800
Update README.md
:
ok,我们在dev分支上做了一次修改,提交log显示我们目录的历史记录多了一条first commit的记录。ok,这个时候我们如果想要将这个修改同步到远程仓库中,我们不能直接在该分支上进行git push,因为远程仓库并没有origin/dev这个仓库,所以要先合并到master分支上,然后再push到origin/master分支上。
最后,我们来合并:因为我们是要将dev的修改合并到master分支上,所以我们先切入master中
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git merge dev
Updating eed415f..65104ea
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
这个时候我们在master分支上运行git push会把dev的更新同步到远程仓库中。
删除分支
我们已经将dev分支的更新合并到master了,现在可以删除了
命令git branch -d/-D <分支名>
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch -d dev
Deleted branch dev (was 65104ea).
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch -D dev2
error: branch 'dev2' not found.
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch
dev1
* master
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch -D dev1
Deleted branch dev1 (was eed415f).
hui.qian@HUIQIANPC /e/testerhome/AndroidTestScrpits (master)
$ git branch
* master
参数-d和-D的区别在于-D是强制删除,不管被删除的认真有没有没提交的修改,但是-d就是安全删除,只有在被删除的分支没有需要提交的修改时才能删除成功。