GitHub版本控制使用(命令行实际操作图解Git使用方法)

Stella981
• 阅读 533

版权声明:本文为博主原创文章,未经博主允许不得转载。

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目

Git的优势: (说到优势,那么自然是相对与SVN而言的)

  1. 版本库本地化,支持离线提交,相对独立不影响协同开发。每个开发者都拥有自己的版本控制库,在自己的版本库上可以任意的执行提交代码、创建分支等行为。例如,开发者认为自己提交的代码有问题?没关系,因为版本库是自己的,回滚历史、反复提交、归并分支并不会影响到其他开发者。
  2. 更少的“仓库污染”。git对于每个工程只会产生一个.git目录,这个工程所有的版本控制信息都在这个目录中,不会像SVN那样在每个目录下都产生.svn目录。
  3. 把内容按元数据方式存储,完整克隆版本库。所有版本信息位于.git目录中,它是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。
  4. 支持快速切换分支方便合并,比较合并性能好。在同一目录下即可切换不同的分支,方便合并,且合并文件速度比SVN快。
  5. 分布式版本库,无单点故障,内容完整性好。内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git的安装方式在windows下安装需要下载一个git的软件,在Linux下相对方便,只需要一条指令,Git安装后的配置网上也有一堆的教程,就不详细说了。

下面说下Git的基本使用:

一、建立远程仓库: 
要使用git,首先得有一个远程仓库吧,下面是在自己的主页中新建一个远程仓库: 
ps:其中仓库类型要选择public(公开),私有的是要收费的 
GitHub版本控制使用(命令行实际操作图解Git使用方法)  
GitHub版本控制使用(命令行实际操作图解Git使用方法)

建立远程仓库之后会有这样一个页面,点击箭头所指按钮,拷贝仓库地址: (这个地址一会要用) 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

通过命令 git init 把当前目录变成git可以管理的仓库: 
首先创建一个文件,文件内容为111111 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

二、基本的推送功能: 
使用 git init 指令,这时候你当前 TestGit 目录下会多了一个 .git 的目录,这个目录是Git来跟踪管理版本的。 .git 文件夹里面的任何文件都不能动 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

首先使用 add 指令,将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,(在第一条指令前少了一个 git add file 命令) 
其次使用 commit 指令,提交当前工作空间的修改内容到本地版本库 
然后 remote 把本地版本库与远程仓库建立联系 
最后使用 push 指令,把本地版本推送到远端仓库 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

接下来使用 status 命令,查看本地提交情况,(下面是没有需要提交的) 
然后在文件的最后追加一行 222222 
使用 diff 指令,查看之前的文件与现在的文件有什么改变(文件增加了一行内容) 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

再次使用status指令查看提交状态,发现有一个文件做了修改,并且没有添加到Git索引中(因为状态是红色的) 
接着使用三步,再次把修改提交,并推送到远端仓库 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

三、版本回退: 
按照上面的步骤我们再在文件最后增加一行 “333333”;至此,我们已经做了三次修改,并且都推送到远端仓库中了,下面的图可以看出 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

现在我已经对文件file做了三次修改了,那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 log, 演示如下所示: 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

精简的日志信息,可以使用 git log –pretty=oneline 指令 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

现在我发现刚提交的添加的333333有问题,我想回到添加333333之前的状态,也就是只有 111111 222222这两行的状态,可以使用 reset 指令 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

再次查看提交日志,发现提交333333 的日志没了,这个时候 file 中已经没有333333了 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

但是现在的问题假如我想回到只有111111的状态,可以通过 git reset –hard HEAD^^,这不是很笨吗?或者 
我发现之前的333333是有用的,我有怎么回到有333333的状态呢? 
这时候可以通过 reflog 指令获得每次提交的版本号,演示如下: 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

git reset –hard 版本号 ,回退到任意一次提交状态 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

下面是 log 与 reflog 的区别:可以看到 log 只能查看 commit(提交)记录,并不是所有记录,而 reflog 指令可以查看版本库的任何记录,包括回退记录 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

如果在 commit 之前,想要返回之前的状态,可以使用checkout指令 
具体用法如下: 
1、例如在file后面追加一行444444, file被修改后,还没有使用add命令添加到Git索引中 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

使用 git checkout – file (file是想要回退的文件,可以换成其他的) 把修改除去。 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

2、再次在 file 尾部添加 444444, 并且使用了 git add 之后 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

checkout 之后,修改并没有消失 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

再次添加 555555 
GitHub版本控制使用(命令行实际操作图解Git使用方法)  
GitHub版本控制使用(命令行实际操作图解Git使用方法)

没办法了,只有提交了 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

提交之后还可以回退到没有 444444 的版本: 
GitHub版本控制使用(命令行实际操作图解Git使用方法)  
GitHub版本控制使用(命令行实际操作图解Git使用方法)  
当然除了这一种办法,还可以在 commit (提交)之前,自己在file中把 444444 删除了,然后再 commit 一次就可以了。

四、删除与恢复功能: 
新建一个 test 文件,把test推送到远程仓库中 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

新增了一个文件 test : 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

可以在工作区中直接删除 test 来测试: 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

使用 git checkout – test(已删除的文件名)来回复test: 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

再试试另一种不能恢复的删除方式:(删除之后提交一次,就彻底地把 test 从版本库中删除了) 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

五、下载功能: 
在任意一个目录下(即使没有之前的 .git 版本库),可以使用 clone 指令,克隆任意一个存在的远程仓库到本地 
GitHub版本控制使用(命令行实际操作图解Git使用方法)

下面大致总结一下上面讲到的指令:

git init 当前的目录变成可以管理的git仓库,生成隐藏.git文件。 
git add XX 把xx文件添加到暂存区去(XX可以使 单独的一个 . 表示添加工作区所有文件) 
git commit –m “XX” 提交文件 XX是这次提交的注释。 
git status 查看仓库状态 
git diff XX 查看XX文件修改了那些内容 
git log 查看历史记录 
git reset –hard HEAD^ 或者 git reset –hard HEAD~ 回退到上一个版本 
(如果想回退到100个版本,使用git reset –hard HEAD~100 ) 
git reflog 查看历史记录的版本号 
git checkout – XX 把XX文件在工作区的修改全部撤销。 
git rm XX 删除XX文件 
git remote add origin https://github.com/用户id/远程仓库名.git 关联一个远程库 
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库 
git clone https://github.com/用户id/远程仓库名.git 从远程库中克隆到本地

Git的使用还用其他很多方面,这里只是列举了一些常用的指令,其他的指令我也在学习中,如果有什么不对的地方,欢迎大神留言指正,非常感激。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
将远程远程仓库代码更新到本地仓库

有时候在使用git pull的时候,会莫名才报错。查了很多资料,尝试过git的很多命令。包括git fetch命令,都会报同样的错。最后终于发现了一条捷径,由网友提供,

当从远程的仓库到本地出错时候,使用git stash效果更佳。

方法:

git stash

git pull

这样就可以更新远程仓库到本地了~

注:文章转载自:http://blog.csdn.net/chengzi_comm/article/details/51673802 转载文章目的仅用作学习无商业用途。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这