Git

这个年代,不会点Git真不行啦,少年别问问什么,在公司你就知道了~

Git是一个协同开发的工具,主要作用是进行版本控制,而且还能自动检测代码是否发生变化.

一. 安装

下载地址:https://www.git-scm.com

二 .进入 git bash

wins:

(1)进入要进行管理的文件夹,空白处右键,弹出框就会有

(2)安装后,电脑桌面也会有个的图标

三.开始使用-git常用命令

一.基本使用

记住:如果要管理哪里文件,就进入哪个文件夹

1. git init     初始化git仓库

git仓库存放文件夹是 .git文件夹里,如果你的电脑上没有,应该是文件夹隐藏了,勾选“隐藏的项目"就可以看见了

之后所有的版本都会放到 .git 文件夹里。

2.git status    查看当前的状态(红色,绿色, 白色)

下面红色的文件,表示还没有被管理起来的文件

3. 选个文件进行管理:git add flask_ctx/

4.然后在git status查看管理状态

5. git add ./    把包括根目录在内的所有文件都管理起来

所有变绿的文件都表示已经准备好了,接受管理

6.克隆所有变绿的文件保存起来,这些文件就会变成白色的了

6-1  git config --global user.mail "victorm315@163.com"

6-2  git config --global user.mail "victorm315@163.com"

6-3 git commit -m  ”第一次把所有的文件都保存起来“

备注:”引号里的内容一定是要详细写的,防止将来你看不懂,千万别乱写,给自己挖坑“

6-4 再git status,下面就没有需要提交的文件了

7.此时,你的文件已经被真正管理起来了,之后你的文件不管发生什么风吹草动,都会被git检测到

7-1 如果你再pycharm里add了文件,pycharm 就会自动提示你是否增加文件到git

7-2 也可以通过 git status 检测,发生变化的文件就会被标红,而且再pycharm的目录树里也是红色的

.idea 是pycharm自动生成的,不是我们的代码,可以忽略他

7-3 继续执行: git add .   和  git commit -m  提交

8.  git log  查看提交日志,可以看到共提交了几次

9.  git reset --hard 要回滚到的版本号       回滚到某一个版本

9-2 再 git log 可以查看提交日志,下图已经显示只有第一次提交的内容了

查看文件:不需要的代码已经没有了

10. git reflog      查看历史提交记录

11 git  reset --hard 需要恢复的id        恢复刚才删掉的代码

已经被删掉的代码就又回来了

问题场景:

新功能A已经开发了一半,但是线上出现bug了,需要回到上被版本紧急修复,那这里存在一个问题,新功能A怎么能暂时存在某个地,等修复完线上bug后再接着开发新功能A呢?

二.Git之stash(方案一:一般是自己用的,公司不用)

stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

看完之后,对应stash命令,要抓住关键词:临时 + 临时存储的“某个地方”

1. git stash :将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态

2. bug修复后,git add .  + git commit -m “bug修复” 提交

3. 拿回新功能A的代码,继续开发

git stash pop: 将第一个记录从“某个地方”重新拿到工作区(可能有冲突),如果出现冲突,需要手动自行解决

如果手动修改冲突代码:

  1. Pycharm里会提示那部分代码冲突了,将你需要的代码保留,其他不需要的删除掉

  2 .idea/workspace.xml 相应的冲突的地方也需要修改

冲突解决完成后,继续开发,再重复提交版本管理等。

git stash list :查看“某个地方”存储的所有记录

git stash clear:清空“某个地方”

git stash apply 编号:将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)

git stash drop 编号:删除指定编号的记录

三. git 之 branch(公司项目中,一般都用branch)

branch:称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。

branch相关常用命令:

  • git branch 分支名称             创建分支
  • git checkout 分支名称          切换分支
  • git branch -b 分支名称    是上面两条命令的合并,即创建又切换
  • git branch -m 分支名称        创建并切换到指定分支
  • git branch                            查看所有分支
  • git branch -d 分支名称         删除分支
  • git merge 分支名称              将指定分支合并到当前分支

演示:

1. 先从master主干上拉一个branch分支出来进行新需求的开发:

git branch dev:从master主干上创建分支,分支名字是dev

git checkout dev:切换到到dev分支

ls: 查看当前目录下有哪些文件

touch 文件名: 在dev分支上创建文件

2. 记住:如果要切换其他分支或者主干,一定要先提交一下在分支上的代码

git add .

git commit -m "dev分支"

3. 切回master主干,看一下是否提交到了master上

git checkout master : 切换回master

4. 再拉一个bug分支,修复bug

5. bug分支与master合并

5-1. 合并前要先提交bug分支的代码

5-2. 再切回到master主干(合并到哪个分支,就要切换到哪个分支):   git checkout master

5-3. 合并bug分支到master: git merge 被合并的分支名称   ---- 合并的时候可能会产生冲突,产生冲突就要手动去合并了

5-4. 根据规定,决定要不要删除分支:git branch -d 要删除的分支名称

所以线上出现bug了怎么办?(面)

创建一个bug分支,在bug分支上修复,修复完成后,再合并到master。

6.再切换到dev分支,继续开发

6-1 开发完成,提交

6-2 切换到master

6-3 合并到master,此时会出现一个vim界面,可以进行编辑,比如写一些注释行说明,

6-3-1 按 键盘 “i ” 键,进入vim编辑模式

6-3-2 编辑完成后,先按 esc, 再按 :   , 然后按wq:报错并退出

6-4 然后可以看log : git log

其实按照这个图可以一直玩下去

四. git 之 rebase

rebase的作用(面):

1. 用于合并,同merge

2. 并且将提交记录合并到一条主线上,能让提交记录更加整洁

3. git rebase 也会产生冲突,同样需要手动合并解决冲突

4. 解决冲突后,需要执行  git rebase --skip

所以,那该用merge还是rebase进行合并呢?

视情况而定:如果要保留每次提交记录,就用merge,如果不需要刻意用rebase

四.git之远程仓库 github

github:国外的平台,目前开源的代码,或者优秀的程序都放在这个平台上。也是全球最大的程序员的交流平台

GitHub,一个基于Git实现的代码托管的平台,可以将内容以及版本记录在远程也保存一份,这样就不用U盘咯(类似于云盘)。

PS: 类似GitHub的产品还有许多,如:GitLab、Bitbucket、码云(码云可以给开几个私有账号,别人看见)等。

很多公司处于安全和保密考虑,也会搭建自己的代码管理仓库:gitlab

github的使用

以码云为例,其他如gitbug都是一样的,操作命令也相同;只是gitbug在国外,操作比较慢。

使用git仓库的前提条件是要先注册个账号哦。

A 客户端的操作

1. 在github里创建项目

  新建项目,然后会获得一份简易的入门指导如下图:

2. 进行全部配置,就是说明谁来提交代码,下面的配置在最开始已经配置过了

git config --global user.name "马明辰"
git config --global user.email "victorm315@163.com"

3. 在git bash 添加远程添加:意思是将代码推送到后面的地址:https://gitee.com/victorm315/StudyGitHub.git

origin 是 https://gitee.com/victorm315/StudyGitHub.git的别名,以后就可以用origin来代替 https地址了。

4. 把当前commit的所有代码push到上面的地址

解释:把master 分支push到origin代表的地址里去

push的时候会出现码云的用户名校验,正确输入即可

然后刷新,就可以看到提交的代码了。这是master分支的代码。

5.dev分支的也推送到远程仓库进行托管

记住:要push那个分支,就要先切换到该分支

2. B客户端获取代码

 1 如果是第一次拉,你的文件夹是空的,可以通过克隆的方式获取代码

被克隆的代码准备放在那里,要先进入该目录

命令: git clone https://gitee.com/victorm315/StudyGitHub.git

2 进入目录,可以看到,克隆下来的代码是master的,是把所有代码完全copy下来了,而我们要开发是要在dev分支上操作的。

3 拉取dev,可以按照下面的方式拉取了

4 就可以开始在dev上继续开发代码了

比如修改了g.log文件

5 把刚才提交到本地.git文件夹的代码还需要push到远程仓库才能真正实现dev代码的托管

A 客户端:

至此,远程仓库已经是最新代码,但是A客户端本地还不是最新代码,那又如何在A客户端获取远程仓库最新的代码呢?

同B客户端一样,也要先进入需要操作的代码目录,然后拉取最新的代码,命令同B客户端一样的

然后就可以在A客户端 dev 分支接着开发项目了。

C 客户端

在C客户端还可以有另外一种方式获取源代码

1. 先创建个空目录,起个名字进行初始化 git init

2. 注册到远程仓库: git remote add origin 地址

3. 拉取master分支

(1~3 就跟克隆其实一样的)

4. 接着创建dev分支,继续写代码,add, commit, push

长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行

【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】or 【git rebase origin/分支】,

并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

五. git 之开发规范

在公司怎么进行协同开发的呢?(面)

  一般是为每个人创建一个分支进行开发

公司是否做代码的review?谁来做?怎么做的?

  代码review一定要做的;一遍是直接leader做的review,或者老大与相关成员一起做review的;review的时候会再创建一个review的分支

公司一般是怎么合并代码的?

  一般是每个小功能完成后,当天就会合并一次,防止后期代码合并时出现大量的代码冲突。

在git上如何协同开发?

  -- 通过合作者的方式

  -- 通过创建组织,邀请成员的方式

  -- fork方式

fork的主要流程:

  用户A fork别人B的代码:

    1. 对于你想fork的代码,点击 fork, 相当于是把别人的项目copy到了你的账户目录里。

    2. 对于相关的代码进行修改,然后点击执行 New pull request

    3. Create pull request,编辑相关信息,提交给源代码的owner了

  B用户:

    1. 收到消息,点击 Merge pull request ,就能看到A提交的信息

    2. 点击Confirm Merge,在用户B的源代码里就能看到用户A提交的代码信息了

六. Git 之 .gitignore文件

项目中经常有一些文件如数据库文件、开发工具如pycharm生成的.idea文件等,都是不能上传到github或者想忽略.idea,怎么做呢?

可以通过 .gitignore 文件进行忽略

1. 首先创建 .gitignore文件

命令:touch .gitignore

2. 在.gitignore文件里写上需要忽略掉的文件名

3. git add .  和 git commit -m "提交日志"

4. .gitignore文件里能写什么内容?

  1)以斜杠“/”开头表示目录;  如:.idea/

  2)以星号“*”通配多个字符;

  3)以问号“?”通配单个字符

  4)以方括号“[]”包含单个字符的匹配列表;

  5)以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

  A  具体怎么写,github里也给你想到了,可以参考哪些文件需要ignore,然后选择Python.gitignore,就有Python官方的gitignore文档。

  https://github.com/github/gitignore/blob/master/Python.gitignore

 

  B  在你创建项目的时候,也是可以选择配置.gitignore的

七. git 之 tag

git tag用于控制 v1, v2 的版本。

1. 创建本地Tag

-a:表示创建一个含附注类型的标签,含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;

还有一种标签类型是轻量级标签,轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。

-m:指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果没有给出该选项,Git 会启动文本编辑软件供你输入标签说明。

2. 查看本地tag

3. 查看本地tag,模糊匹配

4. 删除本地tag

5.  切换tag

6. 查看

Git 与 GitHub的更多相关文章

  1. 简单使用Git和Github来管理自己的代码和读书笔记

    原文链接:http://my.oschina.net/bxxfighting/blog/378196   先注册github.com的账号官方网站: https://github.com/ 注册界面, ...

  2. git for windows 的默认工作路径(HOME)的设置以及Git与GitHub之间的SSH加密协议

    1.安装及配置默认路径 Windows中从GitHub上面:https://git-for-windows.github.io/ 下载安装好git后(双击,改一下需要的安装路径,一路确定就好了),安装 ...

  3. git与github安装、配置、pull、push

    操作系统是Ubuntu 16.04 LTS 64bit 1 安装git (1)安装 sudo apt-get install git-core (2)一些全局变量的初始化 在本地建立一个文件夹,然后做 ...

  4. 转:sublime上使用git连接github

    "工欲善其事,必先利其器." 这是古人的教诲,也是一个高效率的工程师需要遵循的法则之一.从大学开始写Java使用了JBuilder,Eclipse,后来写PHP用了Zend,写Ja ...

  5. git与github使用

    Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的关联 六. ...

  6. linux下git以及github的连接与使用

    简单理解 Git 的思想和基本的工作原理,能够更好的进一步和使用Git.在开始学习Git 的时候,最好不要把Git的各种概念和其他的版本控制系统诸如 Subversion 等相比,否则容易混淆每个操作 ...

  7. Git和Github简单教程

    原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章 ...

  8. Git和Github简单教程(转)

    这篇文章只挑一部分命令来讲,差不多够用就行的程度.如果需要其他命令,到时候再去其他地方了解就行了先在Github上写好再搬过来的:本文Github链接 目录: 零.Git是什么 一.Git的主要功能: ...

  9. WebStorm和sublime上使用git连接github(转)

    WebStorm使用git连接github的方法: 用webstorm上传代码时,首先要先下载git,网址一搜就可以搜到,安装git,并且把ssh配置到github上.然后开始配置webstorm,打 ...

  10. git和github使用方式

    git 和github github是远程管理代码的服务器的名称 git代码管理系统 (git既然是一个系统,所以说git也有一些命令) git操作过程 首先在本地建立一个仓库,用来把代码提交到git ...

随机推荐

  1. 1、ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别

    1.ClassLoader.getResourceAsStream() 与Class.getResourceAsStream()的区别 例如你写了一个MyTest类在包com.test.mycode ...

  2. Jupyter Notebook 设置黑色背景主题、字体大小、代码自动补全

    1.背景主题.字体大小设置 安装Jupyter主题: pip install jupyterthemes 然后,更新Jupyter主题: pip install --upgrade jupyterth ...

  3. svn安装配置

    1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd httpd-devel subversion mod_da ...

  4. 【luogu P1666 前缀单词】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1666 10.13考试题 当时没想出来,觉得是要用trie做,在trie上跑一个树形dp 结果是写了个子集枚举 ...

  5. ORACLE中查询语句的执行顺及where部分条件执行顺序测试

    Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符, ...

  6. 数据库函数(Left、Right)

    MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr()  ...

  7. 如何编写及运行JS

    JS也是一种脚本语言,他可以有两种方式在HTML页面进行引入,一种是外联,一种是内部.       外联JS的写法为: <script src="相对路径"></ ...

  8. 小工具:生成半透明背景色的 CSS 代码,不影响子元素透明度

    工具:http://leegorous.net/tools/bg-alpha.html 工具介绍:http://leegorous.net/blog/2010/07/29/generate-css-c ...

  9. 导航栏NavigationBar的按钮设置

    有时候在自定义navigationBar的左右按钮的时候,button的图片会显得很大,个人感觉原因有以下几种情况: 1.使用的是UIButton直接加在navigationBar上面 2.自定义了一 ...

  10. ThinkPHP5.0图片上传生成缩略图实例代码

    很多朋友遇到这样一个问题,图片上传生成缩略图,很多人在本机(win)测试成功,上传到linux 服务器后错误. 我也遇到同样的问题.网上一查,有无数的人说是服务器临时文件目录权限问题. 几经思考后,发 ...