git merge

合并

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就是安全删除,只有在被删除的分支没有需要提交的修改时才能删除成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值