这篇文章主要的目标是用较少的时间学习Git和GitHub的基本使用。在足够一般使用的前提下,尽量减少命令。如果需要其他命令,到时候再去其他地方了解就行了。

总概:所有命令前都要加 git,如下的init是指 git init

init  在本地的当前目录里初始化git仓库

clone 地址 从网络上某个地址拷贝仓库(repository)到本地

行为 命令 备注
初始化 init 在本地的当前目录里初始化git仓库
  clone 地址 从网络上某个地址拷贝仓库(repository)到本地
查看当前状态 status 查看当前仓库的状态。碰到问题不知道怎么办的时候,可以通过看它给出的提示来解决问题。这个命令执行的频率应该是其他命令的几倍,特别是新手
查看不同 diff 查看当前状态和最新的commit之间不同的地方
  diff 版本号1 版本号2 查看两个指定的版本之间不同的地方。这里的版本号指的是commit的hash值
添加文件 add -A 这算是相当通用的了。在commit之前要先add
撤回修改的且还未stage的内容 checkout -- . 这里用小数点表示撤回所有修改,在--的前后都有空格
提交 commit -m "提交信息" 提交信息最好能体现更改了什么
删除未tracked clean -xf 删除当前目录下所有没有track过的文件。不管它是否是.gitignore文件里面指定的文件夹和文件
查看提交记录 log 查看当前版本及之前的commit记录
  reflog HEAD的变更记录
版本回退 reset --hard 版本号 回退到指定版本号的版本,该版本之后的修改都被删除。同时也是通过这个命令回到最新版本。需要reflog配合
     
行为 命令 备注
设置用户名 config --global user.name "你的用户名"  
设置邮箱 config --global user.email "你的邮箱"  
生成ssh key ssh-keygen -t rsa -C "你的邮箱" 这条命令前面不用加git
添加远程仓库 remote add origin 你复制的地址 设置origin
上传并指定默认 push -u origin master 指定origin为默认主机,以后push默认上传到origin上
提交到远程仓库 push 将当前分支增加的commit提交到远程仓库
从远程仓库同步 pull 在本地版本低于远程仓库版本的时候,获取远程仓库的commit

对照查看两张图:

      • workspace 即工作区,逻辑上是本地计算机,还没添加到repository的状态;
      • staging 即版本库中的stage,是暂存区。修改已经添加进repository,但还没有作为commit提交,类似于缓存;
      • Local repository 即版本库中master那个地方。到这一步才算是成功生成一个新版本;
      • Remote repository 则是远程仓库。用来将本地仓库上传到网络,可以用于备份、共享、合作。本文将使用Github作为远程仓库的例子。

版本回退

如果我写的是一篇很长的文章,并且在之前的版本基础上修改了一部分内容,生成一个新的commit,现在我发现我在修改的时候删掉了一部分内容,而这部分内容是我现在需要用到的,怎么办?版本回退!

git log  (退出log按q键即可)

我们看到几行黄色部分是以 commit 开头的,后面接着一串字符。这一串字符是16进制的数,是一串哈希值。我们叫它版本号就行了。

开始回退,执行 git reset --hard 1df0573 (取版本号前几位即可)

这里提示HEAD已经更改指向至1df0573了,此时文件回退到1df0573版本.

现在再执行 git log

新版本的commit记录不见了!这就是 reset --hard 的力量,很好很强硬!

现在已经看到了之前版本的内容,那么如何回到最新版呢?
先执行 git reflog

可以看到HEAD的变化情况。
第一行表示当前HEAD所在的版本号是 1df0573 ,而之所以在这个版本号,是由于我们执行了reset命令。
看第二行,它告诉我们,这个HEAD所在的版本号是 ad93b89 ,这个版本号是在执行commit之后形成的。

此时我再用一次reset,将HEAD指向 ad93b89 , 同时查看log

回到第一次reset前的状态了!

清除未追踪的文件

通常在reset或者pull(后面会讲)之前要做两件事:

  • 将新添加且为追踪的文件删除掉(比如编译程序后所产生的文件)
  • 已追踪的文件已有修改,但又不需要这些修改,则将它们还原

还原已做修改的tracked文件,上面已经讲过。
现在看看如何用命令删除新加的文件。

用checkout是没办法删除掉它的,使用 git clean -xf

这个命令的杀伤力比较大,它删除当前目录下所有没有track过的文件。不管它是否是.gitignore文件里面指定的文件夹和文件。当然,也有杀伤力比较小的,读者可以自己查阅.

git status中文乱码问题

如果你的文件名是中文的,在使用git status时会乱码。

如果要使它显示为中文,在命令行里执行:git config --global core.quotepath false
再使用 git status

如果 git log 也会乱码,执行以下命令:

git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8

请根据需要将后面的 utf-8 替换成你想要的编码。如果是团队项目,请确保所有成员的设置都一致。

本地Git和Github的连接

1.注册github帐号

2.配置本地用户名与邮箱(与github无关)

git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

或者你直接在config文件里改,windows下位置在 C:\Users\你的用户名\.gitconfig 。如下图所示,添加相应信息:

3.生成ssh key
运行 ssh-keygen -t rsa -C "你的邮箱"

将生成的ssh key(公匙)复制到剪贴板,执行 clip < ~/.ssh/id_rsa.pub (或者到提示的路径里去打开文件并复制)

打开Github,进入Settings

点击左边的 SSH and GPG keys ,将ssh key粘贴到右边的Key里面。Title随便命名即可。

点击下面的 Add SSH key 就添加成功了。
测试一下吧,执行 ssh -T git@github.com

注:

    • 对于 oschina 的 “码云” ,执行 ssh -T git@git.oschina.net
    • 对于 coding 的 “码市” ,执行 ssh -T git@git.coding.net

创建远程仓库并与本地关联

1.创建远程仓库

2.github上点击 Create repository 创建仓库

3.将远程仓库和本地仓库关联起来

先到Github上复制远程仓库的SSH地址:

其实有两种方式可以关联,一种是SSH,一种是HTTPS。由于HTTPS比较慢,所以推荐使用SSH。
注意SSH的地址格式是这样开头的: git@github.com

如果你在创建 repository 的时候,加入了 README.md 或者 LICENSE ,那么 github 会拒绝你的 push 。你需要先执行 git pull origin master

执行 git push -u origin master 将本地仓库上传至Github的仓库并进行关联:

关联已经完成!

以后想在commit后同步到Github上,只要直接执行 git push 就行啦!

获取其他人的远程仓库

看到别人的代码,想要获取到本地计算机慢慢研究或者修改,可以用Git将其下载下来

以我的一个仓库为例:git@github.com:123liuzhenbo/orbslam.git

1.复制别人远程仓库的SSH。方法和上面关联git一样,进入仓库页面后,点击clone or download,就能找到SSH地址,比如我的git@github.com:123liuzhenbo/orbslam.git

2.选好存放的位置,执行 git clone 复制的SSH地址,花点时间就能clone下来

有一点要注意:这样直接clone别人的仓库后,不能push上自己的修改

另一种关联远程空仓库的方法

在知道了clone之后,你就可以更简单的创建并关联一个空仓库了。

  1. 在Github上创建仓库,上面有提到,这里不多讲
  2. 复制刚才创建的仓库的SSH
  3. clone到本地

这样可以不用再做关联了。省去了上面的 initgit remote add origin 以及 git push -u origin master

注:git文件一般都是隐藏的,按键ctrl+h显示隐藏文件.

参考 http://www.cnblogs.com/schaepher/p/5561193.html

git与github工具使用的更多相关文章

  1. 常用工具说明--Git和GitHub简明教程

    一.Git的主要功能:版本控制 版本:想想你平时用的软件,在软件升级之后,你用的就是新版本的软件.你应该见过这样的版本号:v2.0 或者 1511(表示发布时为15年11月),如下图:那么如果你修改并 ...

  2. 开发工具篇:Git和Github

    开发工具篇:Git和Github Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区 Index / Stage:暂存区 Repositor ...

  3. 几款Git GUI客户端工具

    工欲善其事,必先利其器. 作为一名开发人员,你不可能不知道git,无论你是开发自己的开源项目还是和团队一起进行大规模产品的开发,git都已经是源代码管理工具的首选.当然,那些hardcore deve ...

  4. 转:sublime上使用git连接github

    "工欲善其事,必先利其器." 这是古人的教诲,也是一个高效率的工程师需要遵循的法则之一.从大学开始写Java使用了JBuilder,Eclipse,后来写PHP用了Zend,写Ja ...

  5. linux下git以及github的连接与使用

    简单理解 Git 的思想和基本的工作原理,能够更好的进一步和使用Git.在开始学习Git 的时候,最好不要把Git的各种概念和其他的版本控制系统诸如 Subversion 等相比,否则容易混淆每个操作 ...

  6. WebStorm和sublime上使用git连接github(转)

    WebStorm使用git连接github的方法: 用webstorm上传代码时,首先要先下载git,网址一搜就可以搜到,安装git,并且把ssh配置到github上.然后开始配置webstorm,打 ...

  7. androidstudio 配置git和github

    git是版本控制工具 github是一个网站,git可以把项目上传至这个网站 1:先下载git,并且安装,一般默认即可,安装成功可以点击电脑右键出现 2:生成id_rsa.pub, 配置账号和邮箱 点 ...

  8. 关于Git和Github你不知道的十件事

    Git 和 GitHub都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不知道每个细节.我整理了Git和GitHub可能提高日常效率的10个常用技巧. GitHub 快捷键: t 和 w ...

  9. 【Git】安装以及第一次使用Git和GitHub傻瓜教程

    1.下载安装git(windows7) 下载git:https://www.git-scm.com/download/win 点击exe文件一路next就可以. 2.配置(参考:http://git. ...

随机推荐

  1. UML第三次作业

    一.PlantUML类图 语法学习小结 关系上的标识:在关系之间使用标签来说明时, 使用 :后接 标签文字.对元素的说明,可以在每一边使用 "" 来说明. 1 @startuml ...

  2. fork()相关的源码解析

    fork()的真正执行采用的是do_fork()函数,所以下文将从do_fork()函数对fork()进行源码解析.下图是do_fork()的源码函数设计: 从上图我们可以看到do_fork()涉及到 ...

  3. 棋盘游戏,dfs搜索

    问题描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆 ...

  4. 【JavaScript】学习中遇到的一些问题

    一.JavaScript中没法直接比较两个object和array是否相等

  5. 【数据结构】算法 LinkList (Add Two Numbers)

    两个用链表代表的整数,其中每个节点包含一个数字.数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头.写出一个函数将两个整数相加,用链表形式返回和. Solution:建立一个新链表C,然 ...

  6. vue-cli —— 项目打包及一些注意事项

    打包方法: 1.把绝对路径改为相对路径:打开config/index.js 会看到一个build属性,这里就是我们打包的基本配置了.在这里可以修改打包的目录,打包的文件名.最重要的是一定要把绝对目录改 ...

  7. Python数据分析Pandas库之熊猫(10分钟一)

    pandas熊猫10分钟教程 排序 df.sort_index(axis=0/1,ascending=False/True) df.sort_values(by='列名') import numpy ...

  8. 深入理解 Java 多线程核心知识

    多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...

  9. Configuring VNC Server on Linux

    linux安装oracle时,需用图形化界面安装.所以可采取下列的工具辅助安装 sysvinit (Original Method) systemd (New Method) VNC Clients ...

  10. linux install Openvino

    recommend centos7 github Openvino tooltiks 1. download openvino addational installation for ncs2 ncs ...