Git和Github的基本操做

什么是GIT?

Git是一个免费、开源的版本控制软件,目前世界上最早进的分布式版本控制系统(没有之一)python

什么是版本控制系统?

版本控制是一种记录一个或若干个文件内容变化,以便未来查阅特定版本修订状况得系统。git

  • 系统具体功能

    记录文件的全部历史变化github

    随时可恢复到任何一个历史状态web

    多人协做开发或修改面试

    错误恢复编程

版本控制的工具:安全

  - svn   集中式版本控制系统服务器

  - git  分布式版本控制系统分布式

集中式vs分布式

CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢:svn

集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是本身的电脑,因此要先从中央服务器取得最新的版本,而后开始干活,干完活了,再把本身的活推送给中央服务器。

中央服务器就比如是一个图书馆,你要改一本书,必须先从图书馆借出来,而后回到家本身改,改完了,再放回图书馆。

集中式版本控制系统最大的毛病就是必须联网才能工做。

分布式版本控制系统根本没有“中央服务器”,每一个人的电脑上都是一个完整的版本库,这样,你工做的时候,就不须要联网了,由于版本库就在你本身的电脑上。

既然每一个人电脑上都有一个完整的版本库,那多我的如何协做呢?比方说你在本身电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,大家俩之间只需把各自的修改推送给对方,就能够互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高不少,由于每一个人电脑里都有完整的版本库,某一我的的电脑坏掉了没关系,随便从其余人那里复制一个就能够了。而集中式版本控制系统的中央服务器要是出了问题,全部人都无法干活了。

在实际使用分布式版本控制系统的时候,其实不多在两人之间的电脑上推送版本库的修改,由于可能大家俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。

所以,分布式版本控制系统一般也有一台充当“中央服务器”的电脑,但这个服务器的做用仅仅是用来方便“交换”你们的修改,没有它你们也同样干活,只是交换修改不方便而已。

Git的优点不单是没必要联网这么简单,后面咱们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。

 

什么是Github

Github是全球最大的社交编程及代码托管网站(https://github.com/)。

Github能够托管各类git库,并提供一个web界面(用户名.github.io/仓库名)

 Github和Git是什么关系

Git是版本控制软件

Github是项目代码托管的平台,借助git来管理项目代码

使用Git

项目背景:这个创业者想开发选课系统

阶段一:顺利上线代码

首先在你建立的项目的文件夹里面右键--->点击Gir Bash Here---->吧git运行起来。

一、初始化:git   init

git init,初始化,表示即将对当前文件夹进行版本控制

git init

 

二、若是你第一次使用git的时候,须要配置一下。若是你已经配置了,之后就不用配置了

 三、使用git init以后工做区有一个隐藏目录.git,这个不是工做区,而是git的版本库。

Git的版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为咱们自动建立的第一个分支master,以及指向master的一个指针叫HEAD

由于咱们建立Git版本库时,Git自动为咱们建立了惟一一个master分支,因此,如今,git commit就是往master分支上提交更改。

你能够简单理解为,须要提交的文件修改统统放到暂存区,而后,一次性提交暂存区的全部修改。

 

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的全部内容提交到当前分支。

 四、添加当前的目录以及全部的子文件到暂存区
  • git add 文件名,将指定文件添加到版本库的暂存状态。
      git add .    #全部的文件

     git add README.md  #具体添加的文件

 git status查看当前状态,红色表明未跟踪的文件,绿色表明跟踪的文件(能够被版本库管理)

     查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。

5. 数据提交上线:git commit -m "描述信息"

将暂存区的文件提交到版本库的分支。

 

六、查看状态,看那个是否被修改过:git status

必定记得先add,后commit,add以后是没有放到版本里的,只有commit的时候才有版本

七、查看有几个版本:查看版本提交记录   :git log

查看提交记录,即:历史版本记录

8.修改某一个文件后,提交

9.查看提交后log

十、回滚到上一个版本:git   reset --hard   版本号
 
十一、再跳回去(查看日后的版本号):git reflog 

 Git把管理的文件分为了两个区域四个状态。

add到暂存状态的时候成绿色了,在commit的时候就没有了

提供了这个回滚的功能。

十二、撤销修改:git checkout -- <file>(在add以前撤销)

1三、撤销修改:git reset head -- <file>(在add以后撤销)
 

 

1四、总结:
  • HEAD指向的版本就是当前版本,所以,Git容许咱们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • git log能够查看提交历史,以便肯定要回退到哪一个版本。

  • git reflog查看命令历史,以便肯定要回到将来的哪一个版本。

  • git diff HEAD -- readme.txt命令能够查看工做区和版本库里面最新版本的区别
  • 场景1:当你改乱了工做区某个文件的内容,想直接丢弃工做区的修改时,用命令git checkout -- file
  • 场景2:当你不但改乱了工做区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操做。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用git reset --hard commit_id,不过前提是没有推送到远程库。

阶段二:当开发到一半的时候出现bug,修复bug

  - 开发直播功能

当项目开发到一半的时候,就是在此时线上运行平台出现Bug须要紧急修复,以前的版本出现bug了怎么办? 

解决思路:使用分支

 

 默认会有一个master的分支。只作线上的版本,注意不要在master分支上修改,要修改的话就建立一个bug分支

一、建立一个修复bug的分支:git  branch  bug   ,这个bug分支是在master分支上建的,至关于拷贝了一份

二、查看一共有几个分支 :  git  branch

三、跳转到bug分支:git  checkout  bug

四、跳转到master分支:git branch master 

五、建立一个开发新功能的分支:git  branch  dev    #只作开发的版本

如今就有三个分支了,每一个分支都是不同的,bug修复完了,如今就要合并在master上了。

六、master和bug分支合并:git merge  bug  

七、删除bug分支:git branch -d bug

八、继续开发,切到dev:git  branch  dev

九、开发完毕,master和dev合并:git merge dev 

切换以前必定记得把你的代码提交一下

git add . 

git commit -m '修改bug' 

合并的时候可能出现冲突,可能不出现,出现冲突了就得手动解决

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git branch bugdev  # 建立分支bugdev

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ ls
__pycache__/  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git checkout bugdev #切换分支bugdev
Switched to branch 'bugdev'
M       core/main.py

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ touch b.log  #增长文件

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ git add . #提交到暂存区

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ git commit -m 'bugdev' #提交到版本库,修复bug
[bugdev 7fc00b8] bugdev
 2 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 core/b.log

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ git checkout master #切换到master分支
Switched to branch 'master'

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ ls
__pycache__/  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git merge bugdev # 合并bugdev分支
Updating 8562916..7fc00b8
Fast-forward
 core/b.log   | 0
 core/main.py | 3 +--
 2 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 core/b.log

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ ls #查看文件内容,多了b.log文件
__pycache__/  b.log  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git branch -d bugdev #删除bugdev分支
Deleted branch bugdev (was 7fc00b8).

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git branch #查看全部分支
  dev
* master
$ git checout dev 继续开发dev内容

开发完内容以后,在master上合并dev内容
$ git checkout master

$ git merge dev

  

流程图

branch相关经常使用命令:

git branch 分支名称             建立分支
git checkout 分支名称          切换分支
git branch -m 分支名称        建立并切换到指定分支
git branch                          查看全部分支
git branch -d 分支名称         删除分支
git merge 分支名称              将指定分支合并到当前分支

面试题:当公司代码出现bug时候怎么办?

解答:建立一个bug分支,修复bug后,合并到主分支上,而后删除bug分支

 

 

扩展:git rebase

合并+将提交记录合并到一条主线上,提交记录整洁

 

阶段三: 两个地方办公

云端须要一个存放代码的地方用Github或码云等

  公共的

     - Github是用来作代码托管的

     - 码云,作代码托管

     - csdn code ,作代码托管

  内部搭建:

     - gitlab

一、登陆Github

在家里:

就会有这样一个地址,咱们就能够用这个地址来提交

git remote add origin https://github.com/XXX/study1.git
#给远程项目起一个别名origin
 
git push -u origin master
#把本地项目分支提交到GitHub远程项目

 

在公司: 

家里:
                    
                    git add .
                    git commit -m 'xx'
                    
                    git remote add origin https://github.com/WuPeiqi/greenlu.git
                    
                    git push origin master 
                    
公司:
                    
                    # 新公司第一次获取代码
                        方式一
                        git clone https://github.com/WuPeiqi/greenlu.git
                            
                        方式二
                        git init 
                        git remote add origin https://github.com/WuPeiqi/greenlu.git
                        git pull origin master 直接拿回来
                        
                        
                        方式三
                        git init 
                        git remote add origin https://github.com/WuPeiqi/greenlu.git
                        这的两句至关于git pull origin master 这一句
                        git fetch origin master  拿到分支上了
                        git merge origin/master  合并在一块儿
                    
                    # 往后
                        git pull origin master  #
                        
                        或者
                        git fetch origin master 
                        git merge origin/master 
                        
                        
                        
                    #   若是你在本地修改问题,又add,又提交,在线上去拿的时候,或许会冲突

 图示

特殊场景解决

当你在家的时候吧代码上线了。到了公司之后吧线上的代码拉回来。

git pull origin dev开始写代码了。写完以后add commit。。。这时候忘了往github上提交了回到家的时候,那今天写的代码没提交,怎么办呢?回公司太晚了,在写一遍浪费时间,或许你还记着今天写的代码,就在这基础上又开发了,这下提升了警记了,就记得提交了 add 、commit 、git push origin dev次日又到公司了,那昨天的代码怎么办呢、、?是拉下来呢?仍是推上去呢?若是你推上去的话,没有冲突还好,若是有冲突的话,那你把你的冲突都上线了,不让你提交,因此咱们要先拉下来先去吧代码拉下来,git pull origin dev 可能会有冲突,解决冲突。

相关文章
相关标签/搜索