Git 是版本管理,所以把一系列版本的文件(随时间变化,源代码文件夹里总是在变化的,每个 commit 叫做一个版本,意思是把当前的代码情况当成一个版本)做快照放仓库里。 Git 的仓库设计为分布式。好吓人的名词,对吗?其实说起来特别简单。所谓仓库,就是.git 文件夹。所谓分布式,就是在参与项目的每个人那里都有个一样的.git 文件夹。在一个源(也就是所谓“ git 服务器”)上,执行以下命令:
$ mkdir source
$ cd source
$ git init
运行完毕后,在 source 文件夹下就有了.git 文件夹( Git 仓库)。接着执行:
$ touch test.txt
$ git add test.txt
$ git commit test.txt
执行这些命令后,.git 文件夹里就存储了 source/test.txt 这个情况的一个快照,作为一个版本。如果此时我们在源这个服务器上建立了 web 服务,然后允许别人从这个仓库里下载代码去做开发,那么这个源就成了 GitHub 功能的服务器。假设这个服务器是我的,命名为 adrian , Git 库的网址是
https://adrian.com/source现在,你来了,要跟我一起开发,于是你执行了 git clone 。假设你用 mysource 作为存储代码的文件夹,那么现在你的机器上 mysource/.git 跟我机器上的 source/.git 完全一样。这就是分布式仓库。
好了,解释你的问题:
git checkout master
git branch -D future
git checkout -b future
hub merge
https://github.com/BVLC/caffe/pull/1976继续拿刚才那例子说明。你做了 git clone 以后, git 软件自动把你本地的.git 文件夹里当成初始分支(branch ) 命名为: master 。
git checkout master #就是切换到 master 分支
git checkout -b future #你想开发点功能,但是你改一点,别人改一点,会乱,怎么办?建立一个分支,等功能开发好了,合并到主代码去。这个命令就是新建一个分支 future 并将当前的工作切到这个分支里去,从此,你在 mysource/文件夹下做的更改通过 commit ,影响的都是 future 这个分支。假设你接着在 mysource 文件夹下增加了一个文件 test2.txt ,那么 git add, git commit 后, future 这个分支有了版本 2 。
git branch -D future #删除刚才建立的 future 分支。这样你便回到了 master 分支,此刻 mysource 文件夹里刚才建立的 test2.txt 已经不见了,这是因为 master 分支里只有最初始的版本,而没有版本 2.
hub merge
https://github.com/BVLC/caffe/pull/1976 #这句是干什么?是说 git merge 吗? git merge 就是将你的改动合并到进来。比如刚才如果没删 future 分支,先执行 git checkout master ,回到 master 分支去,然后执行 git merge future ,那么 future 的版本 2 就被合并到 master 里去了。
通常,是建立一个分支,合并到主分支,然后删除新建的分支这样的流程。
至于其他的概念,你看 Git 官方手册吧。
http://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5