git基本命令和仓库操作
首先git是什么?git是github上的一个代码托管工具,是一款代码版本管理工具,github上的代码是基于git来进行托管的。github是全球的开源社区。Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,可以很方便的回退到某一个时刻的文件。也就是能够快速复原现场。
git基本命令:
- git init 表示初始化一个Git仓库。
- git status 表示查看当前仓库的状态,可以随时掌握工作区的状态,例如可以看到有哪些文件被修改了,有哪些文件需要提交等,如果没有的话就会出现 working tree clean表示工作区很干净,没有被修改的文件或者没有需要提交的文件,如果有文件被修改了,可以结合git diff filename查看文件被修改了什么内容,也就是文件发什么了哪些变化。
- git add filename 表示将文件添加到暂存区。
add可以反复多次使用,将多个文件添加到暂存区。如果一次性添加多个文件,直接使用空格分隔文件名就可以了。 - git commit filename 表示将文件提交到仓库,有说明信息需要使用-m参数,变为这样:git commit -m "说明信息" filename。
这儿提交可以不用接文件名的,因为add到了暂存区,提交就是提交暂存区的内容,如果add了多个文件到暂存区,那么commit时不加文件名就表示将暂存区的文件全部提交,添加了文件表示只提交指定的那个文件。
git commit --amend命令可以重新修改提交信息。例如你之前提交了文件,但是你的描述信息写错了,这时可以使用它来重新修改提交信息,但是内容是没有变化的。 - git diff filename 表示比较文件的不同地方,比如昨天修改了文件,但是今天已经不记得了修改了什么,这时可以使用这个命令查看今天的文件和昨天的文件有什么不一样。
必须在没有add进暂存区之前进行比较,如果已经添加进暂存区之后将无法比较出区别。
例如:

a/A.txt表示之前的文件,b/A.txt表示之后的,-号表示删除了内容,+号表示添加了内容并且可以看到添加了什么内容。 - 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个版本。 - 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进行撤销,完事!
- 删除文件,在git中删除文件也是一种修改。
当你使用rm删除了文件之后,使用git status查看工作区状态如下图:

这个时候你可以恢复,但是如果你确定要删除文件,可以使用git rm filename 并且commit到git仓库中,这时文件就从版本库中删除了,也就是无法恢复了。
另一种情况是你删错了文件,在删除文件之前只要你将文件提交到了版本库中,都是可以恢复的,但是只能恢复到最新版本,会丢失最近一次提交后你修改的内容。
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。 - 当你不知道某个命令的作用时可以查看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。
- 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.....就表示授权添加成功了。 - Push命令:表示如果本地代码有更新了,就可以将它推送到远程仓库,以保持代码同步,例如:git push origin master表示将本地代码推送到master分支。
- Pull命令:表示将远程仓库的代码更新到本地,例如:git pull origin master 表示将远程master的代码拉到本地。
有了Push和pull两个命令就可以向远程仓库提交代码了。如果有改动就添加到暂存区,没有问题就可以commit,最后将项目push到远程仓库。
向远程仓库提交内容有两种方式,一种是将项目从远程仓库clone下来,另一种是将本地仓库与远程仓库进行关联。
第一种方式,将项目从远程仓库中clone下来
- git clone git@github.com:github名称/项目仓库。表示将项目从远程clone到本地。这个项目本身就是一个git仓库了,所以就不需要再进行git init了。
- git push origin master 表示如果修改了文件,并且commit了,就直接将项目推送到远程仓库了。
第二种方式,将本地仓库和远程仓库关联起来,
例如本地仓库test2,远程仓库test,现在需要将test2中的代码提交到test中。这个时候需要将test和test2关联起来。
- git remote add origin git@github.com:github名称/项目.git 表示将本地仓库和远程仓库关联起来,这个远程仓库的地址是git@github.com:github名称/项目.git,而origin是这个仓库的名字,以后推送就可以使用git push origin master表示推送到远程仓库origin的master分支。
- git push -u origin master表示向test仓库提交了代码,默认是提交到master主分支上。第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git基本命令和仓库操作的更多相关文章
- Git单人本地仓库操作
本地仓库是个.git隐藏文件 以下为演示Git单人本地仓库操作 1.安装git sudo apt-get install git 密码:skylark 2.查看git安装结果 git 3.创建项目 在 ...
- git学习——远程仓库操作
查看当前的远程库——git remote 列出了仅仅是远程库的简单名字 可以加上-v 现实对应的克隆地址 添加远程仓库——git remote add [shortname] [url] git re ...
- 01-Git单人本地仓库操作
Git源代码管理 Git(多人协同开发同一个项目),作用就是源代码管理,为什么需要源代码管理呢,方便多人协同开发,并且方便版本控制. Git管理源代码特点: 1.Git是分布式管理.服务器和客户端都有 ...
- Git基本命令行操作 (转)
Git远程操作详解 作者: 阮一峰 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和 ...
- git 学习(1) ----- git 本地仓库操作
最近在项目中使用git了,在实战中才知道,以前学习的git 知识只是皮毛,需要重新系统的学一下,读了一本叫 Learn Git in a Month of Lunches 的书籍,这本书通俗易懂,使 ...
- Git 基本命令行操作
一.本地仓库操作 1.初始化 git init 2.添加版本控制文件 git add README.md3.本地提交 git commit -m “1st commit”4.配置远程 ...
- git —— 基本命令以及操作(No.1)
git基本命令(附加描述) 1.把文件添加到暂存区$ git add readme.txt 2.把暂存区的文件文件添加到仓库$ git commit -m "提交说明" 备注:ad ...
- Git 学习(三)本地仓库操作——git add & commit
Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...
- git 学习记录—— git 中的仓库、文件状态、修改和提交操作等
最近开始学习使用版本控制工具 git .学习方式主要通过阅读 git 网站上的 Pro git 和动手实践,使用的系统为 Ubuntu16.04LTS,以及 Windows 8.1. 本文主要关注 ...
随机推荐
- 【python学习之五】自定义函数实现用 Python 发送电子邮件
前言 之前论坛里有人发过关于发送邮件的帖子,设计器也有关于发送邮件的控件.我这里再次重复,希望能有帮到大家的地方. 信息准备 发送邮件前必须准备好一些基本信息,例如发件人邮箱地址.发件人邮箱密码.收件 ...
- python3学习笔记(三):注释和字符串
一.注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. # 打印圆的周长: print(2* pi* r) 在python 中用井号(#)表示注释.井号(#) ...
- drwxr-xr-x是啥意思
这里先说一下drwxr-xr-x是啥意思: 第一位表示文件类型.d是目录文件,l是链接文件,-是普通文件,p是管道 第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行. 第5-7位表示和 ...
- [BZOJ4456][ZJOI2016]旅行者:分治+最短路
分析 类似于点分治的思想,只统计经过分割线的最短路,然后把地图一分为二. 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(regist ...
- 满减 HRBUST - 2455
https://vjudge.net/problem/HRBUST-2455 有两种优惠方式,一是满400减100,另外一种是商品自带折扣,二者不可叠加 dp[i][j]表示前i种商品,(参与满400 ...
- (转载)FM 算法
(转载)FM算法 https://zhuanlan.zhihu.com/p/33184179
- 利用IKVM在C#中调Java程序(总结+案例)
IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.), ...
- java分页原理及分类
1.使用List接口最终subList()方法实现分页 2.直接使用数据库SQL语句实现分页 3.使用hibernate等框架实现跨数据库的分页 mybatis是面向SQL的,本质上和第二种分页方式相 ...
- modern php笔记---1、新时代的php
modern php笔记---1.新时代的php 一.总结 一句话总结: php有Zend Engine 和 Facebook开发的 HipHop Virtual Machine两套引擎 1.php也 ...
- 洛谷P4095新背包问题
传送 这道题最最暴力的方法就是对于每一个询问都跑一边多重背包问题,但显然q不会那么友好的让我们用暴力过掉这道题. 考虑优化.我们可以先把裸的多重背包搞成二进制优化后的多重背包.但是复杂度依然无法接受. ...