【Git】四、Git工作
一、Git创建仓库
版本库:代码仓库(repository),可以理解为一个项目的目录,在这个项目的目录中Git对每个文件进行管理,记录每个文件的增删改查记录,并能够追踪历史,在需要的时候可以回退到某个“历史瞬间”。
可以通过 Git init 命令来初始化代码仓库,将一个目录初始化为一个Git可以管理的仓库。
也可以通过 Git clone <url> 将 <url> 中的代码仓库拷贝到本地。
二、基本操作
基本操作按照操作流程来介绍,Git的操作流程分为以下几个
1. 将修改的文件添加至暂存区
2. 查看暂存区修改状态
3. 将暂存区修改的文件提交至版本库
4. 查看近期提交状态
5. 回退到相应的历史时刻
1. 将修改的文件添加至暂存区
通过 Git add 命令将工作区的文件添加至暂存区。
2. 查看暂存区修改
将修改的文件添加至暂存区,如果要查看我修改了哪些文件的话,可以通过 Git status 命令查看 查看项目的当前状态,查看上次提交有没有修改。
通过对工作区文件修改之后 Git status命令显示结果如下
这样看到的只是我修改了哪个文件,那么要查看修改了什么内容就需要用到 Git diff <fileName> 命令,通过Git diff命令结果显示如下
通过该命令可以看到我对文件进行了怎么样的修改,当然这种对比只能对比文本文件类文档,像Word,图片之类的文件是不能通过该命令对比的。
3. 将暂存区文件提交至版本库
当我们将修改好的文件提交至暂存区,并确定修改无误之后,我们需要将暂存区的文件提交至版本库,这个时候需要用到 Git commit -m "annotation" 进行提交, -m "" 是添加本次提交的注释
注意:提交只是将暂存区文件提交至版本库,如果你是将文件添加至暂存区之后进行了二次修改并没有将文件二次加入暂存区,那么二次修改的内容是不会提交的。
4. 查看近期提交状态
现在已经将一次修改提交到了版本库中, 那么我要看一下我最近都是进行了什么修改,那么可以通过 Git log 来查看近期提交的记录
5. 回退到相应的历史时刻
那么可能会出现这种情况
1) 如果我不小心将工作区的文件修改乱了而且还原起来不太容易,我想把文件回退到原来的样子
通过 Git checkout -- <filename> 来讲工作区的文件回退到上一次 git commit 或 Git add 状态
如果只是在工作区修改了,并没有通过 Git add 添加到暂存区 可以通过 Git checkout -- filename 来还原工作区文件
如果在工作区修改了,并且通过Git add命令添加至暂存区,那么首先要清理暂存区文件,然后在通过 Git checkout -- filename 来还原工作区文件
通过 Git reset HEAD <filename> 来清理暂存区文件
2) 我需要删除一个文件
首先在文件夹中删除时会导致工作区和版本库中文件不一致,那么有分为以下两种情况
一、我需要删除版本库中的文件
通过 Git rm <filename>,然后 Git commit 来移除版本库中文件
二、我需要还原文件
通过 Git checkout -- <filename> 来还原文件(该命令是用版本区的文件替换工作区的文件)
3) 我要回退到某个版本
首先,我们可以通过Git log 命令来查看最近的提交记录
其中 commit 后面的一长串字符串是版本号(因为是分布式,所以和SVN的1,2,3不一致),列表是从最近开始往前列举了提交记录,如果我们要回退到上个版本,需要使用 Git reset --hard HEAD^
可以看到版本已经回退到 a10aef5 可以在上面列表中看到,回退到了上个版本,
分析一下这条命令, HEAD 表示的是当前的版本,HEAD^表示的是上个版本,HEAD^^表示上上个版本。 也可以使用 Git reset --hard <ID>(版本号,可以不用写全,Git会自己寻找,只要保证找到的唯一即可)
当然也会出现这种状况,如果我需要回退到新的版本怎么办?在git log中已经找不到之前版本的版本号了。
这时候就要祭出git reflog 这条命令了,这条命令记录了你所有的命令操作。
这个时候我们可以看到之前的版本号了,使用git reset --hard id 来回退到新的版本。
三、标签
对于标签,我的理解是一个别名,类似于IP于域名之间的关系,由于IP不好记忆,我们就采用了IP与域名之间进行一对一关系,我们可以记忆简单的域名,标签也是类似,由于版本号不好记忆,所以我们采用版本号与标签一对一关系,记忆简单的标签。
首先,我们来给一个版本打上标签,使用git tag <name> <版本号> 来打上标签,如果没有版本号,默认当前版本
要查看所有的标签可以使用 git tag 命令
git show <tagname> 查看tag详细信息
如果打错了标签,可以使用 git tag -d <tagname>
四、分支管理
分支管理:如果需要完成一个功能需要一段时间,但是没完成之前提交会导致其他人不能正常工作,如果最后一次提交又存在丢失每天进度的风险。那么我们可以新建另外一个分支来进行修改。
首先我们明确 HEAD 指向的是主分支 matser, 而master指向的是当前版本
如果我们需要新建一个分支
然后HEAD指针指向子分支Dev,
那么我们可以直接修改Dev分支,如果需要合并的话,就提交Dev分支就好
然后删除Dev分支
下面开始说明如何进行操作
首先创建一个分支 git branch dev
然后切换到dev分支 git checkout dev
也可以通过 git checkout -b dev 一条命令完成。
我们要查看当前工作的分支时,采用命令 git branch
其中 当前工作的分支前有 “*”
当我们在这个分支写完之后,我们需要合并两个分支,采用命令git merge <dev> (用于合并指定分支到当前分支)
合并之后,我们就可以删除dev子分支 git branch -d <branchname>
五、远程库
git 是分布式的,也就是说,可以将版本库放在不同机器上,我们来简单介绍一下如何将代码存储到远程代码仓库github
首先,我们需要在github上创建代码仓库:
本地连接远程仓库:git remote add origin <url>
向远程服务器推送 : git push -u origin master
这样就可以将本地仓库推送到服务器中。
【Git】四、Git工作的更多相关文章
- Git(四):Git远程操作详解
转: http://www.ruanyifeng.com/blog/2014/06/git_remote.html Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多 ...
- 完整学习git四git对象
1查看git对象 git cat-file 实践 git head到底指向的是什么 ➜ gittest git:(master) find .git -name HEAD -o -name maste ...
- git概念及工作流程详解
git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...
- Git 主要的工作流程
Git使用个进制字符的SHA- Hash来唯一标识对象 如:e98757d0598ab6eeaf1df0d87dd00826048bd80b git 有种对象 1.blob 表示文本文件,二进制文件或 ...
- 同时在多个 Git 分支上工作,老板要榨干我
背景 上一篇文章 保持清洁的Git提交记录,三招就够了 ,大家看过后有私下留言说这是非常好用的功能,我突然想到工作中用到的另外一个 Git 功能那也是相当好用,必须全盘托出 作为程序员的我们应该都有一 ...
- 第七节《Git协议与工作协同》
Git提供了丰富的协议支持,包括:SSH.GIT.HTTPS.FTP.FTPS.RSYNC,这些协议可以分为两类:智能协议和哑协议. <1>智能协议 在会话时使用智能协议,会在会话的两个版 ...
- 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程
1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...
- Git基本命令 -- 基本工作流程 + 文件相关操作
可以先找一个已经被git管理的项目, 我就使用这个项目吧: https://github.com/solenovex/ID3-Editor 基本工作流程 克隆以后呢, 进入该目录查看一下状态: 然后添 ...
- git命令行工作环境配置【转】
转自:http://www.cocoachina.com/ios/20171115/21163.html 本文为CocoaChina网友whf5566投稿 前言 笔者一直使用git的图形化工具sour ...
- 使用plumbing命令来深入理解git add和git commit的工作原理
前言: plumbing命令 和 porcelain命令 git中的命令分为plumbing命令和porcelain命令: porcelain命令就是我们常用的git add,git commit等命 ...
随机推荐
- HALCON之喷码OCR识别案例
一个喷码识别的案例 1 read_image (Image, 'D:/用户目录/Desktop/2.png') 2 3 rgb1_to_gray(Image, Image) 4 5 get_image ...
- VS2017打包安装程序
VS2017 并不自带安装部署项目,需要在[扩展和更新]中安装插件:Microsoft Visual Studio 2017 Installer Projects(现更名为Microsoft Visu ...
- IE兼容BUG汇总及解决方案(持续更新)
本篇为总结开发过程当中遇到的各种IE兼容性的小问题,比较复杂的会单开一篇文章来讲解. 另:我手头目前只有原生IE8,原生IE9,原生IE11,以及IE11模拟的IE5,7,8,9,10.因IE6太过古 ...
- 201621123005《Java程序设计》第六次学习总结
201621123005<java程序设计>第六周学习总结 1.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对 ...
- grub2 详解
grub2详解(翻译和整理官方手册) 分类: Linux 基础篇,Linux 杂项 本文原创地址在博客园:https://www.cnblogs.com/f-ck-need-u/archive ...
- protel99 se中出现许多Backup of 文件,修改过保存时,总会出现备份文件,怎么才能取消这一设置?
在file选项左边有个向下的大箭头标示 点开 有个prefereces项 点开之 把create backup项勾掉即可
- maven项目目录结构 学习笔记
maven的约定 1.src/main/java--------------------------------存放项目的.java文件 2.src/main/resources----------- ...
- [UOJ213][UNR #1]争夺圣杯
uoj description 一个长为\(n\)的序列,给定一个参数\(m\),求所有长度为\(m\)的区间的最大值之和. 对于所有的\(m\in[1,n]\)你都需要分别求出答案然后异或起来. \ ...
- 【网络通信】TCP三次握手和四次挥手的示意图
三次握手 TCP连接是通过三次握手来连接的. 第一次握手 当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为m,等待服务器确认,这时客户端的状态为SYN_SE ...
- linux nginx不区别大小写处理方法
# 把所有的目录及文件名全改成小写,注意之后新增目录及文件只使用小写命名 递归转换目录或文件名方法:python把指定目录下的递归所有目录和文件名转换成小写或大写(http://www.cnblogs ...