文章目录

  • 一、Git 和 SVN 的对比
  • 二、Git 的使用
    • 2.1 创建版本库
    • 2.2 工作区和暂存区
    • 2.3 版本回退
    • 2.4 撤销修改
    • 2.5 删除文件
    • 2.6 远程仓库

一、Git 和 SVN 的对比

Git是分布式版本控制系统,而SVN是集中式版本控制系统,那么两者有什么区别呢?

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

集中式版本控制系统最大的毛病就是必须联网才能工作。

分布式版本控制系统没有"中央服务器",每个人的电脑都是一个完整的版本库,这样就不用联网才能工作,既然每个人的电脑上都有一个完整的版本库,那么多人是如何协作的呢?双方只需要将自己的修改push给对方即可。和集中式版本控制系统相比,分布式版本控制系统的安全性更高,因为每个人的电脑都有自己的版本库,一个人的电脑坏了,从其他人复制过来即可。而集中式版本控制系统的中央服务器若是挂了,则所有人都不可以工作了。

而在实际使用分布式版本控制系统的时候,通常也需要一台"中央服务器"的电脑,这个服务器的作用仅仅是用来方便"交换"大家的修改。

当然,Git的优势不单是不必联网这么简单,Git强大的分支管理将SVN远远甩开。不过,现在依旧还是很多公司在使用SVN,但是技术的不断更新是不可避免的。

二、Git 的使用

2.1 创建版本库

什么是版本库呢?版本库又名仓库(repository),可以理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能追踪,以便任何时刻都可以追踪历史,或者在将来的某个时刻可以"还原"。

# 创建一个空目录
mkdir learn#进入该目录
cd learn# 初始化版本库
git init# 创建并编辑文件
vim readme.mdgit is the best version control soft# 添加到暂存区
git add readme.md# 提交到本地库
git add -m "first commit" readme.md

第一次提commit可能会报fatal: unable to auto-detect email address,需要执行以下命令添加全局属性:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

2.2 工作区和暂存区

当前我们能看到的目录learn就是工作区。

工作去有一个隐藏目录.git,这个就是Git的版本库,Git的版本库存了很多的东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

2.3 版本回退

提交成功后,我们使用git status命令查看工作区的状态:

$ git status
On branch master
nothing to commit, working tree clean

修改readme.md后,再次使用git status查看状态:此时会提示我们有未提交的文件readme.mdGit有着丰富的提示功能来引导我们去执行下一步。

$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   readme.md

使用git diff可以查看和已提交的文件的差异:这里提示我们有添加新的一行i want to use git rather than svn

$ git diff readme.md
warning: LF will be replaced by CRLF in readme.md.
The file will have its original line endings in your working directory
diff --git a/readme.md b/readme.md
index 62b4535..61ff15d 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,2 @@git is the best version control soft
+i want to use git rather than svn

commit后该文件,我们可以使用git log查看每次修改的基本信息:

$ git log
commit 91a1989071919b0d52e1b77c6f8f397f01d6a2ca (HEAD -> master)
Author: hucheng <hucheng@gmail.com>
Date:   Sat Nov 2 14:48:13 2019 +0800second commitcommit d7ee8048dc525a2dfa3be193a1f5485b8206d2c4
Author: hucheng <hucheng@gmail.com>
Date:   Sat Nov 2 12:15:09 2019 +0800first commit

使用git log --pretty=oneline可以获取更简洁的信息:

$ git log --pretty=oneline
91a1989071919b0d52e1b77c6f8f397f01d6a2ca (HEAD -> master) second commit
d7ee8048dc525a2dfa3be193a1f5485b8206d2c4 first commit

我们可以看到91a...是版本号(commitId) ,这个数字是经过sha1算出来的,每提交一个版本会生成一个commitIdGit会将所有的commitId依次自动串成一条时间线。当前的版本为91a...,我们可以使用git reset --hard commit_id跳转到指定的版本:

$ git reset --hard d7ee8048dc525a2dfa3be193a1f5485b8206d2c4
HEAD is now at d7ee804 first commit

如果要重返未来,我们可以使用git reflog查看未来的历史版本的commitId

$ git reflog
d7ee804 (HEAD -> master) HEAD@{0}: reset: moving to d7ee8048dc525a2dfa3be193a1f5485b8206d2c4
91a1989 HEAD@{1}: commit: second commit
d7ee804 (HEAD -> master) HEAD@{2}: commit (initial): first commit

2.4 撤销修改

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  1. readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
  2. readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态

总之,使用git checkout -- file这种方式只能撤回到添加到暂存区之前。如果添加到暂存区后,只能使用git reset版本回退,如果已经push到远程仓库,那么不能撤回了,只能修改后再push

2.5 删除文件

添加一个新的文件test.txt,并提交到工作区。使用rm test.txt删除后,使用git status发现出问题了。使用git restore test.txt命令可以撤销删除。

若是要删除文件,使用git rm text.txt,然后git commit -m "msg"这样才能正确的删除。

2.6 远程仓库

公司中常常会自己搭建Gitlab作为远程的代码托管中心,个人用户使用GitHub就足够了。注册GitHub后,因为本地仓库和GitHub仓库的传输是经过SSH加密的,我们需要生成rsa公钥和私钥并将公钥给GitHub

WindowGit Bash输入命令:ssh-keygen -t rsa -C "youremail@example.com",会在用户目录下的.ssh文件夹下生成公钥和私钥,点GitHub头像->Setting->SSH AND GPG keys->New SSH KEY,将公钥id_rsa.pub添加到其中。

添加远程库:点GitHub头像->Your repositories->New输入信息后点击create repository即创建了GitHub远程仓库,在创建了GitHub仓库后,它提示我们无本地库和有本地库的做法。

这里我们这里已经存在本地库了,我们使用git remote add origin https://github.com/hucheng1997/learn.git将本地库和远程库关联起来,,然后使用git push -u origin master第一次推送master的所有内容,以后我们只需要使用git push origin master推送修改即可。注:第一次push可能需要登陆GitHub账号。

分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步。

克隆远程库:执行git clonehttps://github.com/hucheng1997/learn.git即克隆了远程库。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

版本控制工具Git的使用(一)相关推荐

  1. iOS系列开发-版本控制工具Git的使用

    iOS系列开发-版本控制工具Git的使用 作为一个开发者,与团队之间默契的配合是很重要的,我们所写的代码在无论是在公司还是在个人来说都是一份不可随意丢弃的东西,但是如果只是单纯的开发,我们很难做到今天 ...

  2. Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】

    文章目录 一.前言 二.有关git的相关历史介绍 三.Git版本管理 1.感性理解 -- 大学生实验报告 2.程序员与产品经理 3.张三的CEO之路 -- 版本管理工具的诞生 四.如何在Linux上使 ...

  3. 版本控制工具Git 常用操作命令

    2019独角兽企业重金招聘Python工程师标准>>> Git 是用于Linux 内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式 ...

  4. window下版本控制工具Git 客户端安装

    软件开发好久,突然才发现还有git,没有用过. 安装使用 1.下载msysgit http://code.google.com/p/msysgit/ 2.下载tortoisegit客户端安装 http ...

  5. 版本控制工具Git(完美整理版)

    版本控制Git 一.Git是什么 版本控制工具!Git是目前世界上最先进的分布式版本控制系统(没有之一). 这个软件用起来就应该像这个样子,能记录每次文件的改动 这样,你就结束了手动管理多个" ...

  6. 版本控制工具Git详细介绍和常用命令

    一.安装Git 在linux系统使用非常方便,只需要打开shell界面,并输入: sudo apt-get install git-core 按下回车后输入密码,即可完成Git的安装.但我们可能更多情 ...

  7. Git分布式版本控制工具(Git命令基本操作)

    1.目标 了解Git基本概念 能够概述git工作流程 熟悉Git代码托管服务 能够使用Git常用命令 能够使用idea操作git 了解Git标签 了解SSH协议传输数据 2.概述 2.1 .开发中的实 ...

  8. 分布式版本控制工具----git

    分布式版本控制工具 版本控制 版本控制的功能 版本控制分类 git简介 git优势 git安装 git结构 代码托管中心 代码托管模式 git操作 git 分支(45minutes) 分支操作 git ...

  9. 分布式版本控制工具Git的安装

    git分布式版本控制工具 本地仓库,远程仓库(github,gitee) 下载地址:https://git-scm.com/ 速度超级慢-23k/s 换成Git下载国内镜像地址 https://npm ...

  10. 版本控制工具 --- Git 详解

    文章目录 一.简介 二.Git 与 SVN 区别 三.Git 命令 git 配置文件 git 基本使用 git 远程仓库 git 标签 git 分支 服务器创建 git 仓库, 并将其作为远程仓库 g ...

最新文章

  1. R构建幂回归模型(Power Regression)
  2. sql server 常用的扩展存储过程
  3. 30分钟掌握 C#6
  4. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(1)
  5. Kraft 0.50 发布,小型文档管理程序
  6. oracle语法和sql的区别吗,ORACLE和SQL语法区别归纳
  7. 树莓派2 利用网卡进行无线网破解
  8. oracle时间去掉时分秒的时间_超详细的oracle修改AWR采样时间间隔和快照保留时间教程...
  9. iOS 审核之 Performance - 2.5.2 被拒 dlopen(), dlsym(), respondsToSelector:, performSelector
  10. 基于SSM车牌识别停车场管理系统
  11. 支持向量机原理小结(3)——核方法和非线性支持向量机
  12. html设置ie9兼容性视图,ie9兼容性设置在哪里 IE兼容性视图在哪里设置?
  13. 使用kafka-reassign-partitions.sh重新对topic分区,ReplicationFactor由1变成3
  14. 【精华】龚祖春奋发改进企业的风格
  15. PCB设计--AD18导入二维码避坑指南
  16. qa158.cn kuais.php,qukuaigou.skhjcf.com
  17. 将文件复制到FTP服务器时发生错误。 的解决办法
  18. HTML5快速入门(一)—— HTML简介
  19. Flask-peewee-pyjwt实现简单的用户接口
  20. php面试英文自我介绍范文,英文自我介绍范文分享

热门文章

  1. Gitlib团队开发仓库配置
  2. 政工师计算机考试题,2011年天津政工师计算机考试(高级)基础知识部分B卷.doc
  3. android button背景图片变形,按钮背景图像拉伸(wrap_content或dp使用)
  4. hive导入txt文件
  5. 在国内各大软件下载网站上,“万能数据库查询分析器”已更新至 2.02 版本
  6. 【JAVA基础】初学者指南--两万字知识点总结--零基础,超详细 。
  7. 记录微信开发生成测试签名--signature,并使用微信jssdk屏蔽分享
  8. 美国对H1B痛下黑手,加拿大数万科技岗公开抢人
  9. 上篇博文的终端命令记录,以供查阅
  10. matlab三维图设置图例,[转载]Matlab三维彩图Colormap设置