之前在使用git的时候,大部分的用处都是用来将自己本地的代码上传至github上。但是近期在做点小项目的时候,发现用到分支的地方,还是挺多的。
这是今天自己看了《github入门与实践》那本书,跟着书上的步骤实践了一番,发现又学到一部分东西。废话不多说,进入正题。
先在本地目录C:/gitTest1下,创建本地仓库。
初始化仓库:
git init
创建README.md文件
touch README.md
然后在这个md文件中添加几行,然后从工作树提交到暂存区
git add README.md
然后将暂存区的改动提交到本地仓库中
git commit -m"add change"
此时可以通过git branch查看本地分支数。可以发现此时本地仓库中只有master一个分支。
可能你们觉得在一个分支上开发没有多大的意思,想再创建几个分支进行开发。
可以通过下面的命令:
git checkout -b feature-A
这个命令相当于
git branch feature-A
git checkout feature-A
上面命令的意思就是创建feature-A分支,并将当前分支切换为feature-A分支。如果在这个分支中修改然后再进行提交,这些改动就被提交到feature-A分支下了。
此时切换到master分支下:
git checkout master
发现还是原来的状态,并没有被改动。这正是在开发中创建分支的优点,不同分支之间不会影响。只要创建多个分支,可以在互不影响的情况下同时进行多个功能的开发。
现在我们来看一下,如果之前创建了feature-A分支并提交了,此时就会有两个分支:master和feature-A分支。master分支是Git默认的分支,主干分支,比较重要的代码发布在这个分支上,此时feature-A分支的任务假如已经完成了,此时需要合并到master分支上。
首先切换到master分支上。
git checkout master
然后合并feature-A分支,为了在历史记录中记录本次分支合并记录,最好使用下面的命令:
git merge --no-ff feature-A
执行上面的命令之后,如果想查看分支合并记录,可以通过图表形式查看:
git log --graph
到这里基本上,本地的基本任务已经完成了。
下面开始进行远程仓库的事情了。
首先在自己的github上创建一个仓库,此时不要勾选创建README.md选项。
我们需要添加远程仓库:
git remote add origin [email protected]:sminocence/git-tu.git
这个命令将它设置成本地仓库的远程仓库,会将远程仓库的名称设置为origin(标识符)。
假定我们是在master分支下执行下面的命令
git push -u origin master
执行上述命令之后,当前分支的内容就会被推送给远程仓库的origin的master分支。当然除了master分支之外,远程仓库也可以创建其他分支,举个例子,我们在本地仓库中创建feature-D分支,并将它以同名的形式push至远程仓库。
git checkout -b feature-D
git push -u origin feature-D
现在远程仓库的github页面就可以查看到feature-D分支了。
现在我们从实际开发者的角度出发,在另一个目录下D:/gitTest下新建一个本地仓库,从远程仓库获取内容。这就相当于我们刚刚执行过push操作的目标仓库又有了另一名新开发者来共同开发。
git clone :获取远程仓库
首先我们换到其他目录下,将github上的仓库clone到本地。注意不要与之前操作的仓库在同一目录下。
git clone [email protected]:sminocence/git-tu.git
执行git clone命令之后我们会默认处于master分支下,同时自动将origin设置成该远程仓库的标识符。我们可以用下面的命令查看本地仓库和远程仓库的分支信息。
git branch -a
我们还可以将feature-D分支获取到本地仓库。
git checkout -b feature-D origin/feature-D
上述命令是以名为origin的仓库的feature-D分支为来源,在本地仓库中创建feature-D分支.
然后我们可以查看一下这个目录下的本地的分支:master,feature-D。
我们可以在feature-D分支下进行改动并提交。然后将其推送到feature-D分支。
git push
git pull 获取最新的远程仓库分支
我们放下刚刚操作的这个目录,回到之前的那个目录下,这边的本地仓库中只创建了feature-D分支,并没有在这个分支中进行任何提交,然而远程仓库的feature-D分支已经有了我们刚刚推送的提交。这时,我们可以使用git pull命令,将本地的feature-D分支更新到最新状态。当前分支为feature-D分支。
git pull origin feature-D
总结一下:
(1)我们在本地的一个目录A下进行开发,然后推送了master和feature-D两个分支(git push -u origin feature-D).
(2)然后我们又在本地的另一个目录B下,clone了之前推送的那个远程仓库,然后
git checkout -b feature-D origin/feature-D,获取远程的feature-D分支到本地,此时本地就有了master和feature-D两个分支,然后在B这个目录下进行了改动、提交以及推送到远程仓库的feature-D分支下;
(3)此时之前A那个目录下,feature-D分支就不是最新的状态了。此时通过git pull origin feature-D获取最新的远程仓库分支。这时候,这个A目录下的feature-D分支就是最新的状态了。这两个目录就相当于两个开发者。就可以同时在同一个分支中进行作业,不断给feature-D增加新功能。
今天先总结到这里,如果有任何意见,欢迎评论指正,谢谢。