zoukankan      html  css  js  c++  java
  • Android Studio Git 分支实践

    新公司有些项目是用的 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分支管理策略

  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/WuXiaolong/p/8481305.html
Copyright © 2011-2022 走看看