git学习2

前言

上一篇讲到git在windows本地的操作,接下来就开始远程操作了

前期准备

注册github帐号, 生成本地电脑的key

1
ssh-keygen -t rsa -C "youremail@example.com"

输入文件名中输入自己要保存的文件名,这里我输入id_rsa_home,因为我有两个帐号, 我要自己区分一下

之后将id_rsa_home.pub中的内容全部复制到SSH KEY中
测试是否成功

1
ssh -T git@github.com

建立仓库

在github上建立一个仓库:scrapyStudy(这里我拿scrapy学习举例子)

克隆远程仓库

1
2
3
4
#进入f:\github
#命令行键入
#注意:我这里github是我的别名,如果你没有像我一样有设置C:\Users\Administrator\.ssh\config文件, 则按照自己的将github换成github.com
git clone git@github:maqiangThunder/scrapyStudy.git

分支

我们在github上新建一个仓库的时候, 发现默认是master分支,为什么会有分支,假如现在我们要开发一个新的功能,可能要一周的时间,这个时间段里面我又要保证我原来的代码是不变的,因为我不想在一个功能还没开发测试OK前就把原来的代码弄乱,这个时候我想到的方案就是重新建一个仓库, 然后把现在master的代码拷贝过去,等我把功能开发完了再合并进来,但是问题来了, 是不是每次开发yi个功能都要新建一个仓库,而且合并起来不是很美麻烦, 现在分支出现了, 它就像一棵树上分叉了, 你从一个枝丫上去开发新功能, 完了直接使用合并命令, 还可以直接回退到枝丫分叉的地方

创建分支

现在HEAD指向的是master分支(默认的),现在我们创建一个分支dev并切换到dev分支

1
git checkout -b dev

然后添加一个文件并提交

查看分支

切换分支

我们现在在dev分支, 我再想回到master怎么办

1
git checkout master


我们看到dev.txt文件消失了, 我们体会一下,我们切换到master分支,是不是就像从一个枝头跳到另一个枝头,master枝头的地方我们并没有生成dev.txt文件

合并分支

开发完dev功能之后我们想合并到master分支

1
2
3
#首先切换到master分支
git checkout master
git merge dev


我们发现dev.txt文件回来了,现在明白了一切了

删除分支

dev分支合并完了, 可以删除了

1
git branch -d dev

远程上传

现在对分支的整个操作都是在本地操作,github上还没有任何更改,我现在把master分支推送到远程github

1
2
#git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master:master


解决冲突

开发过程中我们会有多人同时进行,如果两个开发人员同时修改了一个文件A, 开发人员M
他首先提交了文件A到github,这个时候开发人员N没有也修改了文件A, 他试图去提交的时候就会出现问题,我们来演示这个过程
我使用虚拟机安装ubuntu,模拟另一个开发人员
M开始修改dev.txt

1
2
3
4
5
git config user.email "970049212@qq.com"
vim dev.txt
git add .
git commit -m "modify dev.txt"
git push origin master:master


之后N(windows)也开始修改dev.txt并提交

无法提交到远程
我们需要先解决冲突然后再提交

打标签

常用的git命令

1
2
3
4
5
6
7
8
9
10
11
git clone 'url://'
git add .
git status
git commit -m ''
git log
git pull <远程主机名> <远程分支名>:<本地分支名> 从远程获取最新的版本并merge到本地
git push <远程主机名> <本地分支名>:<远程分支名> 将本地分支的更新,推送到远程主机
git push --rebase
git reset --hard HEAD
git merge somebranch
git checkout -b somenewbranch

注意点

  1. 解决冲突了,不能强制的把别人的代码盖掉了。一般这个流程,开发完后先add->commit后,再先git pull把服务器上别人的更新拉下来,如果没有冲突就好办,就直接把自己的代码push到服务器,但是就是要保证自己提交的代码是可以运行的,不能有错的直接push上去了

  2. 如果把服务器上别人的更新pull下来,出现冲突了,就得先把冲突的文件全部解决掉,然后再走一遍git add->commit->push的流程就好了

  3. 然后就是定期pull,最好一天一次

  4. pull之前自己的代码要先git add commit就行了