昨天下午参考廖雪峰的博客和其他一些文章,简单了解了一下传说中的Git,发现常见用法入门还是挺容易上手的,在此做一些笔记,方便以后查阅和复习。

Git安装

Linux

sudo apt-get install git命令安装Git

Windows

官网下载 安装即可,不赘述。

注:安装时注意一步:选择第二项,将git添加到path中。

创建版本库

  1. 创建项目文件夹,例如:demo

  2. 进入demo目录下:git init命令将这个目录变成git可以管理的仓库(repository)。将仓库建好后,仓库目录下会多了一个.git隐藏文件夹。可以用ls -ah查看隐藏文件。

  3. 向库里添加一个readme.txt文件:

  4. git add告诉git,要把文件添加到仓库:

    git add readme.txt

    执行命令,其实,这一步的作用就是将文件添加到stage(暂存区)。

    • git add .将所有文件添加到暂存区。

    • git add -u将所有文件添加暂存区,同时,将删除的文件从仓库中删除。

  5. git commit命令,将文件提交到仓库。

    git commit -m "wrote a readme file"

    注:-m是对本次提交的说明,不该偷懒省去。

  6. git status查看当前版本库的状态。

  7. git diff显示具体的尚未缓存的改动记录。

  8. git log记录每次commit的信息。git log --pretty=oneline将每次commit的记录打印成一行,内容精简。

  9. git reset修改命令:

    • git reset HEAD废除这次修改记录,当前文件回到上一次提交的状态。

    • `git reset --hard [commit id]

  10. git rm慎用。这个命令会将所有版本库记录删除。

远程仓库

创建SSH Key。在类似C:\Users\xiang_000\.ssh这样的主目录下,查看是否有id_rsaid_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`

管理修改

  1. git diff HEAD -- README.md 命令查看工作区和版本库里最新版本的区别。

撤销修改

分为两种情况的修改:

修改了工作区某个文件的内容,想直接丢弃修改:

git checkout -- filename

注:--前后都有空格。

当修改了工作区内容,同时,添加到了暂存区,分两步:

  • 用命令git reset HEAD filename,回到场景1

  • 用场景1的方法操作。

删除文件

当删除了工作区的文件,git知道删除了文件,因此,工作区和版本库就不一致。git status命令会立刻告诉那些文件被删除了。有两个选择:

  1. 确实要从版本库里删除该文件,用命令git rm fimename,之后git commit提交。

  2. 误删,因为版本库里还有,可以很轻松的把误删的文件恢复到最新版:git checkout -- filename

注:git checkout其实是用版本库里的东西替换工作区的版本。无论工作区是修改还是删除,都可以一键还原。

附件

欢迎来我的博客:Michael翔的小窝

参考

  1. 廖雪峰git教程
  2. 21分钟入门Git

Git入门私房菜的更多相关文章

  1. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

  2. 每周一书-《鸟哥的Linux私房菜基础学习篇(第四版)》台湾原版,你想要吗?

     首先说明,本周活动有效时间为2016年10月19日到2016年10月31日.   目在介绍这本书之前,首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给玄魂工作室的 ...

  3. C#私房菜[二][提供编程效率的技巧]

    AaronYang的C#私房菜[二][提供编程效率的技巧] 前言 我的文章简单易懂,能学到东西.因为复杂的东西,讲起来,好累.阅读者只是膜拜,学不到东西,就是没用的东西,好多文章都是看不下去.我写不出 ...

  4. Linux学习笔记——基于鸟哥的Linux私房菜

    Linux学习笔记--基于鸟哥的Linux私房菜 ***** ARM与嵌入式linux的入门建议 (1) 学习基本的裸机编程:ARM7或ARM9,理解硬件架构和控制原理 (这一步是绝对的根基) (2) ...

  5. linux学习书籍推荐《鸟哥的Linux私房菜》下载

    下载地址:点我 <鸟哥的Linux私房菜:基础学习篇>是具有知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>的最新版,全面而详细地介绍了Linux操作系统.< ...

  6. 《鸟哥Linux私房菜》 全套视频和PDF资料—— 老段带你学鸟哥Linux视频课程

    <鸟哥的Linux私房菜-基础篇-服务器篇(第三版)>学习Linux极为经典的入门资料,但是还是很多同学难以坚持系统的看完整本书,最终以放弃而告终. 为了帮助大家更容易入门Linux,老段 ...

  7. 每周一书-《鸟哥的Linux私房菜》获奖公布

    <鸟哥的Linux私房菜>一书的赠书活动时间为2016年10月19日到10月31日, 也就是今天结束. 首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给 ...

  8. git入门网站

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git入门教程:对商业的.开源的. ...

  9. git入门及上传项目到github

    Git入门:       如果你完全没有接触过Git,你现在只需要理解通过Git的语法(敲入一些命令)就可以将代码上传到远程的仓库或者下载到本地的仓库(服务器),我们此时应该有两个仓库,就是两个放代码 ...

随机推荐

  1. Rikka with Parenthesis II---hdu5831(括号匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5831 给你一个只包含‘(’‘)’的字符串,然后让我们交换两个字符一次,问是否能得到一个合法的匹配:必须 ...

  2. 在Java中谈尾递归--尾递归和垃圾回收的比较

    我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所 ...

  3. Percona Data Recovery Tool 单表恢复

    前几天写过update或者delete忘加where条件的数据恢复.今天介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢 ...

  4. [LeetCode] 821. Shortest Distance to a Character_Easy tag: BFS

    Given a string S and a character C, return an array of integers representing the shortest distance f ...

  5. [LeetCode] 122. Best Time to Buy and Sell Stock II_Easy tag: Dynamic Programming

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  6. GNS3的使用2

    IDE值没算好,巨卡.重新安装,重新算值.速度快了不少 IDE值:选出现次数多,并且数字大的 2960的选256M 另外加了2个模拟器:ASA防火墙.juniper路由器

  7. soft nofile

    原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2096461 写这个文章是为了以正视听,网上的文章人云亦云到简直令人发指.到底最大文件数被什么限制了?too ...

  8. keras搭建深度学习模型的一些小tips

    定义模型两种方法:  1.sequential 类仅用于层的线性堆叠,这是目前最常用的网络架构 2.函数式API,用于层组成的有向无环图,让你可以构建任意形式的架构 from keras import ...

  9. Qt界面控件值获取异常处理

    情景简述: 正常情况,我们从控件获取的值是OK的,但有时候就是奇怪的不对头,那么我们可以给获取后的值加上一个不痛不痒的函数,再返回,结果就OK了.至于原因嘛,[呲牙][呲牙] 比如: //正常情况 d ...

  10. #C语言初学记录(位运算)

    位运算 Problem Description7-1 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由 ...