Git入门私房菜
昨天下午参考廖雪峰的博客和其他一些文章,简单了解了一下传说中的Git,发现常见用法入门还是挺容易上手的,在此做一些笔记,方便以后查阅和复习。
Git安装
Linux
sudo apt-get install git
命令安装Git
Windows
官网下载 安装即可,不赘述。
注:安装时注意一步:选择第二项,将git添加到path中。
创建版本库
创建项目文件夹,例如:demo
进入demo目录下:
git init
命令将这个目录变成git可以管理的仓库(repository)。将仓库建好后,仓库目录下会多了一个.git隐藏文件夹。可以用ls -ah
查看隐藏文件。向库里添加一个
readme.txt
文件:git add
告诉git,要把文件添加到仓库:git add readme.txt
执行命令,其实,这一步的作用就是将文件添加到stage(暂存区)。
git add .
将所有文件添加到暂存区。git add -u
将所有文件添加暂存区,同时,将删除的文件从仓库中删除。
git commit
命令,将文件提交到仓库。git commit -m "wrote a readme file"
注:
-m
是对本次提交的说明,不该偷懒省去。git status
查看当前版本库的状态。git diff
显示具体的尚未缓存的改动记录。git log
记录每次commit
的信息。git log --pretty=oneline
将每次commit
的记录打印成一行,内容精简。git reset
修改命令:git reset HEAD
废除这次修改记录,当前文件回到上一次提交的状态。`git reset --hard [commit id]
git rm
慎用。这个命令会将所有版本库记录删除。
远程仓库
创建SSH Key。在类似C:\Users\xiang_000\.ssh
这样的主目录下,查看是否有id_rsa
和id_rsa.pub
文件。如果有了,直接可以将公钥添加到github账户上。如果没有,打开Shell(windows下的Git Bash):
ssh-keygen -t rsa -C "youremail@example.com"
id_rsa.pub
是公钥,可以放心的告诉任何人。
在github的Account settings里,Add SSH Key。
从远程库克隆
如果从零开发,推荐的方式是先在github上创建远程仓库。然后,从远程库克隆。
在github创建名为:learngit
的新仓库。勾选添加README.md
。
git clone
克隆一个本地库:
git clone git@github.com:michael728/learngit.git
添加(关联)远程库
建完本地库,又想在github创建一个git仓库,让两个仓库进行远程同步。
在github创建新的repo,名字为:demo
根据github的提示,在本地的demo
仓库下运行命令:
git remote add origin git@github.com:michae728/demo.git`
请千万注意,把上面的
michae728
替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
将本地库的所有内容推送到远程库上:
git push -u origin master
把当前分支master
推送到远程。由于之前远程库是空的,第一次推送master
分支时,加上了-u
参数。git不但把本地的master
分支内容推送到远程新的master
分支,还会把本地master
分支和远程的master
分支关联起来,以后推送或者拉取就可以简化命令。
从现在起,本地提交,可通过命令:
git push origin master
分享与更新项目
git push
:
git push origin dev
表示提交到远程的dev分支。通常在本地的dev分支推送到远程的dev分支,注意两地分支命名要相同,保证不发生混乱
git pull
:
git pull origin dev
表示拉远程dev分支到本地,并和本地dev分支合并
git fetch
(不常用):
git fetch origin dev
表示拉远程dev分支到本地,但是,不和本地dev分支合并
git remote
:
git remote add github git@github.com:michael728/test.git
将本地仓库推送到github上名为test的仓库里
分支管理
创建于合并分支
创建dev
分支,然后切换到dev
分支:
git checkout -b dev
相当于下面两条命令:
git branch dev
git checkout dev
git branch
命令用于查看当前分支。当前分支前面会有*
:
git branch
查看本地分支git branch -a
查看本地和远程所有分支git branch -r
查看远程分支git branch -d
删除本地分支git push :origin dev
删除远程dev
分支git checkout master
命令用于dev
分支完成工作后,切换回master
分支。
git merge
用于本地的指令。如果当前分支是master,本地另一个分支是dev
,用下面命令将分支合并到master:
git merge dev
后悔药
版本回退
git log
来查询历史记录。git log --pretty=oneline
显示精简信息。
git中,HEAD
表示当前版本,上一个版本就是HEAD^
,上上个版本HEAD^^
,上100个版本,写成HEAD~100
。
回到上一个版本:
git reset --hard HEAD^
或者通过git reset --hard [commit id]
回到指定版本号的版本。
git版本的回退速度很快,因为git内部有个指向当前版本的HEAD
指针。git仅仅是通过修改HEAD
指向就可以完成版本切换的工作。
git reflog
用来查看命令历史。通过这个,就可以查到之前的版本号啦!
工作区和暂存区
工作区(Working Directory)
例如我们创建的demo
文件夹,他就是一个工作区。
版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,它是git的版本库。
git的版本库里存了很多东西,最重要的是称为stage
的暂存区,还有git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
说明:
git add
实际上就是把文件修改添加到暂存区;git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建爱你git版本库是,git自动为我们创建了唯一一个master
分支,所以,现在git commit
就是往master
分支上提交更改。(因为以后还有可能往分支上提交啊!)
+ `git status`可以查看状态。如果有文件从来没有被添加过,那么它的状态是:`Untracked`。
+ 提交成功后,如果没有对工作区做任何修改,那么工作区就是`working directory clean`
管理修改
git diff HEAD -- README.md
命令查看工作区和版本库里最新版本的区别。
撤销修改
分为两种情况的修改:
修改了工作区某个文件的内容,想直接丢弃修改:
git checkout -- filename
注:--
前后都有空格。
当修改了工作区内容,同时,添加到了暂存区,分两步:
用命令
git reset HEAD filename
,回到场景1用场景1的方法操作。
删除文件
当删除了工作区的文件,git知道删除了文件,因此,工作区和版本库就不一致。git status
命令会立刻告诉那些文件被删除了。有两个选择:
确实要从版本库里删除该文件,用命令
git rm fimename
,之后git commit
提交。误删,因为版本库里还有,可以很轻松的把误删的文件恢复到最新版:
git checkout -- filename
注:git checkout
其实是用版本库里的东西替换工作区的版本。无论工作区是修改还是删除,都可以一键还原。
附件
欢迎来我的博客:Michael翔的小窝
参考
Git入门私房菜的更多相关文章
- 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...
- 每周一书-《鸟哥的Linux私房菜基础学习篇(第四版)》台湾原版,你想要吗?
首先说明,本周活动有效时间为2016年10月19日到2016年10月31日. 目在介绍这本书之前,首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给玄魂工作室的 ...
- C#私房菜[二][提供编程效率的技巧]
AaronYang的C#私房菜[二][提供编程效率的技巧] 前言 我的文章简单易懂,能学到东西.因为复杂的东西,讲起来,好累.阅读者只是膜拜,学不到东西,就是没用的东西,好多文章都是看不下去.我写不出 ...
- Linux学习笔记——基于鸟哥的Linux私房菜
Linux学习笔记--基于鸟哥的Linux私房菜 ***** ARM与嵌入式linux的入门建议 (1) 学习基本的裸机编程:ARM7或ARM9,理解硬件架构和控制原理 (这一步是绝对的根基) (2) ...
- linux学习书籍推荐《鸟哥的Linux私房菜》下载
下载地址:点我 <鸟哥的Linux私房菜:基础学习篇>是具有知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>的最新版,全面而详细地介绍了Linux操作系统.< ...
- 《鸟哥Linux私房菜》 全套视频和PDF资料—— 老段带你学鸟哥Linux视频课程
<鸟哥的Linux私房菜-基础篇-服务器篇(第三版)>学习Linux极为经典的入门资料,但是还是很多同学难以坚持系统的看完整本书,最终以放弃而告终. 为了帮助大家更容易入门Linux,老段 ...
- 每周一书-《鸟哥的Linux私房菜》获奖公布
<鸟哥的Linux私房菜>一书的赠书活动时间为2016年10月19日到10月31日, 也就是今天结束. 首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给 ...
- git入门网站
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git入门教程:对商业的.开源的. ...
- git入门及上传项目到github
Git入门: 如果你完全没有接触过Git,你现在只需要理解通过Git的语法(敲入一些命令)就可以将代码上传到远程的仓库或者下载到本地的仓库(服务器),我们此时应该有两个仓库,就是两个放代码 ...
随机推荐
- Docker处理日志的方法&日志收集工具比较
测试logstash:docker run -it mylogstash:0.1.0 logstash -e 'input{stdin{}}output{stdout{codec=>rubyde ...
- Android(一) 动态菜单
1.android的一个activity可以再选中某项之后按menu键弹出特定的菜单,也就是动态菜单.动态菜单的实现是靠menu类中的addIntentOptions函数实现的,具体的声明如下: in ...
- python-面向对象-10-单例
单例 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟 ...
- mysql python pymysql模块 获取插入的最后一条数据的自增ID lastrowid()方法
调用游标下的lastrowid 可以获取插入之前的表里id字段存放到哪个自增id cursor.lastrowid mysql> select * from userinfo; +----+-- ...
- CentOS 6.5通过yum的方式安装MySql
一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...
- [LeetCode] 196. Delete Duplicate Emails_Easy tag: SQL
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- 第七章之main函数和启动例程
main函数和启动例程 为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题.在讲例 18.1 “最简单的汇编程序”时,我们的汇编和链接步骤是: $ as hell ...
- c#null值加法运算
加号都是一个含义啊,操作数不同,加号重载的方法就不一样,当加号的左边或右边含有字符串的时候,总是返回一个不为空的字符串.当加号左右两边都是数值的时候,就会对其进行数学运算,null+任何数都为null ...
- SV中的Interface和Program
Interface:SV中新定义的接口方式,用来简化接口连接,使用时注意在module或program之外定义interface,然后通过'include来添加进工程. interface arb_ ...
- VS相关设置
1.显示行号 工具-〉选项-〉文本编辑器-〉语言(比如C#)-〉显示-〉行号 2.“解决方案资源管理器”被拖出来了,无法还原 两种方法:1.窗口-->重置窗口布局2.工具-->导入和导出设 ...