Git 初识和使用
目录
概念
工作区/暂存区/版本库
工作区:working directory,在当前计算机中创建的目录。可以理解为本地目录。
暂存区:add 命令将文件的修改添加到暂存区,直到 git commit 将暂存区中的内容全部一次性提交到仓库,可以理解为一个临时中转站。
版本库 :repository,工作区中有一个隐藏的目录 .git,该目录中的所有的文件都可以被 git 管理起来。每个文件的修改、创建、删除等所有的操作,git都能跟踪,记录相应的版本,方便可以随时恢复到某个版本。可以理解为本地的一个记录库,里面记录了工作区提交的变动。
明确一点,所有的版本控制系统,只能跟踪文本文件的改动 :创建文件,删除文件,修改文件,添加内容,删除内容等。不跟踪文件夹的改动:如空文件夹的创建。
master
master:创建版本库的时候,git 会默认帮我们创建一个主分支 master,所以此时的 commit 全部提交到版本库中的 master 分支上。其他的都被称为xx分支master分支是一条线,git 用 master 指向最新的提交,再用 HEAD 指向 master。
版本号
- HEAD :指向的是最新版本
- HEAD^ :上一个版本
- HEAD^^ :上上一个版本
- HEAD~100 :上到100个版本
- commit id :一般情况下,只有上一个版本使用HEAD^表示,其他的版本统统使用 commit id(提交版本号)。
常见命令
<待补充>
环境搭建
Linux 下 Git 和 GitHub 环境的搭建
- 安装Git,使用命令
sudo apt-get install git
- 创建GitHub帐号,然后 生成 ssh key,j接下来建立了本机和远程服务器之间的连接,使用命令 :
ssh-keygen -t rsa -C "git注册邮箱地址"
- 回到 github,进入Account Settings,左边选择 SSH Keys,Add SSH Key,title随便填,粘贴 key。
- 测试ssh key是否成功,使用命令
ssh -T git@github.com
- 如果出现You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上 github。
- 配置Git的配置文件,username和emailgit
config --global user.name "your name" #配置用户名
git config --global user.email "your email" #配置email
Git 本地操作
本地仓库的创建和使用
- .定位到指定的位置,初始化仓库
git init
- 创建了一个空仓库,仓库本身是抽象,使用目录进行模拟,该目录下有一个隐藏的目录.git[仓库]。.git是用来跟踪管理仓库的,不要手动修改其中的内容。
- 修改文件【创建,删除,内容的增加和删除】后,添加改动到缓存区
git add xxx
- 提交到仓库
git commit -m "提交的日志"
- 一定要书写提交日志,方便后期可以回退版本 。
- 可以执行多次 add,执行一次 commit,每次只要使用 commit 命令,就相当于产生了一个历史版本。
- commit 成功之后,会有信息提示 changed【改动】 insertion【插入】 deletion【删除】。
- add 指的是将改动添加到缓存区,commit 指的是将缓存区的内容提交到仓库,目的为了保证本地的文本和仓库之间的同步。
查看信息
查看状态
查看本地目录和仓库之间是否同步:
git status
查看版本号:
git log # 显示详细版本信息,包括改动人,时间,版本提交信息
git log --pretty=oneline # 显示 完整版本号,版本提交信息
git log --oneline # 显示简略版本号,版本提交信息
git reflog # 查看git中执行过的命令,可以确认当前版本。
查看修改
git diff
- 只能查看add之前本地文件的修改
版本回退
丢弃工作区改动
使用 git checkout 丢弃工作区的改动。
(1)如果工作区的文件提交到缓存区,则恢复为缓存区中的状态 :
git checkout <文件>
(2)如果工作区的文件未提交到缓存区,则恢复为仓库中某个版本的状态:
git checkout HEAD -- [文件]
- 使用 '--' 来分隔版本和路径,例如:git <命令> [<版本>...] -- [<文件>...]
取消暂存
使用 git reset 取消暂存
(1)取消暂存。默认为全部暂存区的文件,即等于 git reset * ,也可指定文件:
git reset <文件>
(2)拉取某个版本库的文件到暂存区 并且该操作不影响工作区:
git reset HEAD <文件>
- 可继续使用 git checkout [文件] 直接恢复到本地。
- 注意 HEAD 不能是最新版本即 HEAD,因为把最新版本拉取到暂存区,没有意义,暂存区是存放改动的地方,不能存放没有改动的文件。
(3)改动了工作区,进行了add,也进行了commit,这时候就需要 回退版本 了:
git reset --hard HEAD^
删除文件
删除文件对于git而言,被认为是一个修改
- 删除工作区中的文件
rm -rf filename
- 删除版本库中的文件
git rm filename
- 将删除的修改提交到版本库
git commit -m "xxx"
忽略监控
进入git管理的项目文件夹中,创建 .gitignore 文本,就可以在该文本中设置要忽略的文件了。【 .gitignore 】这个文件本身会提交到版本库中去。用来保存的是公共的需要排除的文件。
如果.gitignore忽略规则创建于文件提交代码库之后,则.gitignore规则不会影响目前所提交的文件(不会自动把文件从服务器端删除掉)。需要手动删除,用如下的方式:
git rm --cached <FILENAME> -f
git rm --cached <DIR> -r
- 文件.gitignore的格式规范:
- #为注释
可以使用shell所使用的正则表达式来进行模式匹配
匹配模式最后跟 "/" 说明要忽略的是目录
使用 !取反。例如目录中包含 test.a,并且 .gitignore 文件中包含 *.[oa],如果在文件中加入 !test.a 表明忽略除 test.a 文件以外的后缀名为 .a 或者 .o 的文件)
示例:
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
GitHub 远程操作
从 GitHub 克隆项目到本地
- 到GitHub的某个仓库,然后复制右边的有个“HTTPS clone url”。 回到要存放的目录下,使用命令
git clone https://github.com/.....git
- 如果本地的版本不是最新的,可以使用命令
git fetch origin # origin是本地仓库
- 把更新的内容合并到本地分支,可以使用命令
git merge origin/master
git pull <本地仓库> master # 这个命令可以拉取最新版本并自动合并
从本地上传到 GitHub
- 进入要所要上传文件的目录输入命令
git init
- 创建一个本地仓库 origin,使用命令
git remote add origin git@github.com:yourName/yourRepo.git
- youname 是你的 GitHub 的用户名,yourRepo 是你要上传到 GitHub 的仓库,远程仓库名最好和本地仓库名保持一致。
- origin 表示的是远程仓库中的主分支,对应的是本地仓库中的 master,origin 可以是别的名称,但是建议使用 origin。
- 添加文件xxx到远程仓库,使用命令
git add xxx # 添加缓冲到本地的仓库
git commit -m "提交说明" # 正式提交到本地的仓库
git push origin master # 提交到远程的GitHub仓库
- 可以执行多次add,执行一次commit,每次只要使用commit命令,就相当于产生了一个历史版本。
Git的分支管理
存亡和切换
- 创建一个本地分支:
git branch <新分支名字>
- 切换到新建立的分支:
git checkout <新分支名>
- 从本地删除一个分支:
git branch -d <分支名称>
查看分支
- 查看当前仓库有几个分支:
git branch
管理分支
- 将本地分支同步到GitHub上面:
git push <本地仓库名> <新分支名>
- 为你的分支加入一个新的远程端:
git remote add <远程端名字> <地址>
- 同步到GitHub上面删除这个分支:
git push <本地仓库名> :<GitHub端分支>
- 将子分支合并到主分支
git merge <子分支>
Git 初识和使用的更多相关文章
- git初识
下载网上的开发员的项目 git clone https://github.com/xxxxxx/test.git 下载好,进入刚下载的好的test项目目录,可以修改对应的代码,然后 git statu ...
- 分布式版本控制系统Git-----1.Git 初识
开始工作咯,师傅让我开始学习Git.刚接触我是懵逼的,"分布式版本控制系统"啥玩意啊这是,大家可不能从字面意思上理解啊,刚开始,版本控制么,我以为是团队合作的时候把开发工具.JDK ...
- Git初识学习
初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 使用命令git add <file>,注意,可反复多次使用,添加多个文件: 使用命令git commit ...
- Git学习笔记(一)Git初识及基本操作
详细完整教程:官方文档,廖神Git教程,武sir 一.什么是Git? 定义:Git是分布式版本控制系统. 1.1什么是版本控制 我们可以回想以下,在我们上学毕业要写论文或是准备一份演讲稿的时候,都会用 ...
- git 初识
现在平时用的都是SVN,感觉还是挺好用的.就是有的时候解决冲突的时候有点麻烦.但这样也是不可避免的. 今天看来下GIT,同样是版本控制,GIT的原理,和SVN还是不一样的.我个人的理解,SVN是对每个 ...
- Git详解之三 Git分支
相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...
- git与代码托管工具
1.git初识 git是一个版本管理工具,用来管理项目的不同的版本,记录下不同的提交记录,git还可以构建不同的分支,用来给不同的人来推送使用. 推荐的git教程:https://www.cnblog ...
- git基本操作-长期维护
############### 初识git ############## """ git初识: 1,git是什么?git是一个帮助用户版本控制的软件, 2,g ...
- git 入门教程之初识git
初识 git git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 背景 我们都知道,Linus 在1991年创建了开源的linux系统,随着不断发展壮大,目前已发展成为最大 ...
随机推荐
- 【死磕 Java 基础】 — 谈谈那个写时拷贝技术(copy-on-write)
copy-on-write,即写时复制技术,这是小编在学习 Redis 持久化时看到的一个概念,当然在这个概念很早就碰到过(Java 容器并发有这个概念),但是一直都没有深入研究过,所以趁着这次机会对 ...
- 数据增广imgaug库的使用
记录一下这两天用imgaug库做数据增广的代码,由于是算用算学的,所以只能把代码写出来,具体每种增广算法的原理和一些参数就不得而知了,不过我觉得也没必要把这么些个算法搜搞懂,毕竟重点是扩种数据.所以, ...
- windows的基本命令和环境配置
刚开始学的时候整理的基本知识 一.windows的基础知识: 1.常用的DOS命令 盘符切换: D: 回车 进入目录: cd xxx 回退目录 返回到上一级: cd .. 返回到根目录: cd / ...
- NOIP 模拟 $12\; \text{简单的填数}$
题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...
- 题解 Game
传送门 一有「字典序最大」什么的的就懵了--这题我颓的std 首先可以发现全局最大得分很好统计,我们令它为 \(k\) 然后我们尝试构造方案,但发现无论怎么放都可能会有后效性 发现对于一个位置,可以放 ...
- Windows下安装RocketMQ
目录 前言 环境 具体操作 下载 环境变量配置 启动 关闭 生产.消费实例 RocketMQ Console 前言 项目中用到了延迟消息队列,记录下一win10下rocketmq的安装 环境 win1 ...
- 【HMC Core 6.0全球上线】图形计算服务新插件,助力高画质3D手游创新
HMS Core 6.0已于7月15日全球上线,本次新版本向广大开发者开放了众多全新能力与技术.其中华为图形计算服务(CG Kit)开放了体积雾插件和流体插件,为3D手游画面的提升提供了坚实的技术基础 ...
- adobe cc 系列产品更改默认安装路径方法
通过Adobe Creative Cloud 修改 1.在开始菜单中找到图下程序点开,并进行如下操作: 2.点击Apps位置 等待加载出软件,如图下所示. 点击右上角图标,会弹出以下窗口,点击首选项 ...
- Clusternet - 新一代开源多集群管理与应用治理项目
作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公 ...
- 六:使用Cookie进行会话管理
1.存储客户端的状态 因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器 记住客户端状态 2.会话技术 ...