HbUsageGithubBranch - 101camp/playground GitHub Wiki

Git 入怼之独立分支

概述

<- How2jumpInDU · DebugUself/du4proto Wiki <自怼圈跳入> 中提到 开独立分支.

  • 此分支非彼分支, 即不是一个项目中为了完善项目, 从而早晚要合并到主分支的其他分支. 而是永远不会合并到主项目, 仅为方便怼友互看的独立分支. 每个独立分支是一个独立的项目.
  • 此分支特征
    • 新建时基本空白, 不包含主分支的内容
      • git 会自动把之前版本的内容复制到你的新版本, 我们要对抗之.
      • 需要包含: git.ignore 和 README.md, 自己新建.
    • 难以 merge 到其他分支
      • git 会自动 merge 或关联到其他分支, 我们要对抗之.

AKA

这就是自怼圈的气质设计之一:

<~ https://github.com/DebugUself/du4proto/issues/746#issuecomment-520459746

  • AKA
    • All Know All
  • 因为 fork 后, 大家分散在各自分支中
    • 但是, 几乎没有机会合并回主线
    • 因为, 没有项目是必须合并回的
    • 从而,所有人的努力, 很难集中体验到
  • 而, 使用 orphen 分支:
    • 每个人都有独立不相关的空间
    • 但是, 所有人的所有行为, 都在同一仓库中
    • 从而触发 github 提醒服务,将之通过 列表 广播给全体知道
  • 这样就用 git 仓库自然形式, 完成:
    • 独立
    • 协同
    • 自动提醒
    • ...
    • 各种依赖氛围完成融合
  • 而且, 每个人涉及的 git 操作也减少到最小
    • 如果都是 fork 仓库
    • 那么无论同步上游变化
    • 还是合并回主仓库
    • 都涉及复杂的 git 操作, 以及评审工作

操作

  • 注释: 以下某些 git 命令是大妈设置的缩写命令,如未设置可用原命令取代
    • git br = git branch
    • git co = git checkout
    • git pl = git pull

在怼圈新建孤子分支

  • 克隆 du4proto,此时只拉取 master 分支
  • 本地新建孤子分支
  • 将新建的分支推送至 du4proto
$ cd <file folder>
$ git clone https://github.com/DebugUself/du4proto.git
$ cd du4proto
$ git checkout --orphan orphan_name
$ git rm -rf .
$ rm '.gitignore'
$ echo "#Title of Readme" > README.md
$ git add README.md
$ git commit -a -m "Initial Commit"
$ git push --set-upstream origin orphan_name

如何验证孤子分支

打开insights查看network,检查新建的分支和其他分支有无关联,如果完全独立,即可确认为孤子分支。

举个例子,如下图,cc1,cc2和cc3之间存在关联,属于普通分支,cc4完全独立于其他分支,是孤子分支。

纯净本地复本

当前分支

༄  git br -a
* master
  zoejane
  remotes/origin/134_career
  remotes/origin/134_spider
  remotes/origin/DM_tools
  remotes/origin/DUW
  remotes/origin/DU_tools
  remotes/origin/HEAD -> origin/master
  remotes/origin/LearnWebScraping
  remotes/origin/ZQ4mDjango
  remotes/origin/ZQclj
  remotes/origin/ZQgo
  remotes/origin/ZQipynb
  remotes/origin/ZQmma
  remotes/origin/bamboo
  remotes/origin/csapp
  remotes/origin/deepNLP
  remotes/origin/hstaoqian
  remotes/origin/leiyunhe
  remotes/origin/master
  remotes/origin/mxclover
  remotes/origin/spider
  remotes/origin/tl2wc
  remotes/origin/zoejane

本地复本:

༄  du -hs *
3.0M    CSAPP
 17M    DUW
3.7M    TL2wc
 14M    ZQ4mDjango
 14M    ZQclj
 14M    ZQgo
1.2M    ZQipynb
2.0M    ZQmma
 14M    bamboo
 15M    deepNLP
2.4M    dm_tools
 20M    tools4DU
 18M    zoejane

真正孤儿分支复本:

༄  du -hs *
 32M    2013.programming-clojure
296K    DUWeekly
180K    clj_ZQ
812K    dj_ZQ
140K    go_ZQ
424K    ipynb_ZQ
148K    mma_ZQ
4.0K    requirements.txt
400K    srv4DU.leo
776K    st_heroku
740K    tools4DU

本地如何预防孤子分支合并(将仓库中已有的分支拉到你本地电脑里)

  • 本地新建一个文件夹
  • 拉取怼圈某个孤子分支
$ cd(注意, 这很重要, 不要在du4proto 里面建这个文件夹)
$ mkdir branch_name
༄  cd branch_name
༄  git init
...
༄  git remote add -t branch_name -f origin [email protected]:DebugUself/du4proto.git
༄  git co branch_name
༄  git br -a
* branch_name
  remotes/origin/branch_name
༄  git pl
Already up-to-date.

  • -t:branch to track
  • -f:fetch the remote branch
  • git remote add -t ZQgo -f origin [email protected]:DebugUself/du4proto.git:在添加 ZQgo 分支的同时,追踪、拉取此分支的内容,并将此分支设为 origin。完成这步后,文件夹内是没有任何文件的。
  • git co = git checkout,完成这步后才看得见文件。
  • git pl = git pull

万一本地副本被污染的解决方案

意外将其他分支 merge 到孤子分支, 会导致远程仓库的文件过大, 浪费每位成员的网络资源, 因此要语义杜绝. 但意外发生, 解决方案如下:

  • 检查本地分支的工作复本是否被污染
$ git ll 

ll = log (~/.gitconfig 中定义)

命令查看仓库分支的版本变化,对比污染和孤子分支的版本历史关系图

  • 如果被污染, 重新clone新复本

    • 删除原来的文件夹
    • 新建文件夹, 重复上面'本地如何预防孤子分支合并'中的命令
  • 如果已被污染且push到远程仓库,造成远程仓库也被污染了

    • 手动备份需要的文档及代码
    • 然后强行回滚至未被污染的状态
    • 最后正常的push

关联

总结

  • 迁入分支, 开始玻璃花园

( ̄▽ ̄)

  • 180807 NBR-hugh add git abbreviation explain
  • 17.11.16 caijun add.
  • 17.9.16 lgh add.
  • 17.7.14 ZQ init.
⚠️ **GitHub.com Fallback** ⚠️