深入学习:Windows下Git新手教程(上)
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/huangyabin001/article/details/35557231
一,安装Git:
1.1Linux上安装命令:
sudo apt-get install git
1.2在Windows上安装Git:
使用Windows版的msysgit,官方下载地址:http://msysgit.github.io/,点击进入官网,假设官网无法正常下载我这里有当前的最新版,已经上传到CSDN上,下载地址为:http://download.csdn.net/detail/huangyabin001/7564005,点击进入下载
1.3安装完毕进行配置:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
由于Git是分布式版本号控制系统。每一个机器都须要一个标识,也就是:你的名字和Email地址。
二。创建版本号库
2.1创建资源库所在的文件夹,命令:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
pwd命令用于显示当前文件夹完整路径,为了避免各种问题我们尽量避免路径命中出现中文字符。
2.2通过git init命令把这个文件夹编程GIt能够管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
。注意:版本号控制系统仅仅能跟踪文本文件的改动,比如txt文件、网页和全部的程序代码。
版本号控制器能够告诉你你的每次改动,可是图片、视频等二进制文件没办法跟踪,仅仅知道文件大小的改变。在Windows下word格式也是二进制文件,因此我们假设要真正使用版本号控制系统,就要以纯文本方式来编写文件,而且强烈建议使用标准的UTF-8编码。而且编辑文本文件我们推荐Notepad++,并要记得设置默认编码为UTF-8 without BOM.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmd5YWJpbjAwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
2.3加入文件到资源库
第一步:我们新建一个文本文件到我们的资源库learngit文件夹下。
第二步:试用git add命令告诉GIt。把文件加入到资源库
$ git add test.txt
运行命令后,没有提示信息。
第三步:用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a test file"
说明:运行上述命令会打印提示信息如:
[master (root-commit) 3b15333] wrote a test file
1 file changed, 1 insertion(+)
create mode 100644 test.txt
git commit命令:-m后面输入的是本次提交的说明,能够输入随意有意义的内容。这样方便从历史记录中找到改动记录。
此外。我们能够同一时候加入非常多文件。一起提交,比如:
$ git add file1.txt
$ git add file2.txt
$ git add file3.txt
$ git commit -m "add 3 files."
三,版本号回退
3.1改动文件
原始文件里的内容为:this is my first time to use Notepad++;
在原始文件里加入新的内容为:Add a new line。
3.2使用git status命令查看状态:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working d
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
运行git status命令,会打印提示消息。
上述提示消息中告诉我们文件被改动,并没有提交。
3.3使用git diff命令查看详细改动内容;
$ git diff
diff --git a/test.txt b/test.txt
index d829b41..d6e3bba 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
-this is my first time to use Notepad
\ No newline at end of file
+this is my first time to use Notepad
+Add a new line。 \ No newline at end of file
3.4使用git add test.txt 命令和git commit -m “add a new line.”提交改动。然后在文本中新加入内容“add a new line again”,以上述命令又一次运行一边。
3.5使用git log查看改动记录。
$ git log
commit 4e8b0d0aaa685a83fb96fe52997e5af1e9e541ce
Author: bill <huangyabin001@163.com>
Date: Sat Jun 28 13:48:29 2014 +0800
add a new line again
commit d4d025a1cffaa761a7b82f39551465f7610a82db
Author: bill <huangyabin001@163.com>
Date: Sat Jun 28 13:47:43 2014 +0800
add a new line
commit 3b15333fdbb147f183a9d3013eadfafc9b05b127
Author: bill <huangyabin001@163.com>
Date: Sat Jun 28 13:18:15 2014 +0800
wrote a test file
上述命令git log运行后会打印出详细日志信息。
从上述信息中我们能够得到每次提交的记录。记录中包括提交的描写叙述性信息比如“wrote a test file”,提交时间。提交人的详细信息等。而“commit
3b15333fdbb147f183a9d3013eadfafc9b05b127”则是我们每次提交的提交版本号号,也称之提交的记录ID。
假设我们不须要提交人,提交时间等信息,我们也能够以一种更简洁的方式查看日志,仅仅须要加上“--pretty=online”參数就可以。
$ git log --pretty=oneline
4e8b0d0aaa685a83fb96fe52997e5af1e9e541ce add a new line again
d4d025a1cffaa761a7b82f39551465f7610a82db add a new line
3b15333fdbb147f183a9d3013eadfafc9b05b127 wrote a test file
3.6使用git reset命令回退版本号
在工作其中,我们不可避免的使用回退版本号,比如一个模块负责人提交了一部分代码,在项目负责人发编译公布版本号前离开了工作岗位,项目负责人在编译公布版本号的时候发现模块负责人工作失误造成项目无法编译通过。为了不耽误整个版本号公布的工作。负责人不得不回退版本号。
$ git reset --hard HEAD^
HEAD is now at d4d025a add a new line
上述命令中Head在Git中的概念是一个指向你正在工作中的本地分支的指针(能够把HEAD想象为当前分支的别名),其所相应的分支本质是个指向commit对象的可变指针。截止到眼下的学习中,在我们若干差提交后,我们已经有了一个指向最后一次提交的master分支,它在每次提交的时候都会自己主动向前移动。
我们使用git log --pretty=oneline查看:
$ git log --pretty=oneline
d4d025a1cffaa761a7b82f39551465f7610a82db add a new line
3b15333fdbb147f183a9d3013eadfafc9b05b127 wrote a test file
这个时候我们发现记录中已经少了一条。而且打开文件也会发现。最后改动的内容已经不见了。
还拿上面的样例来说。假设项目管理员发现编译不能通过的原因不是模块负责人的误操作引起的,而是有其它原因引起的,而且当前须要公布的版本号中须要模块负责人的改动。可是版本号已经回退了,是否能再回退到回退前的版本号呢?
答案是肯定的。我们仅仅须要知道我们须要回退到的那个版本号号commit id就可以(比如当前的命令窗体没有关闭,我们能够轻轻滑动滚轴就能够看到之前的版本号号),或者知道前面一部分也能够。
$ git reset --hard 4e8b0d0
HEAD is now at 4e8b0d0 add a new line again
读者能够使用git log进行查看,是否已经回退成功。
可是假设当前的命令窗体已经关闭了,我们无法在命令窗体中查看我们之前打印的版本号号了怎么办?git也为我们提供了一个命令来记录我们每次运行的命令“git reflog”
$ git reflog
4e8b0d0 HEAD@{0}: reset: moving to 4e8b0d0
d4d025a HEAD@{1}: reset: moving to HEAD^
4e8b0d0 HEAD@{2}: commit: add a new line again
d4d025a HEAD@{3}: commit: add a new line
3b15333 HEAD@{4}: commit (initial): wrote a test file
上述提示信息中最前面的字符串即是我们须要的版本号号。
总结:我们在电脑中能够看到的文件夹,比如我们新疆an的文件夹learngit文件夹就是一个工作区。而隐藏文件夹.git是git的版本号库。在这个版本号中的index文件(stage)是一个非常关键的文件,我们称之为暂存区,git为我们自己主动创建的第一个分之master。以及指向master的一个指针称作HEAD。我们之前加入文件的操作“git add”。实际上是把文件改动加入到暂存区。而提交操作“git commit”则是把暂存区的全部内容提交到当前分支。 因此我们假设要提交改动,在提交前我们应该运行git
add命令,把改动的文件加入到暂存区。
四。撤销改动 git checkout
我们不能绝对的保证在日常的工作中不会出不论什么差错,假设我们在提交代码前发前发现有错误,可是我们没有运行了git add命令把改动的文件加入到了暂存区。那么是否能撤销此次改动呢?
答案也是肯定的。
$ git checkout -- test.txt
运行上述命令,没有不论什么提示消息。
而且我们也能够使用命令git reset HEAD file把暂存区的改动撤掉(unstage),又一次放回工作区。
git reset HEAD test.txt
五。删除文件
首先我们新键一个文件。并去删除它
假设我们没用把它提交到版本号库我们能够在文件管理器手动删除或者使用命令"rm 文件名称"的方式进行删除。而假设我们要删除版本号库中的文件我们能够使用"git rm 文件名称"的方式来操作。
$ git rm test1.txt
rm 'test1.txt'
六,远程仓库
我们知道Git是分布式版本号控制系统。同一个Git仓库。能够分不到不同的机器上。怎么分布呢?最早,有一台机器又一个原始版本号库。此后其它机器进行克隆原始的版本号,而且每台机器的版本号库版本号是一样的,没有主次之分。
而且我们能够在充当“server”的机器上进行克隆。也可在同一台机器上克隆多个版本号库,仅仅要不在同一个文件夹下就好。
6.1从“server”仓库克隆。使用github进行git存储
第一步:注冊GItHub帐号。GitHub官网地址:https://github.com/ ,点击打开。
第二步:创建SSH Key。
在用户主文件夹下,假设有.ssh文件夹,而且该文件夹下有id_rsa和id_rsa.pub这两个文件。(跳过下一步操作),假设没有在windows打开Git Bash(linux 下打开Shell)。创建SSH Key:
$ ssh-keygen -t rsa -C "huangyabin001@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/STAR/.ssh/id_rsa):
Created directory '/c/Users/STAR/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/STAR/.ssh/id_rsa.
Your public key has been saved in /c/Users/STAR/.ssh/id_rsa.pub.
The key fingerprint is:
1e:49:1e:a4:fa:38:65:0e:4c:41:20:df:67:a2:0c:bf huangyabin001@163.com
回车。使用默认设置就好。无需设置password。假设顺利在用户主文件夹下会看到id_rsa和id_rsa.pub两个文件,其中id_rsa是私钥,不可泄露出去。而id_rsa.pub是公钥,能够公开。
第三步:登陆GitHub,打开Account settings,SSH Keys页面,并点击Add SH Key。加入SSH Key,Title能够自由定义。Key文本框中就是id_rsa.pub文件的内容。直接复制就可以。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmd5YWJpbjAwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmd5YWJpbjAwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
假设点击Add SSH Key无反应,也就是没有弹出Title和Key的编辑框可能是浏览器的问题。换一个浏览器试试,360浏览器6.3的版本号(其它版本号没试,整的我開始还以为为是被墙掉了,后来验证一下才发现是浏览器的问题)就会出现这种失误。
这里还须要解释一下,GitHub须要SSH Key的原因是为了确认确实是由你来提交的,而不是他人。
第四步:在GitHub上点击Create a new repobutton,创建一个新的仓库。
创建成功后的界面:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVhbmd5YWJpbjAwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
第五步,将本地资源库推送到远程仓库中。
由于我们本地已经存在了一个仓库,我们能够依据上面的提示将本地的仓库推送到远程仓库中去。(请注意username正确。你自己的username)
$ git remote add origin https://github.com/huangyabin001/learngit.git
运行上述命令。没有不论什么信息提示;
接着运行
$ git push -u origin master
Username for 'https://github.com': huangyabin001
Password for 'https://huangyabin001@github.com':
Counting objects: 14, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (14/14), 1.15 KiB | 0 bytes/s, done.
Total 14 (delta 2), reused 0 (delta 0)
To https://github.com/huangyabin001/learngit.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
在输入的过程中会要求你输入你在GitHub上的username和password。依据提示进行操作就可以。远程克隆到本地就不再赘述了,依照上面的命令进行运行就可以。
刷新GitHub我们就能够看到我们push的仓库中的内容了。
深入学习:Windows下Git新手教程(上)的更多相关文章
- 深入学习:Windows下Git新手教程(下)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangyabin001/article/details/35840591 声明:因为本人对于Git ...
- 深入学习:Windows下Git入门教程(上)
一,安装Git: 1.1Linux上安装命令: sudo apt-get install git 1.2在Windows上安装Git: 使用Windows版的msysgit,官方下载地址:http:/ ...
- 深入学习:Windows下Git入门教程(下)
声明:由于本人对于Git的学习还处于摸索阶段,对有些概念的理解或许只是我断章取义,有曲解误导的地方还请见谅指正! 一.分支 1.1分支的概念. 对于的分支的理解,我们可以用模块化这个词来解释:在日常工 ...
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...
- 图解Windows下 GIT GUI 使用教程
https://jingyan.baidu.com/article/19020a0a7ae6af529c284248.html 本篇经验将和大家介绍Windows下 GIT GUI 使用教程,希望对大 ...
- Windows下GIT安装与使用(上传远程端)
Windows下GIT安装与使用(上传远程服务器) 1. 登陆http://msysgit.github.io/并下载Git 2. 打开下载的exe文件,一路默认(路径可以去修改).有可能电脑需要 ...
- 【亲测可用,亦可配置同一平台的不同账号,例如阿里云的两个不同账号】Windows下Git多账号配置,同一电脑多个ssh-key的管理
Windows下Git多账号配置,同一电脑多个ssh-key的管理 这一篇文章是对上一篇文章<Git-TortoiseGit完整配置流程>的拓展,所以需要对上一篇文章有所了解,当然直接 ...
- windows下git的使用方法(码云)
这表文章主要是用了可视化操作: 使用命令行操作:https://www.cnblogs.com/mswyf/p/9370238.html 一.安装Git Bash 为了在windows下使用Git,我 ...
- Windows下Git多账号ssh-key(复制自己用)
Windows下Git多账号配置,同一电脑多个ssh-key的管理 这一篇文章是对上一篇文章<Git-TortoiseGit完整配置流程>的拓展,所以需要对上一篇文章有所了解,当然直接往下 ...
随机推荐
- LeetCode算法题-Toeplitz Matrix(Java实现)
这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...
- Javascript高级编程学习笔记(96)—— WebGL(2) 类型化视图
类型化视图 类型化视图一般也被认为是一种类型化数组. 因为其元素必须是某种特定的数据类型,类型化视图都继承自 Dataview Int8Array: 表示8位二补整数(即二进制补数) Uint8Arr ...
- MySQL学习(二)索引与锁 --- 2019年1月
1.Order By 是怎么工作的 MySQL做排序是一个成本比较高的操作.MySQL会为每个线程分配一个 sort_buffer 内存用于排序,该内存大小为 sort_buffer_size. 全字 ...
- 使用Update Strategy组件无法进行delete操作
问题: Update Strategy组件根据字段值对目标表进行DD_DELETE操作时失效 同时,session log中报错:Target table [XXXXXXXX] does not al ...
- javaScript设计模式之面向对象编程(object-oriented programming,OOP)(一)
面试的时候,总会被问到,你对javascript面向对象的理解? 面向对象编程(object-oriented programming,OOP)是一种程序设计范型.它讲对象作为程序的设计基本单元,讲程 ...
- 前端笔记之JavaScript面向对象(一)Object&函数上下文&构造函数&原型链
一.对象(Object) 1.1 认识对象 对象在JS中狭义对象.广义对象两种. 广义:相当于宏观概念,是狭义内容的升华,高度的提升,范围的拓展.狭义:相当于微观概念,什么是“狭”?因为内容狭隘具体, ...
- AspNetCore 基于AOP实现Polly的使用
前言 说起AOP,其实我们在做MVC/API 的时候应该没少接触,比如说各种的Fitter 就是典型的AOP了. 本来在使用Polly的时候我最初的打算是使用过滤器来实现的,后来发现实现起来相当的 ...
- 在线生成二维码的API接口
现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...
- 为 Eureka 服务注册中心实现安全控制
上一篇Eureka 实现微服务注册发现讲了用 Eureka 实现单体版的服务注册与发现.因为本篇是在上一篇的基础上的一点扩充,所以读此篇之前要保证看了上一篇. Eureka 如果不加安全控制,会存在下 ...
- WPF ObservableCollection 异步调用问题
问题介绍 当ObservableCollection列表被UI线程占用时,如果在异步线程中调用ObservableCollection,会弹出以下异常: 问题分析 我们使用一个viewModel,在V ...