首先git是什么?git是github上的一个代码托管工具,是一款代码版本管理工具,github上的代码是基于git来进行托管的。github是全球的开源社区。Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,可以很方便的回退到某一个时刻的文件。也就是能够快速复原现场。
git基本命令:

  1. git init 表示初始化一个Git仓库。
  2. git status 表示查看当前仓库的状态,可以随时掌握工作区的状态,例如可以看到有哪些文件被修改了,有哪些文件需要提交等,如果没有的话就会出现 working tree clean表示工作区很干净,没有被修改的文件或者没有需要提交的文件,如果有文件被修改了,可以结合git diff filename查看文件被修改了什么内容,也就是文件发什么了哪些变化。
  3. git add filename 表示将文件添加到暂存区。
    add可以反复多次使用,将多个文件添加到暂存区。如果一次性添加多个文件,直接使用空格分隔文件名就可以了。
  4. git commit filename 表示将文件提交到仓库,有说明信息需要使用-m参数,变为这样:git commit -m "说明信息" filename。
    这儿提交可以不用接文件名的,因为add到了暂存区,提交就是提交暂存区的内容,如果add了多个文件到暂存区,那么commit时不加文件名就表示将暂存区的文件全部提交,添加了文件表示只提交指定的那个文件。
    git commit --amend命令可以重新修改提交信息。例如你之前提交了文件,但是你的描述信息写错了,这时可以使用它来重新修改提交信息,但是内容是没有变化的。
  5. git diff filename 表示比较文件的不同地方,比如昨天修改了文件,但是今天已经不记得了修改了什么,这时可以使用这个命令查看今天的文件和昨天的文件有什么不一样。
    必须在没有add进暂存区之前进行比较,如果已经添加进暂存区之后将无法比较出区别。
    例如:

    a/A.txt表示之前的文件,b/A.txt表示之后的,-号表示删除了内容,+号表示添加了内容并且可以看到添加了什么内容。
  6. git log 命令可以查看从最远到最近的提交日志,git log --pretty=oneline表示提交日志在一行显示,不然的话太乱了不方便浏览。
    git log -1命令可以查最后一次提交的信息,后面可以-n,表示可以查看最近几次的提交情况。
    git log -p -2 命令还可以查看每次提交的差异变化,也就是说查看每次提交文件的变化内容,这里表示查看最近两次提交所发生的变化。
    git log --stat命令可以查看每次提交的一些简略信息,比如那些文件被修改了,最后会有一句总结,表示有多少个文件被修改,增加了或者删除了。
    git log 还可以和--graph结合使用,显示 ASCII 图形表示的分支合并历史。
    git log --pretty 可以指定提交日志的显示格式,有oneline,short,full,fuller可以选择。还可以设置format,
    它的常用选项是:例如git log --pretty=format:"%h - %an, %ar : %s"
    Table 1. git log --pretty=format 常用的选项
    选项 说明
    %H 提交对象(commit)的完整哈希字串
    %h 提交对象的简短哈希字串
    %T 树对象(tree)的完整哈希字串
    %t 树对象的简短哈希字串
    %P 父对象(parent)的完整哈希字串
    %p 父对象的简短哈希字串
    %an 作者(author)的名字
    %ae 作者的电子邮件地址
    %ad 作者修订日期(可以用 --date= 选项定制格式)
    %ar 作者修订日期,按多久以前的方式显示
    %cn 提交者(committer)的名字
    %ce 提交者的电子邮件地址
    %cd 提交日期
    %cr 提交日期,按多久以前的方式显示
    %s 提交说明
    例如:
    有时候当我们修改了文件,但是想要恢复以前的某一个版本的文件,可以采用创建一个快照的形式方便回退到以前的某一个版本,在git中的快照就是commit。
    图片中黄色的那一长串就是commit id。
    当你想要回退到某一个版本的话,首先必须知道当前是在哪个版本,而在git中HEAD就表示当前版本,head就是一个类似指针,指向当前版本。上一个版本表示为HEAD^,上上个版本表示为HEAD^^,如果版本太多了,可以直接这样表示某一个版本HEAD~10,表示之前的第10个版本。
  7. git reset --hard HEAD^ 命令表示回退到上一个版本。现在已经回退到上一个版本了。
    但是如果你后悔了,还是想要以前的刚刚你修改的那个版本,怎么办,这时只要你的git bash 窗口没有关闭,你可以往上翻找你刚刚commit 的commit id然后
    git reset --hard commit id 就可以回退到之前你刚刚的那个版本了。
    在如果,第二天你又后悔了昨天的操作,那么现在还是可以找到你之前的版本的,我擦,git好神奇哦
    git 使用了一个git reflog 来记录你的每一次命令操作的。

    图片中黄色的那一串就是commit id,这时 git reset --hard commit id就可恢复了。

需要注意的是git是分布式版本控制工具,它是有一个暂存区概念的,每一次修改了需要add到暂存区然后在commit提交,如果修改了直接提交的话,是不会成功的,因为提交只会提交暂存区中有的修改。可以使用git diff HEAD -- filename 来查看工作区和版本库里面最新版本的区别。


那么如何撤销已经修改了的文件呢?有两种情况:第一,修改了文件,但是还没有add进暂存区;第二,修改了并且已经添加进了暂存区。

第一种情况,修改了还没有add进暂存区可以使用git checkout -- testzancunq.txt进行撤销工作区的修改,这样就回到了原来工作区内容的状态。
第二种情况,修改了并且已经添加进暂存区了,如下图:

这时可以使用git reset HEAD testzancunq.txt表示从暂存区中取消暂存,然后在使用git checkout -- testzancunq.txt进行撤销,完事!

  1. 删除文件,在git中删除文件也是一种修改。
    当你使用rm删除了文件之后,使用git status查看工作区状态如下图:

    这个时候你可以恢复,但是如果你确定要删除文件,可以使用git rm filename 并且commit到git仓库中,这时文件就从版本库中删除了,也就是无法恢复了。
    另一种情况是你删错了文件,在删除文件之前只要你将文件提交到了版本库中,都是可以恢复的,但是只能恢复到最新版本,会丢失最近一次提交后你修改的内容。
    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
  2. 当你不知道某个命令的作用时可以查看git 帮助文档,有三种方式:
    git help verb
    git verb --help
    man git-verb
    git help config 获取config手册

以上就是git在本地库中的文件的基本操作。


接下来是如何向远程仓库提交内容。这时需要注册一个github账号,并且github是基于SSH协议加密授权的,ssh是一种网络协议用于计算机之间的加密登录,就像远程操作服务器一样,例如linux,可以利用ssh远程连接操作服务器。每一台linux都配置了ssh协议。想要向远程仓库提交代码,需要ssh key,需要在github中添加ssh key。首先要生成ssh key。

  1. ssh-keygen -t rsa -C "youremail@example.com"(邮箱要换成自己的邮箱) 表示使用rsa算法生成密钥,最后windows平台会在用户目录下生成.ssh的隐藏目录,以及id_rsa和id_rsa.pub两个文件,而id_rsa就是密钥,id_rsa.pub就是公钥。这样只需要将公钥id_rsa.pub添加到github中,就可以和本地的密钥id_rsa进行配对,完成授权过后就可以进行代码提交了。
    添加成功过后进行测试:ssh -T git@github.com,如果出现了Hi.....就表示授权添加成功了。
  2. Push命令:表示如果本地代码有更新了,就可以将它推送到远程仓库,以保持代码同步,例如:git push origin master表示将本地代码推送到master分支。
  3. Pull命令:表示将远程仓库的代码更新到本地,例如:git pull origin master 表示将远程master的代码拉到本地。
    有了Push和pull两个命令就可以向远程仓库提交代码了。如果有改动就添加到暂存区,没有问题就可以commit,最后将项目push到远程仓库。
    向远程仓库提交内容有两种方式,一种是将项目从远程仓库clone下来,另一种是将本地仓库与远程仓库进行关联。

第一种方式,将项目从远程仓库中clone下来

  1. git clone git@github.com:github名称/项目仓库。表示将项目从远程clone到本地。这个项目本身就是一个git仓库了,所以就不需要再进行git init了。
  2. git push origin master 表示如果修改了文件,并且commit了,就直接将项目推送到远程仓库了。

第二种方式,将本地仓库和远程仓库关联起来,

例如本地仓库test2,远程仓库test,现在需要将test2中的代码提交到test中。这个时候需要将test和test2关联起来。

  1. git remote add origin git@github.com:github名称/项目.git 表示将本地仓库和远程仓库关联起来,这个远程仓库的地址是git@github.com:github名称/项目.git,而origin是这个仓库的名字,以后推送就可以使用git push origin master表示推送到远程仓库origin的master分支。
  2. git push -u origin master表示向test仓库提交了代码,默认是提交到master主分支上。第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

git基本命令和仓库操作的更多相关文章

  1. Git单人本地仓库操作

    本地仓库是个.git隐藏文件 以下为演示Git单人本地仓库操作 1.安装git sudo apt-get install git 密码:skylark 2.查看git安装结果 git 3.创建项目 在 ...

  2. git学习——远程仓库操作

    查看当前的远程库——git remote 列出了仅仅是远程库的简单名字 可以加上-v 现实对应的克隆地址 添加远程仓库——git remote add [shortname] [url] git re ...

  3. 01-Git单人本地仓库操作

    Git源代码管理 Git(多人协同开发同一个项目),作用就是源代码管理,为什么需要源代码管理呢,方便多人协同开发,并且方便版本控制. Git管理源代码特点: 1.Git是分布式管理.服务器和客户端都有 ...

  4. Git基本命令行操作 (转)

    Git远程操作详解   作者: 阮一峰 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和 ...

  5. git 学习(1) ----- git 本地仓库操作

    最近在项目中使用git了,在实战中才知道,以前学习的git 知识只是皮毛,需要重新系统的学一下,读了一本叫  Learn Git in a Month of Lunches 的书籍,这本书通俗易懂,使 ...

  6. Git 基本命令行操作

    一.本地仓库操作 1.初始化    git init 2.添加版本控制文件    git add README.md3.本地提交    git commit -m “1st commit”4.配置远程 ...

  7. git —— 基本命令以及操作(No.1)

    git基本命令(附加描述) 1.把文件添加到暂存区$ git add readme.txt 2.把暂存区的文件文件添加到仓库$ git commit -m "提交说明" 备注:ad ...

  8. Git 学习(三)本地仓库操作——git add & commit

    Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...

  9. git 学习记录—— git 中的仓库、文件状态、修改和提交操作等

    最近开始学习使用版本控制工具  git .学习方式主要通过阅读 git 网站上的 Pro git 和动手实践,使用的系统为 Ubuntu16.04LTS,以及 Windows 8.1. 本文主要关注 ...

随机推荐

  1. 【python学习之五】自定义函数实现用 Python 发送电子邮件

    前言 之前论坛里有人发过关于发送邮件的帖子,设计器也有关于发送邮件的控件.我这里再次重复,希望能有帮到大家的地方. 信息准备 发送邮件前必须准备好一些基本信息,例如发件人邮箱地址.发件人邮箱密码.收件 ...

  2. python3学习笔记(三):注释和字符串

    一.注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. # 打印圆的周长: print(2* pi* r) 在python 中用井号(#)表示注释.井号(#) ...

  3. drwxr-xr-x是啥意思

    这里先说一下drwxr-xr-x是啥意思: 第一位表示文件类型.d是目录文件,l是链接文件,-是普通文件,p是管道 第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行. 第5-7位表示和 ...

  4. [BZOJ4456][ZJOI2016]旅行者:分治+最短路

    分析 类似于点分治的思想,只统计经过分割线的最短路,然后把地图一分为二. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(regist ...

  5. 满减 HRBUST - 2455

    https://vjudge.net/problem/HRBUST-2455 有两种优惠方式,一是满400减100,另外一种是商品自带折扣,二者不可叠加 dp[i][j]表示前i种商品,(参与满400 ...

  6. (转载)FM 算法

    (转载)FM算法 https://zhuanlan.zhihu.com/p/33184179

  7. 利用IKVM在C#中调Java程序(总结+案例)

    IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.), ...

  8. java分页原理及分类

    1.使用List接口最终subList()方法实现分页 2.直接使用数据库SQL语句实现分页 3.使用hibernate等框架实现跨数据库的分页 mybatis是面向SQL的,本质上和第二种分页方式相 ...

  9. modern php笔记---1、新时代的php

    modern php笔记---1.新时代的php 一.总结 一句话总结: php有Zend Engine 和 Facebook开发的 HipHop Virtual Machine两套引擎 1.php也 ...

  10. 洛谷P4095新背包问题

    传送 这道题最最暴力的方法就是对于每一个询问都跑一边多重背包问题,但显然q不会那么友好的让我们用暴力过掉这道题. 考虑优化.我们可以先把裸的多重背包搞成二进制优化后的多重背包.但是复杂度依然无法接受. ...