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. 查看

转载于:https://www.cnblogs.com/victorm/p/9502072.html

Git 与 GitHub相关推荐

  1. Git与github基本操作

    一.  git安装与简单配置 1.      git的安装 首先进入git的官方网站git-scm.com 下载自己电脑对应的git版本,然后点击安装即可 点击上图的红色部分进行下载 安装的时候直接默 ...

  2. 用 Git 和 Github 提高效率的 10 个技巧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:segmentfault.com/a/11900000038 ...

  3. 在Pycharm工具中配置集成Git和GitHub

    在Pycharm工具中配置集成Git和GitHub 1.集成Git. 打开Pycharm,  点击File-->Settins-->Version Control-->Git 然后在 ...

  4. R,Git和Github(下)

    作者:Wenhu 博客:http://bioinfostar.com/ 本讲第一部分,介绍git的"足够你用"命令:本讲为第二部分,介绍github的主要用途,包括版本管理.分枝管 ...

  5. clone git 修改保存路径_Git和Github详细入门教程(别再跟我说你不会Git和Github)

    前言:成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成.你好,我是梦阳辰,快和我一起搞定Git和Github吧. 文章目录 01.Git概述 02.Git的本地仓库操作 Git的版本回退操作 ...

  6. 关于Git和Github你不知道的十件事

    Git 和 GitHub都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不知道每个细节.我整理了Git和GitHub可能提高日常效率的10个常用技巧. GitHub 快捷键: t 和 w ...

  7. Windows 下使用Git管理Github项目

    Git Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得 ...

  8. 用Git向gitHub上传项目

    用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config -- ...

  9. git和github的关系

    写在前面:我身边好多人问我git和github的区别,想必对于好多人没学过的大佬们恐怕也是一脸懵逼,但是不知道也是不行的,所以我今天就来讲一讲这二者的区别和联系. 用一句话形容这二者的关系:git是弓 ...

  10. git push github SSL报错处理

    本文仅供学习交流使用,如侵立删!demo下载见文末 git push github SSL报错 问题:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connect ...

最新文章

  1. JavaScript实现图像处理----resizeImageWidth调整图像宽度算法(附完整源码)
  2. PyOpenCV 坐标系统
  3. 脚本启动显示查询频繁被服务器防御_又被CC攻击弄得心有余悸?莫怕!这里教你如何防御...
  4. JavaScript函数补完:toString()
  5. Python爬虫_Cookie
  6. python graphviz中文乱码_graphviz画图与中文乱码等问题总结
  7. 在 Web 级集群中动态调整 Pod 资源限制
  8. Fetion2008 分析 Part1:准备工作
  9. [原]tornado源码分析系列(二)[网络层 IOLoop类]
  10. 基础集合论 第二章 9 族
  11. Linux:telnet命令安装
  12. Xiph基金会成员:Timothy B. Terriberry
  13. IE无法安装HP-QC插件
  14. strack.js调摄像头人脸识别拍照
  15. 腾讯云神笔低代码平台的申请没通过,只能等公测了
  16. 【Prism】MEF版Commanding
  17. eclipse java web乱码,eclipse中文乱码解决
  18. UML设计系列(6):活动图
  19. AI大语音(八)——GMM-HMM声学模型(深度解析)
  20. 用海伦公式计算三角形的面积 python_java程序设计1-2之用海伦公式计算三角形的面积...

热门文章

  1. 系统学习NLP(二十)--SWEM
  2. python xlutils教程_python xlutils复制表格使用方法
  3. C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果。
  4. xmpppy获取服务器版本信息,为什么XMPP? - 今幕明的个人页面 - OSCHINA - 中文开源技术交流社区...
  5. 变长编码中前缀码的概念
  6. Hive数据倾斜入门
  7. 引燃抖音短视频源码开发项目的几点原因
  8. Volley 源码分析
  9. iOS定位服务CoreLocation
  10. 什么是Mac地址?什么是交换机? 涉及单工,半双工,双工模式