详细学习视频:

链接:https://pan.baidu.com/s/1Vub3YTo7uUUuGCJUCabBRQ
提取码:6q9x

一、git基本工作流程

我们先来理解下Git 工作区、暂存区和版本仓库概念

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本仓库。

下面这个图展示了工作区、版本库中的暂存区和版本仓库之间的关系:

图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。

图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。

当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

二、学习总结

git init 在本地任意目录创建本地仓库

也可以使用  git clone [远端仓库URL]  克隆一个远端仓库到本地仓库,克隆过程中自动完成仓库初始化

git status  可查看仓库的文件是否有增删改的操作

git log  查看commit记录日志,按提交时间倒序排序

git add <fileName>  将新增文件添加到暂存区,并查看状态

 git commit -m "提交说明",将暂存区的文件提交到到本地仓库中

如果觉得先提交暂存再提交到仓库的流程太过繁琐,在修改和删除文件时,可以使用  git commit   的-a选项直接从本地提交文件到仓库中(若有新增文件则不能使用该操作)

git reset HEAD <fileName>(.  表示当前目录所有文件)可以将add的文件从暂存区清除。

git checkout <fileName>  从暂存区中恢复 已删除未提交的文件

提示:2020/04/09使用上面的方式无法恢复文件,总是报错

解决方法:使用命令 git checkout HEAD -- stock_db.sql 。git checkout,后面加上一个 HEAD,表示最近一次提交,后面是两条横线,表示当前的分支,一个空格,接上是要恢复的文件的名称,意思就是把 stock_db.sql 这个文件恢复到最近一次提交的状态。

git pull  拉取更新当前分支的远端代码,此时会同步覆盖本地仓库和本地目录

git push  将commit提交的信息从本地仓库提交到远端仓库

git branch 查看分支,-a 选项可以查看本地和远端所有分支

git branch branchName 可创建分支(注:创建分支时,会自动同步master文件)

git branch -d branchName 可删除分支

git checkout branchName 可切换分支

git merge branchName  可合并分支

当我们在test分支完成项目开发,commit后想把代码合到master分支,首先需要切换到master分支,

注意,如果是多人开发的话,需要把远程master上的代码先pull更新,再执行命令git merge test把test分支的代码合并到master上,最后再把代码push到远端仓库

三、常见问题

1、合并分支报错:

CONFLICT (content): Merge conflict in branchTest.txt
Automatic merge failed; fix conflicts and then commit the result.

报错原因:对两个分支的同一个的文件进行了不同操作。

解决方法:手动修改文件,使文件内容一致

2、当clone一个远端库到本地后,使用git branch,发现该库只有master分支,那该怎么拉取远端分支呢? 如果在本地新建分支名,再使用git pull直接拉取,是拉取不了的!

解决方法:先使用git branch -a查看远端需要拉取的分支名称,使用 git checkout -b test origin/test(作用是checkout远程的test分支到本地,并在本地创建名为test分支,并切换到本地的test分支)

3、本地git commit之后的撤销操作

使用git log查看最近提交记录,获取到commit的id

使用 git reset --hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull之后形成的commit点

注:git reset --hard 会把本地所有的代码还原到指定的commit的版本(利用这个功能也能恢复误删的文件,如果恢复的文件少还是建议用git checkout filename 的方式),所以如果不是代码需要全部还原,请慎用!

4、执行命令时出现Failed to connect to github.com port 443: Timed out

查询代理(我通过下面查询代理其实并没有返回相关的信息)
git config --global http.proxy 取消代理
git config --global --unset http.proxy
然后再执行git命令,成功了!

学习git&github的更多相关文章

  1. GIT学习---GIT&github的使用

    GIT&github入门 版本控制的原理: 根据md5进行文件的校验[MD5的特性就是每次的输入一致则输出也一致],对于每次的修改进行一次快照 版本控制的2个功能: 版本管理  +   协作开 ...

  2. Git/Github Learning

    通过网上查找资料,我了解到Git/Github是一款免费.开源的分布式版本控制系统,它可以敏捷高效地处理任何或小或大的项目.同时,它是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的 ...

  3. git/github学习笔记

    郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...

  4. 学习 Git 玩转 GitHub

    原文地址:学习 Git 玩转 GitHub 博客地址:http://www.extlight.com 一.基本了解 1.1 什么是版本控制系统 版本控制系统是一种记录一个或若干个文件内容变化,以便将来 ...

  5. 学习Git的一点心得以及如何把本地修改、删除的代码上传到github中

    一:学习Github的资料如下:https://git.oschina.net/progit/ 这是一个学习Git的中文网站,如果诸位能够静下心来阅读,不要求阅读太多,只需要阅读前三章,就可以掌握Gi ...

  6. 学习git与github的二三bug

    前期概要:git也装好啦,github的账号也注册好啦,ssh key也加了,第一次 git push -u origin master也没问题了 然而 第二次push的时候,提示 Error: Pe ...

  7. 【Git/GitHub学习笔记】基本操作——创建仓库,本地、远程同步等

    近日想分享一些文件,但是用度盘又太麻烦了(速度也很恶心).所以突发奇想去研究了下GitHub的仓库,这篇文章也就是一个最最最基础的基本操作.基本实现了可以在GitHub上存储文本信息与代码. 由于我的 ...

  8. 菜鸟之路——git学习及GitHub的使用

    首先,感谢廖雪峰老师的git教程 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 ...

  9. git &github 快速入门

    本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂存区 撤销修改 删除操作 远程仓库 分支管理 多人协作 github使用 忽略特殊文件.gitignore 1.gi ...

随机推荐

  1. springboot-devtools实现项目的自动重启

    热部署的引入依赖: <!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId& ...

  2. 通过Jedis操作Redis

    package com.yh; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis ...

  3. jstl中的foreach标签

    <%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" ...

  4. IM即时通讯设计 高并发聊天服务:服务器 + qt客户端(附源码)

    来源:微信公众号「编程学习基地」 目录 IM即时通信程序设计 IM即时通讯 设计一款高并发聊天服务需要注意什么 如何设计可靠的消息处理服务 什么是粘包 什么是半包 解决粘包和半包 IM通信协议 应用层 ...

  5. Java中方法和类的深入分析

    1.构造方法不能被继承.也就是说子类里没有父类的构造方法.   Java重载根据的是实参和方法形参之间的匹配.自动类型转换也在重载版本的判断中起到了作用.重载的价值在于允许使用通用名称访问相关的方法. ...

  6. centos源码部署lua-5.3

    目录 一.介绍 二.部署 三.测试 一.介绍 Luat语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大. 二.部 ...

  7. <转>libevent使用demo

    这篇文章介绍下libevent在socket异步编程中的应用.在一些对性能要求较高的网络应用程序中,为了防止程序阻塞在socket I/O操作上造成程序性能的下降,需要使用异步编程,即程序准备好读写的 ...

  8. Windows10计算文件SHA1 SHA256 SHA384 SHA512 or MD5

    目录 Windows10计算文件SHA1 SHA256 SHA384 SHA512 or MD5? 1.计算SHA1 2.计算SHA256 3.计算SHA384 4.计算SHA512 5.计算MD5 ...

  9. Pointcut 表达式

    AOP 概念篇 今天介绍 Pointcut 的表达式 通配符 常见的通配符如下 .. 含义一:方法表达式中.代表任意数量的参数 @Service public class HelloService { ...

  10. JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载

    这是写的另一个导出word方法:https://www.cnblogs.com/pxblog/p/13072711.html 引入jar包,freemarker.jar.apache-ant-zip- ...