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. 本文主要关注 ...
随机推荐
- android stadio gradle问题
https://www.jianshu.com/p/2bb0b6a7b479 https://www.jianshu.com/p/d175bef9770c Unable to resolve depe ...
- HDU2196computer
就是求每个点为起始点的最长链的长度. 写一下各个数组的意思吧. f[i][0]为点i向下走最长的距离:f[i][1]为点i向下走第二长的距离: xia[i][0]为点i向下走最长距离所要走的儿子节点: ...
- 【Leetcode】二分法
题目: 在排序数组中查找元素的第一个和最后一个位置. 二分法的思想非常简单,然而其中的实现细节非常繁琐,容易出错.本推文非常详细地介绍二分法的实现细节. 总结几点注意事项: 初始上.下界的取值: 判断 ...
- 洛谷 P5022 旅行——题解
发现大部分题解都是O(n^2)的复杂度,这里分享一个O(n)复杂度的方法. 题目传送 首先前60%的情况,图是一棵无根树,只要从1开始DFS,每次贪心走点的编号最小的点就行了.(为什么?因为当走到一个 ...
- sqli-labs(11)
基于登录点的注入(小编这里傻逼了 可以直接用group_concat函数绕过显示问题我还在用limit绕过) 0X01这里我们的参数就不是在get的方法里面提交的了 我们遇到了全新的问题 那么该怎么 ...
- python函数的参数问题
语法 def functionname( parameters ): "函数_文档字符串" function_suite return [expression] 参数问题 必备参数 ...
- CentOS7 如何挂载网络设备
CentOS 自动挂载网络设备的方法 手动挂载: [root@mysql ~]# mount -o username=USER,password=PASSWORD //192.168.10.212/z ...
- 后台以json数据形式返回之后前台接受的方法以及之后的解析总结
1.前台AJAX请求,后台以对象转JSON形式返回: 后台代码: @RequestMapping(value = "/queryDist", method = RequestMet ...
- ubuntu的无线网无法连上
自己的笔记本可以连上wireless,但是实验室的台式机无法连上. 有无线显示,就是无法连上. 后来把连在机箱上的网线拔了以后可以连无线了.如果有网线连接,系统优先会选择有线的上网.
- Vue知识整理8:条件、URL、点击
1.通过v-if实现对条件的判断和执行: 2.通过v-bind:href实现对url地址的绑定,其中url写在data中: 3.通过@click="click1"实现点击事件,其中 ...