新公司有些项目是用的 Git,以前公司都是 svn,为了练手 Git,我个人 APP 用到了,但是仅简单的 git pull/push 的使用,并未用到 Git 精髓,只有当项目中用到,才会紧迫去全面学习,所以说,在项目中进步是最快的。

开发场景:远程有主分支 master,提供用户使用的正式的稳定的版本;开发分支 dev,用于日常开发。dev 们可以在本地任意创建自己的 Local Branch,然后合并到本地 master 再提交到远程分支 dev。

命令行实践

高手都是直接用命令行,用命令行显得逼格更高。

创建项目

首先我创建 Android 项目 GitBranchSample, Share Project on GitHub。

查看分支

查看本地所有分支:

$ git branch
* master

master 分支前的 * 字符,它表示当前所在的分支。

查看远程所有分支:

$ git branch -r
origin/master

列出所有本地分支和远程分支:

$ git branch -a

创建本地 dev1 分支

$ git checkout -b dev1
Switched to a new branch 'dev1'

本地 master 分支默认就是远程 master 分支,上面命令在此基础上创建本地 dev1 分支,然后切换到 dev1 分支,相当于以下两条命令:

$ git branch dev1
$ git checkout dev1

想从远程分支 dev (远程有该分支)创建本地分支 dev1:

$ git checkout -b dev1 origin/dev
Switched to a new branch 'dev1'

开发提交

随便修改 README.md 文件,然后提交:

add 文件

$ git add README.md

commit 信息

$ git commit -m "branch test"
[dev1 8643ecb] branch dev1
2 files changed, 3 insertions(+)

合并到本地 master 分支

分支 dev1 开发工作完成,我们就可以切换回本地 master 分支:

$ git checkout master
Switched to branch 'master'

进行本地分支 dev1 合并:

$ git merge dev1
Updating 82951ea..444bb8e
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)

Fast-forward 信息,“快进模式”合并,这种模式下,删除分支后,会丢掉分支信息,可以用 --no-ff 方式进行 merge :

$ git merge --no-ff -m "merge with no-ff" dev1

如果分支很多,这个分支历史可能就会变得很复杂了,可以使用 rebase,提交的历史会保持线性:

$ git rebase dev1

也是进行本地分支 dev1 合并。

删除本地分支

$ git branch -d dev1

这是删除,如果没有完成合并会有提示,以下是强删:

$ git branch -D dev1
Deleted branch dev1 (was d39f6c3).

创建远程分支 dev

直接提交

$ git push origin master:dev

这里冒号可以提交到指定分支,上面命令,把提交本地 master 分支到远程的 dev 分支,远程没有dev这个分支,会创建。

git push origin master

这是本地 master 提交到远程主分支 master,相当于:

git push origin master:master

跟踪远程分支

从远程分支 checkout 出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入 git pull/push,Git 会自行推断应该向哪个服务器的哪个分支更新/推送数据。

手动建立追踪关系:

$ git branch -u origin/dev master
Branch master set up to track remote branch dev from origin.

或者:

$ git branch --set-upstream-to origin/dev master
Branch master set up to track remote branch dev from origin.

指定本地 master 分支追踪远程 dev 分支。

查看所有分支跟踪关系:

$ git branch -vv
* master 444bb8e [origin/dev] branch test

合并远程分支

我们把远程分支 dev 合并到 master,怎么做?

1、指定本地 master 分支追踪远程 dev 分支

$ git branch -u origin/dev master
Branch master set up to track remote branch dev from origin.

2、更新内容

$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/WuXiaolong/GitBranchSample
0138684..d0ca159 dev -> origin/dev
Updating 0138684..d0ca159
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

3、开发提交远程分支 dev

修改了 README.md 文件,然后提交:

add 文件

$ git add README.md

commit 信息

$ git commit -m "merge origin/dev"
[master 44150b4] merge origin/dev
1 file changed, 1 insertion(+), 1 deletion(-)

进行 push

$ git push origin master:dev
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 310 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/WuXiaolong/GitBranchSample.git
d0ca159..44150b4 master -> dev

4、指定本地 master 分支追踪远程 master 分支

$ git branch -u origin/master master
Branch master set up to track remote branch master from origin.

5、更新内容

$ git pull
Already up-to-date.

6、同样提交远程分支 master

不用 commit ,上面已经 commit 了,也提交给 origin/master,这样远程分支 dev 和 master 就是一样的。

$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/WuXiaolong/GitBranchSample.git
0138684..44150b4 master -> master

PS:以上远程分支合并,我不知道是不是正确的方式,望指导。

删除远程分支

$ git push origin --delete dev

或者

$ git push origin :dev

远程分支 dev 将被删除。

Android Studio 实践

毕竟我们开发工具是 Android Studio,知道 Android Studio 进行分支开发是必要的。

查看当前分支

这个分支指的当然是本地的,默认 master。

创建本地 dev1 分支

以 origin/master 为基础 checkout 本地分支 dev1。

合并到本地 master 分支

同样修改 README.md 文件,add,commit,然后切换到 master 分支:

然后合并本地分支 dev1:

再 push 就 OK 了。

删除本地分支

如上图,有个 Delete 按钮,点击直接干掉。

创建远程分支 dev

直接提交,我们会发现是提交到远程 master 上,这里我们可以修改:



改成 dev,点击 Enter,然后 Push,这样远程就有了分支 dev。

查看跟踪远程分支

如上图可以查看跟踪关系,也可以手动修改。

合并远程分支

修改 README.md 文件,add,commit,分别提交到远程 dev 和 master 即可,是不是比命令行简单多了啊。

删除远程分支

点击 origin/dev,直接删除就好了。

拓展

git fetch

$ git fetch origin master

下载远程 master 的所有变动到当前分支,与 git pull 区别,没有与本地合并。

查看当前的远程库

显示对应的克隆地址:

$ git remote -v

-v 为 --verbose 的简写,取首字母

修改远程仓库地址

服务器要换地址了,本地有 clone 出来的 git 厍,则需要修改一下 origin 的地址,以便能继续 push 和 pull,项目所在目录下执行命令行:

git remote set-url origin 新地址

切换分支

我们新建一个分支(Branch1)后,这时如果我们要切换到master分支,我们点击Local Branches下面的按钮,然后在其左边会弹出一个对话框,我们点击Checkout就可以将其切换到master分支下了。要明白的是Local是存在本地Repo的,你可以直接进行切换。Remote是远程仓库的,远程仓库的你只能checkout到本地,而不能切换过去。 切换分支,addcommit下,防止代码丢失。

git push origin dev:master

提交本地 dev 分支推送到远程master分支

git push origin dev:dev

提交本地 dev 分支作为远程的dev 分支

git push origin :dev

刚提交到远程的 dev 将被删除,本地还是会保存的

参考

常用 Git 命令清单

Git分支管理策略

Android Studio Git 分支实践的更多相关文章

  1. Android Studio Git 分支使用实践

    新公司有些项目是用的 Git,以前公司都是 svn,为了练手 Git,我个人 APP 用到了,但是仅简单的 git pull/push 的使用,并未用到 Git 精髓,只有当项目中用到,才会紧迫去全面 ...

  2. android studio git 将项目分享到github,推送到其他平台 码云 等。

    android studio git 将项目分享到github,推送到其他平台 码云 等. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E- ...

  3. android 入门-android Studio git 克隆

    最后是完成 以上是如何从android studio Git 克隆Github的项目

  4. Android studio 克隆分支

    1.当远程仓库有两个分支时,像这样的 获得分支的远程仓库地址 注意:这个地址默认就是克隆master 分支 2.如何克隆 v1.2 分支 ? 用android studio 把项目打开,可以看到 此时 ...

  5. Android Studio 合并分支代码到主干的操作总结

    一.背景 使用SVN进行版本管理时,一般的,我们的所有的开发都是基于trunk进行开发,当一个版本开发告一段落,经验证测试发布上线后,代码处于冻结状态,基于当前冻结的代码库,打一个tag进行管理,与发 ...

  6. Android Studio git ignore

    # Built application files *.apk *.ap_ # Files for the Dalvik VM *.dex # Java class files *.class # G ...

  7. Android Studio Git .gitignore文件配置忽略不需要的文件

    转载请标明出处: http://www.cnblogs.com/why168888/p/6440805.html 本文出自:[Edwin博客园] # Built application files * ...

  8. Android Studio +git+jenkins+gitHub

    之前做的jenkins+gitlab的jmeter,,,其实已经记不太清楚了. 最近又在搞Android学习,就试一下AndroidStudio+jenkins自动打包apk看看. step1: An ...

  9. Android studio git 本地仓库和远程仓库节点对比

    1.初始状态 2.本地修改文件,然后commit 3.本地再次修改文件,然后commit 4.本地push 从上图可以看出,push完成后,本地仓库的节点和远程仓库的节点是一样的.

随机推荐

  1. CF796C Bank Hacking 思维

    Although Inzane successfully found his beloved bone, Zane, his owner, has yet to return. To search f ...

  2. [USACO5.4]奶牛的电信Telecowmunication 最小割

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

  3. 模拟使用zookeeper实现master选举

    1.模拟选举机器类 package com.karat.cn.zookeeperAchieveLock.zkclient; import java.io.Serializable; /** * 选举的 ...

  4. 分页插件PageHelper

    一.PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,Po ...

  5. Django工程创建

    方法一: 1.win+r进入cmd命令窗口: 2.找到Django的安装地址: 3.cmd窗口中利用cd 进入相应的文件夹,再输入命令如下: django-admin.exe startproject ...

  6. c#生产/消费RabbitMQ

    public sealed class JsonSerializer { public static byte[] Serialize(object message) { return Encodin ...

  7. tomcat 虚拟目录配置appBase和docBase的区别

    先看server.xml文件host配置   <Host name="localhost" appBase="webapps"      可以修改成自己想 ...

  8. linux及hadoop基本操作

    cd 命令:切换目录 () 切换到目录“/usr/local” ) 切换到当前目录的上一级目录   ) 切换到当前登录 Linux 系统的用户的自己的主文件夹    ls 命令:查看文件与目录   ...

  9. 自定义element-ui主题

    自定义element主题颜色:主要参考这个文章https://blog.csdn.net/wangcuiling_123/article/details/78513245,再自己做了一遍成功.感谢. ...

  10. Spring集成Quartz的3种方式

    1.使用xml配置方式 Maven依赖 <properties> <!-- spring版本号 --> <spring.version>4.2.2.RELEASE& ...