• Git branch (分支学习)


    以前总结的一些git操作,分享在这里.

    Git 保存的不是文件差异或者变化量,而只是一系列文件快照。

     
    - 列出当前所有分支
    git branch <--merge> | <--no-merged>
    - 创建分支
    git branch <branch_name> {[SHA-1]/Tag}
    - 切换分支
    git checkout <branch_name>
    - 新建并切换到该分支
    git checkout -b <new branch-name>
    -删除分支
    git checkout -d <branch-name>
    -合并分支
    git merge <branch-name>
    -分享分支
    git push <远程仓库名> <分支名>
    -Git中从远程的分支获取最新的版本到本地有这样2个命令:
    git fetch:相当于是从远程获取最新版本到本地,不会自动merge
              git fetch origin master:tmp
    git diff tmp 
    git merge tmp
    git pull:相当于是从远程获取最新版本并merge到本地
    上述命令其实相当于git fetch 和 git merge
    在实际使用中,git fetch更安全一些
    因为在merge前,我们可以查看更新情况,然后再决定是否合并
     
    分支进行开发的工作流程
        当进行分支管理的时候,这些分支全部都是本地分支,这一点很重要。当你在使用分支及合并的时候,一切都是在你自己的 Git 仓库中进行的 — 完全不涉及与服务器的交互。
     
    远程分支
    如果你有个叫 serverfix 的分支需要和他人一起开发,可以运行 git push (远程仓库名) (分支名)
        git push origin serverfix
    Git 自动把 serverfix 分支名扩展为refs/heads/serverfix:refs/heads/serverfix,意为“取出我在本地的 serverfix 分支,推送到远程仓库的 serverfix 分支中去”。
    可以修改远程分支名
    git push origin serverfix:awesomebranch
                    本地分支名:远程分支名
     
    git branch -a : -a参数可以查看远程分支,远程分支会用红色表示出来
        git push origin --delete <branchName>
        git push origin :<branchName>
        git push origin --delete tag <tagname>
        git tag -d <tagname>     git push origin :refs/tags/<tagname>
        git push --tags
    
    
    更简单的方法是使用这个命令,它在fetch之后删除掉没有与远程分支对应的本地分支:
        git fetch -p
     
    从远程分支 checkout 出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
    git checkout --track origin/serverfix
     
    git cherry-pick简介
    git cherry-pick用于把另一个本地分支的commit修改应用到当前分支。
    简单用法
    git cherry-pick <commit id>
    如果在cherry-pick 的过程中出现了冲突,就跟普通的冲突一样,手工解决。执行git status 看哪些文件出现冲突,接着手动解决冲突的文件,然后通过git add把改到添加到索引,最后执行git commit提交修改。
    -e::
    --edit::
    With this option, 'git cherry-pick' will let you edit the commit
    message prior to committing.
     
    -x::
    When recording the commit, append to the original commit
    message a note that indicates which commit this change
    was cherry-picked from.  Append the note only for cherry
    picks without conflicts.  Do not use this option if
    you are cherry-picking from your private branch because
    the information is useless to the recipient.  If on the
    other hand you are cherry-picking between two publicly
    visible branches (e.g. backporting a fix to a
    maintenance branch for an older release from a
    development branch), adding this information can be
    useful.
     
    git format-patch
    用git format-patch生成一个patch
    git format-patch -M master
    git format-patch [commit ID]
    看,这次多了好多东西,不仅有diff的信息,还有提交者,时间等等,仔细一看你会发现,这是个E-mail的文件,你可以直接发送它!
     
    这种patch要用git am来应用。
    git am 
    git am *.patch; 如果merge失败,需要处理冲突
    在使用git-am之前, 你要首先git am –abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。不然会遇到这样的错误。
    如果
     
    - 用git diff制作一个patch
    git diff | tee patch.patch
     

    master分支是整个项目的主分支。

    所有其他分支都直接或间接源自master。master分支是可直接用于产品发布的代码。

    develop分支反映最新的开发进程。

    develop中的代码总是可以完整build的。当develop中的代码进入稳定状态(修复了绝大多数bug)准备release时,所有develop中的更改将通过release branch最终merge到master。

    除master和develop以外的分支都是临时分支。当这些临时分支完成其使命,就可以删除它们。我们先看feather分支。

    feather分支用于某个新feather的开发,源自develop,并最终merge到develop。

    feather分支最终的结局要么合并到develop branch,要么被抛弃。feather分支用如下命令创建:

    # git checkout –b my feather develop

    完成后将这个feather合并到develop:

    # git checkout develop

    # git merge --no-ff myfeather

    # git branch –d myfeather

    # git push origin develop

    合并时--no-ff选项避免fast forward。使用该选项和不使用该选项得到的分支路线图分别如下:

    image

    release分支用于准备新版本的发布。源自develop,merge到develop和master。

    release分支仅修复小的bug,完成准备版本号,build date等工作。而develop分支可以同时开始新feather的开发。该分支上修复的bug需要merge到develop,并在该分支完成时merge到master。此时需要给master打上tag,标记这个新的release。

    Hotfix分支用于紧急bug修复,源自master,merge到develop和master。

    对于已发布的产品,可能有意外的紧急bug需要修复。hotfix branch可以避免修复bug的工作影响develop branch。

    创建hotfix branch:

    # git checkout -b hotfix-x.y master

    完成hotfix branch:

    # git checkout master

    # git merge --no-ff hotfix-x.y

    # git tag –a x.y.z

    # git checkout develop

    # git merge --no-ff hotfix-x.y

    # git branch –d hotfix-x.y

    这里有个例外就是,如果hotfix发生时有正在进行的release branch,那么将hotfix merge到release,而release最终会merge到develop和master。

  • 相关阅读:
    apache一个IP多个站点的配置方法
    论文笔记之:Deep Reinforcement Learning with Double Q-learning
    论文笔记之:Playing Atari with Deep Reinforcement Learning
    论文笔记之:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking
    论文笔记之:Learning to Track: Online Multi-Object Tracking by Decision Making
    论文笔记之:Human-level control through deep reinforcement learning
    (译) 强化学习 第一部分:Q-Learning 以及相关探索
    论文笔记之:Multiple Object Recognition With Visual Attention
    论文笔记之:Attention For Fine-Grained Categorization
    新手教程之:循环网络和LSTM指南 (A Beginner’s Guide to Recurrent Networks and LSTMs)
  • 原文地址:https://www.cnblogs.com/nokia/p/git.html
Copyright © 2020-2023  润新知