GitHub总结[常用命令,暂存区与仓库的交互,解决冲突,发布流程,历史操作,分支管理]
总结
- git命令
- git clone git地址
- git add 文件或目录
- git rm 文件或目录
- git checkout -- 文件
- git commit -m '备注说明'
- git reset HEAD或版本号
- git reflog
- git log
- git status
- git branch 分支名称
- git branch --set-upstream-to=origin/分支名称 分支名称
- git checkout 分支名称
- git checkout -b 分支名称 origin/分支名称
- git diff 版本1 版本2
- git merge 分支名称
- git pull 从服务器获取代码
- git push origin 分支名称
- git tag 标签名称
- git stash
- git git remote -v 查看当前远程库的地址
- git remote set-url origin ip地址 修改远程本地仓库的仓库地址
开发
- 项目经理创建完成仓库后,接下来项目组成员就要进行开发工作了
- 以下操作由每个组员独自完成
添加ssh账户
这一步是组员在ubuntu中生成ssh密钥,然后交给项目经理添加到github中
在ubuntu的命令行中,修改某台机器的git配置
vi .gitconfig----注: 如果没有自己创建
修改为注册github时的邮箱,填写用户名,要求组员的用户名不能重复
用户配置 [user] email = 注册邮箱 name = github账户名
生成git密钥
公钥为id_rsa.pub
私钥为id_rsa
ssh-keygen -t rsa -C "邮箱地址"
查看公钥内容,复制此文件里面的内容
cat id_rsa.pub
将复制的公钥发给项目经理,等项目经理在github上添加后,会将项目地址下发,然后就可以参与到项目开发中进行后续操作
本地克隆
根据项目经理提供的地址,如“git@github.com:bossliu2016/django1.git”,从github上将项目克隆到本地,默认对应的是master分支
--git clone 项目地址 例: git clone git@github.com:bossliu2016/django1.git
在克隆出来的目录下,隐藏目录.git存储了服务器、分支、文件变更等信息,现在可将克隆下来的文件里进行操作了
同步分支
以自己的姓名创建分支,如果此分支已经存在可以添加数字后缀,具体要与项目经理商量
git checkout -b kayb
将本地分支推送到服务器
git push origin kayb
将本地分支跟踪服务器分支
git branch --set-upstream-to=origin/分支名称 分支名称 例: git branch --set-upstream-to=origin/kayb kayb
将github上的dev分支同步到本地,因为开发过程中,所有组员都向这个分支上提交阶段性代码,并从这个分支获取最新代码
git checkout -b dev origin/dev
注:到此步查看单个分支是否与服务器的单个分支同步
开发管理
- 上面的操作,只有我们在加入项目的第一天需要进行,只操作一次就够了
- 接下来的操作,是我们每天开发中都要进行的操作,这是必须做到熟练操作的命令
- 当前用户以kayb分支进行开发
git checkout kayb
- 本地仓库分为三部分:工作区,暂存区,仓库区,其中暂存区、仓库区是版本库部分
- 使用IDE如sublime、pycharm等打开项目目录
工作区与暂存区
对于添加、修改、删除文件的操作,都发生在工作区中暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分工作区与暂存区交互的方式及命令如下

添加
按照工作分配,需要创建df_user模块,此时文件位于工作区
python manage.py startapp df_user
在ide中编辑df_user/models.py文件,创建模型类UserInfo
class UserInfo(models.Model):
uname = models.CharField(max_length=20)
upwd = models.CharField(max_length=40)
def __str__(self):
return "%d" % self.pk
将目录df_user及所有子目录和文件添加到暂存区
git add 文件1 文件2 ... git add 目录 例: git add df_user/
撤销
使用暂时区的内容恢复工作区的内容,放弃工作区的更改
在ide中编辑df_user/models.py文件,删除掉str方法
class UserInfo(models.Model):
uname = models.CharField(max_length=20)
upwd = models.CharField(max_length=40)
此时在工作区无str方法的类,暂存区中的类是有str方法的,如果想回到暂存区的状态,则
git checkout -- 文件名 例: git checkout -- df_user/models.py
在ide中查看df_user/models.py文件,发现str方法又回来了
暂存区与仓库区

仓库区表示个人开发的一个小阶段的完成,仓库区中记录的各版本是可以查看并回退的,但是在暂存区的版本一旦提交就再也没有了
暂存区与仓库区交互的方式及命令如下
查看暂存区未提交的记录
git status
将暂存区的记录提交到仓库区
git commit -m '本次提交的说明信息' 例: git commit -m '创建df_user模块'
历史
历史版本的名称:在Git中,用HEAD表示当前版本,也就是最新的提交00c6c39,上一个版本就是HEAD^,再上一个版本就是HEAD^^,当然往上100个版本写100个^肯定就麻烦了,提供了一种简写方式为HEAD~100
查看仓库区的历史操作
git reflog
对比工作区和仓库区中某版本某文件的不同
git diff HEAD -- 文件名
例:
git diff HEAD -- df_user/models.py
添加前
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
isdelete = models.BooleanField(default=False)
添加后
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
bread = models.IntegerField(default=0)
执行命令
git diff HEAD -- df_user/models.py
---结果
# 执行语句
git diff HEAD -- df_user/models.py
diff --git a/dailyfresh/df_user/models.py b/dailyfresh/df_user/models.py
index ffc3bc8..887fb14 100644
--- a/dailyfresh/df_user/models.py
+++ b/dailyfresh/df_user/models.py
@@ -16,4 +16,4 @@ class UserInfo(models.Model):
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
- isdelete = models.BooleanField(default=False)
+ bread = models.IntegerField(default=0)
回退
回退历史版本到暂存区
将df_user/models.py文件的更改完成添加、提交
git add df_user/models.py git commit -m '修改模型类'
上一个版本
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
isdelete = models.BooleanField(default=False)
当前版本
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
将仓库的版本恢复到暂存
git reset HEAD^或版本号 例: git reset HEAD^
可以再将暂存区的内容恢复到工作区
git checkout -- df_user/models.py
执行之后当前版本出现了上一个版本的内容
删除
在ide中将文件删除
git rm 文件名
从工作区到暂存区提交
git add 文件名
从暂存区到仓库区提交
git commit -m '说明信息'
示例:
创建a.py文件:
if __name__ == "__main__":
main()
将df_user/a.py的变更添加到暂存区,再提交到仓库区
git add df_user/a.py
git commit -m '创建文件a'
在ide中将df_user/a.py文件删除,然后在暂存区删除
git rm df_user/a.py
提交工作区到暂存区
git add a.py
提交暂存区的记录到仓库区
git commit -m '删除文件a'
提示:删除的文件一样可以恢复,只需要先从仓库区到暂存区,再从暂存区到工作区
从仓库恢复
git reset HEAD^
从暂存恢复工作区
git checkout -- 1.py
本地与服务器

获取
建议:在每天开始编写代码前,先与服务器同步一次;或者在公用分支如dev上开发时,建议先同步后开发。什么时候会用到dev分支呢?答:合并阶段代码到dev分支,编辑公用文件如dailyfresh/urls.py
1.切换到dev分支
git checkout dev
2.获取代码,如果dev分支上有更新的记录则会同步到本地
git pull
3.切换回自己的分支继续开发
git checkout kayb
4.将dev的代码拉一份到自己的分支一份
git merge dev
推送
建议:在每天下班前将当天开发推送到服务器,这样可以在服务器中存储一个备份,即使本机出问题,在服务器上还能存在代码备份
注意:只会将仓库区的记录提交到服务器的对应分支下
推送前要将此分支跟踪服务器上的同名分支,推荐在创建分支时就完成跟踪
如果要推送自己分支以外的分支,需要先获取,再解决冲突,然后再推送
git push origin kayb
合并分支
一个功能模块开发完了,合并到dev分支
1.切换到dev分支
git checkout dev
2.获取代码,如果dev分支上有更新的记录则会同步到本地
git pull
3.合并
git merge kayb
4.添加、提交并推送
git push origin dev
5.切换回工作分支
git checkout kayb
6.在最新代码上继续开发,所以将dev分支合并到zhujiao分支
git merge dev
解决冲突
- 建议:在更改公用文件如dailyfresh/urls.py时需要操作dev分支,因为大家都可以操作dev分支,所以在合并时可能出现冲突
- 冲突的示例如下,修改dailyfresh/urls.py文件
项目经理的操作
1.项目经理负责前台的开发,需要修改dailyfresh/urls.py文件
git checkout dev
2.在dailyfresh/urls.py文件中添加一条url
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^',include('df_goods.urls')),
]
3.添加并提交
git add dailyfresh/urls.py git commit -m '配置前台url'
4.同步到服务器
git push origin dev
员工助教的操作
1.员工助教负责用户模块的开发,需要修改dailyfresh/urls.py文件
git checkout dev
2.在dailyfresh/urls.py文件中添加一条url
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^user/',include('df_user.urls')),
]
3.添加并提交
git add dailyfresh/urls.py git commit -m '配置用户模块url'
4.向服务器推送
git push origin dev
5.推送时发现出错误了,错误信息如下图

根据提示,需要先获取服务器的变更
git pull
发现有冲突,而且自动合并冲突失败,需要手动合并冲突,指向dailyfresh/urls.py文件

当前dailyfresh/urls.py文件内容如下
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
<<<<<<< HEAD
url(r'^user/',include('df_user.urls')),
=======
url(r'^',include('df_goods.urls')),
>>>>>>> ae79e1fd93d0d9e7f8ca36481c611a2b4a38a9db
]
其中,<<<<<<< HEAD表示当前版本的内容,=======后面,表示>>>>>>> ae79e1fd93d0d9e7f8ca36481c611a2b4a38a9db版本的内容,发现两句代码冲突,都需要保留,如果不能确定是否保留,可以与编写该语句的人员沟通,当前代码更改后如下
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^user/',include('df_user.urls')),
url(r'^',include('df_goods.urls')),
]
6.冲突解决完成,再次添加、提交、推送
git add dailyfresh/urls.py git commit -m '配置用户模块url-解决冲突后' git push origin dev
Debug分支
- 在项目的正常开发过程中,之前发布过的版本可能很会出bug,这时就需要停下来现在的开发任务,先去修改bug,完成后再回来继续开发任务
- git中stash提供了保存现场的功能,可以把当前工作区、暂存区中的内容不需要提交而保存下来,转而去做bug修复,完成后再恢复现场,继续开发工作
- 示例如下:停止当前工作,修复master分支下的一个bug,为修改dailyfresh/settings.py文件
实例
语言和时区的原内容为
LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC'
将语言和时区改为
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Shanghai/Asia'
演示操作
1.查看当前状态
git status

2.保存现场
git stash
再查看当前状态,发现是干净的
git status

3.切换到master分支
git checkout master
4.新建临时分支用于修复bug,用完后会删除此分支
git checkout -b bug001
5.按照上面的设计,修改dailyfresh/settings.py文件的语言和时区如下
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Shanghai/Asia'
6.添加:将工作区中的更改添加到暂存区
git add setting.py
7.提交:将暂存区的内容提交到仓库区
git commit -m '修复时区语言'
8.切换回master分支
git checkout master
9.将bug001分支合并到master分支
因为临时分支用完后会被删除,无法通过分支查询历史记录,所以使用临时分支时需要使用no-ff的方式,同时写上-m备注信息
git merge --no-ff -m "修复bug-语言时区" bug001
10.推送到服务器
git push
11.删除临时分支bug001
git branch -d bug001
12.切换回工作分支zhujiao
git checkout kayb
13.查看现场列表
git stash list
注:可以跳过13步直接14步
14.恢复现场
git stash pop
15.恢复现场后查看工作状态
git status

16.接下来可以在这个分支继续开发
发布
- 项目开发完一个版本后,需要进行项目的合并与发布
- 项目合并与发布,需要项目经理和组员一起来完成,每个人将开发的分支逐个合并到dev分支,如果有冲突则解决冲突,在dev上的代码经过测试没有问题后,则由经理合并到master分支,完成发布
- 实现发布主要遵守如下步骤:
- 每个人逐个合并分支到dev
- 经理合并dev到master并发布
- 每个人获取最新的dev分支、master分支
逐个合并
- 这一步是每个人将自己分支上开发的代码,合并到dev分支上,每个人逐个执行1-6步
- 前题:已经完成了自己分支代码的开发并完成添加、提交及推送
1.切换到dev分支
git checkout dev
2.获取最新记录代码
git pull
3.合并,将自己编写的代码加入进来,如果有冲突则与上一个组员商量解决冲突
如果没有冲突则可以跳过4、5步
git merge 分支 例: git merge kayb
4.添加
注意:在项目的根级目录下,即README.md所在的目录下
git add ./

5.提交
git commit -m 'kayb发布v1.0'
6.推送
git push origin dev
经理合并
- 所有成员都完成合并后,接下来是项目经理要执行的操作
1.切换到dev分支
git checkout dev
2.获取最新
git pull
3.切换到master分支
git checkout master
4.合并dev分支到master分支
- 如果有冲突,则找相应的组同解决冲突
- 如果没有冲突则可以跳过5、6步
git merge dev
5.添加
注意:在项目的根级目录下,即README.md所在的目录下
git add ./
6.提交
git commit -m '发布v1.0'
7.打标签
标签就是为了给一堆数字的版本号,起一个容易记住的名字,一般用于master分支
git tag v1.0
8.推送
git push
逐个获取
- 现在最新的代码已经有了,接下来在这个版本代码基础上继续开发,每个人都要获取最新的代码
1.切换到master分支
git checkout master
2.获取
git pull
3.切换到dev分支
git checkout dev
4.将master分支合并到dev分支
git merge master
5.切换到自己工作的分支如zhujiao分支
git checkout kayb
6.将dev分支合并到工作分支如kayb分支
git merge dev
注:现在可以在新发布的版本上开发代码了

浙公网安备 33010602011771号