Git 基础入门
git安装
git
是跨平台的,所以我们可以在三大主流平台上都可以使用git
.
下面来说的是在windows系统的git安装。
首先,需要在官网上下载git的安装包。
https://git-scm.com/
安装包只需要一切采用默认的配置即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,出现一个类似命令行窗口的东西,就说明Git安装成功!
基本设置
安装完成后需要进行一些基本的设置:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
创建版本库
所谓的版本库,又称之为仓库(repository),我们的代码在仓库中可以被git追踪各种变化。
其实所谓的版本库就是仓库而已。
首先进入到一个目录当中,执行下面的命令。
git init
执行完成之后,会在目录下生成一个.git
目录。
千万千万别闲着没事去碰这个目录里面的文件。
在windows系统中如果没有见到这个目录,就在设置中查看是否显示了隐藏文件。
相关概念
在git
的使用过程中,我们代码所在的目录,被称之为工作区
,而代码仓库中又分为两个部分,第一部分叫做暂存区
,另一部分叫做分支
。
我们日常的提交就是将代码由工作区添加到仓库的暂存区,然后在提交到分支仓库,最后再提交到远程的服务器仓库当中。
将代码提交到分支仓库
想要将代码提交到分支仓库,需要经历下面的几个步骤:
git add 文件名 将文件添加到暂存区
git commit -m "注释信息" 将暂存区的文件提交到分支仓库
查看状态
如果想要查看当前代码的状态,可以通过下面的命令来查看。
git status
这条命令可以让我们看到当前的工作区当中尚未提交的代码哪些发生了变化。
版本回退
当我们对一个文件进行了多次操作之后(例如,修改文件内容,然后提交到仓库,之后再次修改再次提交...),如果想要查看近几次的操作,可以通过下面的命令:
git log
通过上面的命令,会出现类似下面的结果:
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
git log
显示的是从最近到最远的提交日志。
如果显示的信息过多,看不清,可以尝试加上下面的参数:
--pretty=oneline
加上参数的命令如下:
git log --pretty=oneline
显示的效果如下:
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
上面显示的一大堆数据,是我们提交数据的
commit id
,是通过十六进制加密之后的数据。每个人提交查看到的数据都是不一样并且是唯一的。
我们如果想要让我们的代码回退到上一个版本,可以通过下面的命令:
git reset -- hard HEAD^
如果需要回滚到之前的第n个版本,可以通过commit id
来进行回滚。
git reset --hard 67ca614
如果想要恢复到新的版本,也可以通过commit id
来进行回滚。
如果找不到commit id
也可以通过git reflog
来查看过往操作。
代码修改
如果一段代码进行了修改,并且已经通过git add
添加到了暂存区,之后再次对代码进行修改,那么该怎么办呢?
首先,我们可以先来执行git commit -m '...'
将之前的修改提交到分支仓库。然后再次进行git add
操作和git commit
操作。
这样两次的修改就都可以提交到代码仓库。
撤销修改
如果你第一次修改完代码后,代码已经git add
提交到了暂存区,然后又进行了第二次修改。
这个时候你想要撤销掉第二次修改,可以采用下面的命令:
git checkout -- readme.txt 文件名
如果你在修改代码后但是没有git add
,这个时候执行git checkout
会让代码回滚到修改之前。
如果你的代码修改完成后,提交到了暂存区,但是你紧接着就后悔了,就可以通过
git reset HEAD 文件名
这条命令将在暂存区的修改车撤回。这样就可以重新的修改。
文件删除
假如本地有一个a.txt
,并且你已经将它提交到分支仓库当中,之后你将本地的文件删除。
这时执行git status
命令,会发现git
提醒你分支仓库中和你本地文件的不同。
此时你有两个选择:
- 通过分支仓库将删除的文件找回
- 将分支仓库的文件也删除
如果想要通过分支仓库将删除的文件找回。可以执行下面的命令:
git checkout -- a.txt
如果想要将分支仓库的文件也删除,可以执行下面的命令
git rm a.txt
git commit -m '....'
git pull
命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。(比如说github仓库中的文件想要删除,先git pull下来,在删除,在上传上去就行了。(详情请百度))
github 远程仓库
如果想要将代码保存在远程仓库当中,并且让多人能够同时访问,可以选择在服务器当中自己搭建一个服务器,也可以使用github这种代码托管平台。
下面要说的就是如何通过本地git将代码托管到github代码托管平台。
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
添加远程仓库
我们可以在github中创建一个远程仓库,创建完成之后可以通过下面的命令来添加远程仓库:
$ git remote add origin git@github.com:github账户名/仓库名
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。
下一步,就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样.
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master
分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
克隆远程仓库
$ git clone git@github.com:账户名/仓库名.git
分支操作
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
合并分支是非常容易出现错误的,所以给大家的建议是,创建临时分支之后,在更改完代码以后一定要将代码提交到分支仓库在进行主分支切换,否则你在分支上的修改也会出现在主分支上。
忽略特殊文件
我们可以在项目目录当中创建一个.gitignore文件。把要忽略的文件名添加进去,这样就可以在每次提交的时候让git忽略文件。
忽略文件原则:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class
文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
例如:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
如果你添加文件add
操作时发现无效,可能是因为.gitignore
文件将其忽略掉了,可以通过-f
来强制添加。
$ git add -f 文件名
Git 基础入门的更多相关文章
- git 基础入门操作
前言: 介绍基础的git入门级指令,虽然git指令非常多,但是实际工作中,我们会用到的非常少,小项目中甚至只需要用到2.3个.而且大部分人都会采用gui,而不是每次都打开终端然后输一长串难记的指令. ...
- git基础入门之常用命令操作
本内容参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 初学,有什么不对的地方 ...
- Git基础教程(二)
继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 配置命令:git config --global * 版本库初始化:git init 向版本库添加文件:git add * 提交 ...
- Git 快速入门--Git 基础
Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...
- Git基础和入门
一.Git基础概念 Git功能简单概述 可以随时回滚到之前的代码版本(git reset --hard ): 协同开发时不会覆盖别人的代码(分支): 留下修改记录(git log): 发版时可以方便的 ...
- GIT 从入门到放弃大整理
跟着廖雪峰学 GIT http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GUI f ...
- .NET ORM 的 “SOD蜜”--零基础入门篇
PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...
- ###Git 基础图解、分支图解、全面教程、常用命令###
一.Git 基础图解 转自:http://www.cnblogs.com/yaozhongxiao/p/3811130.html Git 图解剖析 git中文件内容并没有真正存储在索引(.git/in ...
- iOS 基础入门--Bull' Eye 小游戏
说明 Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...
随机推荐
- ZOJ-1183-Scheduling Lectures
可以用贪心求最小讲课次数,贪心策略也很好想,就是对于任意主题,能早讲就早讲.这种方案的讲课次数一定是最少的,但是不满意指标不一定是最小,然后再利用动态规划求在最少讲课次数前提下的最小不满意指标. 方法 ...
- MOOC(2)-Django开发get、post请求,返回json数据
1.对get请求直接返回参数 如果请求多个参数,也只能返回一个参数,这里只返回了username参数 如果想要返回多个参数值,可以返回json格式数据 2.对get请求返回json数据 # views ...
- container/injection简介以及发展历史
一:什么是Container?Container的作用? 容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境.container的主要作用 ...
- JavaScript 语言精粹笔记3
方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...
- IP 转发分组的流程
IP 转发分组的流程 数据路由:路由器在不同网段转发数据包: 网络畅通的条件:数据包能去能回: 从源网络发出时,沿途的每一个路由器必须知道到目标网络下一跳给哪个接口: 从目标网络返回时,沿途的每一个路 ...
- 带你学习Javascript中的函数进阶(一)
1. 函数的定义和调用 1.1 函数的定义方式 函数声明方式function关键字(命名函数) 函数表达式(匿名函数) new Function() var fn = new Function('参数 ...
- python django 之 django自带的分页
1. 例1: 基础的分页 1). vim app01/views.py def users(request): from django.core.pagina ...
- 阿里sentinel说明及使用
使用说明 如果只是为了让使 用Sentinel 的限流功能,只需要引入相关的jar包依赖. 添加依赖 添加相关模块的Adapter Sentinel为每个构建项目的各个组件都打包成了相应的Adapte ...
- Java多态实现的机制
Java提供了编译时多态和运行时多态两种多态机制.前者是通过方法重载实现的,后者是通过方法的覆盖实现的. 在方法覆盖中,子类可以覆盖父类的方法,因此同类的方法会在父类与子类中有着不同的表现形式. 在J ...
- 音频相关 ALSA ffmpeg ffplay 命令用法 g7xx
采样率: samples 441100 每秒 DAC/ADC 采样的频率,声卡一般还支持 48k 8k 等模式. 通道:channels 2声道 左右声道 也有单声道的声音,5.1 声道 位数: 16 ...