快速上手Git
本文主要摘录于廖雪峰的Git教程,个别地方做了可能不恰当的修改或补充,主要方便自己回顾。查看更详细内容请移步廖老师博客。同时,感谢廖老师写出这么好的入门指导。
(有彩蛋!!!)
一、热身
1.初始化一个Git仓库。先进入到一个本地目录下,然后使用git init命令将目录初始化。
2.添加文件到Git仓库,需要2条命令:
1)使用命令git add <file>,可反复多次使用,添加多个文件,也可一次添加多个文件。
2)使用命令git commit -m "日志内容"进行提交。
二、进入状态
1.要随时掌握工作区的状态,使用git status命令。
2.如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
注:cat <file> ,是一个linux命令,表示由第一行开始显示文件内容。类似的还有tac:从最后一行开始显示;head:查看头几行;tail:查看尾几行,等等。
三、玩点高级的: 版本回溯
1.HEAD指向的版本就是当前版本,上一版本是HEAD^,每上一版本加一个^符号。使用命令“git reset --hard HEAD^”,回溯到上一版本。使用命令“git reset --hard 版本号”,回溯到具体版本。
版本号不用写全,写前4、5位就可以了。
2.用“git log <file>”查看某一文件从第一次提交到当前版本的提交历史,以便确定向前回溯到哪个版本。省略文件名,表示命令对该目录下所有文件生效。
3.用“git reflog <file>”查看某一文件的命令历史(提交、回溯),以便确定向后回溯到哪个版本。
注:当前版本不一定是最后提交的版本。
补充内容:(以下来自segmentfault用户xiaochao)
git不能把单独的某个文件恢复到指定的版本,如果要这要做,可以这样:
1)git reset 版本号,这时候,会产生一个和版本号对应的分支
2)git checkout到这个分支,把要恢复的文件拷贝走
3)git checkout到原来的分支,把文件再拷贝回来,覆盖掉现在的文件,然后git add,git commit
四、再说add与commit
1.每次修改文件后,commit之前,都要先对修改的文件进行add操作。如果不先add到暂存区,那么无法commit。
2.在某一次修改文件后,add到暂存区。然后又做了第二次修改,第二次修改后没有add操作。这样commit,只会将第一次的修改提交,第二次所做的修改不会被提交。
五、后悔药
场景1:当你误改了工作区某个文件的内容,想将文件回退到修改之前的样子时,用命令git checkout -- <file>。(注意“--”不能少)
场景2:当你误改了工作区某个文件的内容,并且将其add到了暂存区,想将文件回退到修改之前的样子时,分两步,第一步用命令git reset HEAD <file>/文件夹,这样文件就回到了工作区(即撤销add)
,第二步按场景1操作即可。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回溯内容,不过前提是没有合入到远程库。如果已push到远程库,想要回溯版本。先回退本地库,再git push -f合入到远程库。(注意:本地库回溯后,版本将落后远程库,必须使用强制推送覆盖远程库,否则无法合入到远程库)
六、删除文件
1.git checkout其实是用本地版本库里的文件替换工作区/暂存区的文件,无论工作区/暂存区的文件经过修改还是删除,只要版本库中还有,都可以进行还原。还原后的文件可以回溯到任意版本。
2.命令git rm用于删除版本库中的文件。删除后并且commit,就真的从本地版本库删除了。(如果一个文件已经被提交到版本库,那么你永远不用担心在工作区和暂存区误删,但是要小心,误删之前做的修改如果没有add/commit是无法找回的。)
七、远程版本库
1.要关联一个远程版本库,使用命令git remote add origin git@server-name:path/repo-name.git。
2.关联后,使用命令git push -u origin master第一次合入master分支的所有内容到远程版本库。此后,每次本地提交后,只要有必要,就可以使用命令git push推送最新修改。如果github上的文件比本地版本库的版本新,那么push之前会提示先pull。执行git pull会进入vim让填comment,不填直接:q退出即可,然后就可以push了。
(同理:如果一个文件已经被合入到远程版本库,那么你永远不用担心在本地版本库误删,当然,这只是我目前的理解,不一定准确。)
最后彩蛋,是我绘制的一张简易的git工作流程示意图:-)
彩蛋2,推荐一本《GitHub入门与实践》,作者大塚弘记,我刚看了一半,非常好的入门书。
本作品采用知识共享署名 4.0 国际许可协议进行许可。
快速上手Git的更多相关文章
- 快速上手git gitlab协同合作
简单记录,整理. 摘要 为方便大家快速上手Git,并使用Gitlab协同合作,特编写此手册,手册内容不会太丰富与深入.主要包含如下内容: Git 使用教程1.1 安装1.2 常用命令1.3 版本控制1 ...
- Git快速上手 : Tortoise工具使用
利用工具快速上手Git 别跟我说什么用命令操作Git,多高大上呀,请不要在这里跟我装逼,就如同,有个小妞在床上眉眼诱惑地,你却TM还要先看个片儿来热热身.... TortoiseGit 名字看着眼熟 ...
- Git版本控制Windows版快速上手
说到版本控制,之前用过VSS,SVN,Git接触不久,感觉用着还行.写篇博文给大家分享一下使用Git的小经验,让大家对Git快速上手. 说白了Git就是一个控制版本的工具,其实没想象中的那么复杂,咱在 ...
- 学习Git---20分钟git快速上手
学习Git-----20分钟git快速上手 在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是 ...
- Rancher 快速上手指南操作(1)
Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...
- [转]Rancher 快速上手指南操作(1)
本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...
- Requests快速上手
发送请求 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取 ...
- python的requests快速上手、高级用法和身份认证
https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...
- Gradle快速上手——从Maven到Gradle
[本文写作于2018年7月5日] 本文适合于有一定Maven应用基础,想快速上手Gradle的读者. 背景 Maven.Gradle都是著名的依赖管理及自动构建工具.提到依赖管理与自动构建,其重要性在 ...
随机推荐
- Android 框架 Afinal使用
介绍android Afinal框架功能: Afinal是一个开源的android的orm和ioc应用开发框架.在android应用开发中,通过Afinal的ioc框架,诸如UI绑定,事件绑定,通过注 ...
- MySQL之IDE工具介绍及数据备份
一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...
- C++ shut down a computer
前阵子有朋友问我,怎么用C语言写一个小程序,控制电脑关机.这个我真的不懂,这几天闲着,就上网搜了搜,整理一下. IDE: Code::Blocks 16.01 操作系统:Windows 7 x64 # ...
- Jmeter中常用的一些对字符串的处理
1)截取部分线程组的名称 group = ctx.getThreadGroup(); // 获取当前线程组 str = group.getName(); // 获取线程组的名称 str = str.s ...
- 利用SVD-推荐未尝过的菜肴
推荐未尝过的菜肴-基于物品相似度的推荐 推荐系统的工作过程:给定一个用户,系统会为此用户返回N个最好的推荐菜 1. 寻找用户没有评级的菜肴,即在用户-物品矩阵中的0值 2. 在用户没有评级的所有物品中 ...
- 最短路径问题---Dijkstra算法详解
侵删https://blog.csdn.net/qq_35644234/article/details/60870719 前言 Nobody can go back and start a new b ...
- LVS(IPVS)了解
从来都只是看文章,现在手工作一下. 参考URL: https://blog.csdn.net/langyue919/article/details/80935197 https://www.cnblo ...
- zeromq的安装,部署(号称最快的消息队列,消息中间件)
1:Storm作为一个实时处理的框架,产生的消息需要快速的进行处理,比如存在消息队列ZeroMQ里面. 由于消息队列ZeroMQ是C++写的,而我们的程序是运行在JVM虚拟机里面的.所以需要jzmq这 ...
- Redis分布式锁(ServiceStack.Redis实现)
1.设计思路 由于Redis是单线程模型,命令操作原子性,所以利用这个特性可以很容易的实现分布式锁.A用户端在Resdis写入1个KEY,其他的用户无法写入这个KEY,实现锁的效果.A用户使用完成后释 ...
- C 语言的 GCC 扩展
GNU 编译器(GCC)提供了很多 C 语言扩展,编译器会使用该信息生成更高效的机器代码. 内联函数 static inline __attribute__ ((always_inline)) int ...