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_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_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忽略文件。

忽略文件原则:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

例如:

# 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 基础入门的更多相关文章

  1. git 基础入门操作

    前言: 介绍基础的git入门级指令,虽然git指令非常多,但是实际工作中,我们会用到的非常少,小项目中甚至只需要用到2.3个.而且大部分人都会采用gui,而不是每次都打开终端然后输一长串难记的指令. ...

  2. git基础入门之常用命令操作

    本内容参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 初学,有什么不对的地方 ...

  3. Git基础教程(二)

    继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 配置命令:git config --global * 版本库初始化:git init 向版本库添加文件:git add * 提交 ...

  4. Git 快速入门--Git 基础

    Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...

  5. Git基础和入门

    一.Git基础概念 Git功能简单概述 可以随时回滚到之前的代码版本(git reset --hard ): 协同开发时不会覆盖别人的代码(分支): 留下修改记录(git log): 发版时可以方便的 ...

  6. GIT 从入门到放弃大整理

    跟着廖雪峰学 GIT  http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GUI f ...

  7. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

  8. ###Git 基础图解、分支图解、全面教程、常用命令###

    一.Git 基础图解 转自:http://www.cnblogs.com/yaozhongxiao/p/3811130.html Git 图解剖析 git中文件内容并没有真正存储在索引(.git/in ...

  9. iOS 基础入门--Bull' Eye 小游戏 

      说明   Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...

随机推荐

  1. Shell字符串比较相等、不相等方法小结

    #!/bin/sh #测试各种字符串比较操作. #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如不对$ ...

  2. docker 使用:创建nginx容器

    在上一节中了解了镜像和容器.对于镜像可以这样的理解,镜像相当于一个光盘,里面刻录了一个系统这个系统已经带有相关的服务了. 容器是通过镜像这个光盘安装的一个操作系统,光盘预加了什么服务,容器就有什么服务 ...

  3. Python建立web静态服务器

    原文地址:http://www.bugingcode.com/blog/python_html_web_server.html python作为工具,提供了很多好用的命令,比如有时候突然需要建立一个解 ...

  4. CSS 之动态变换背景颜色

    先上效果图 HTML代码: 123456789 <div class="header"> <h1>GCCHRN'S BLOG</h1> < ...

  5. Python 字符编码判断

    题记 在获取中文字符的时候,如果出现乱码的情况,我们需要了解当前的字符串的编码形式.使用下面两种方法可以判断字符串的编码形式. 法一: isinstance(s, str) 用来判断是否为一般字符串 ...

  6. loadrunner通过web的post请求方法测接口 1

    loadrunner通过web的post请求方法测接口 loginapi() {     web_url("rest",          "URL=http://192 ...

  7. Pom.xml的依赖自动生成

    1.第一种用引入jar包的方法 网盘链接:https://pan.baidu.com/s/10HNjNeZc1d5QrFNtvLPWBA 提取码:oako 以上是整个文件直接用idea打开即可 imp ...

  8. Android状态机StateMachine使用举例及源码解析

    Android frameworks源码StateMachine使用举例及源码解析 工作中有一同事说到Android状态机StateMachine.作为一名Android资深工程师,我居然没有听说过S ...

  9. Channel Estimation for High Speed Wireless Systems using Gaussian Particle Filter and Auxiliary Particle Filter

    目录 论文来源 摘要 基本概念 1.时变信道 2.粒子滤波 3.高斯粒子滤波 4.辅助粒子滤波 比较 借鉴之处 论文来源 International Conference on Communicati ...

  10. 常用阻塞队列 BlockingQueue 有哪些?

    为什么要使用阻塞队列 之前,介绍了一下 ThreadPoolExecutor 的各参数的含义(并发编程之线程池ThreadPoolExecutor),其中有一个 BlockingQueue,它是一个阻 ...