git学习命令

1. linux下git安装

$ apt-get install git
E: 无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够)
E: 无法对状态列表目录加锁(/var/lib/dpkg/),请查看您是否正以 root 用户运行?

总是犯这种低级错误,apt-get命令需要管理员身份才行,是下面这个:

$ sudo apt-get install git
[sudo] ×××的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
建议安装:
  git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk
  gitweb git-arch git-cvs git-mediawiki git-svn
下列软件包将被升级:
  git
升级了 1 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 96 个软件包未被升级。
需要下载 0 B/3,102 kB 的归档。
解压缩后会消耗 0 B 的额外空间。
(正在读取数据库 ... 系统当前共安装有 253394 个文件和目录。)
正准备解包 .../git_1%3a2.7.4-0ubuntu1.3_amd64.deb  ...
正在将 git (1:2.7.4-0ubuntu1.3) 解包到 (1:2.7.4-0ubuntu1.2) 上 ...
正在设置 git (1:2.7.4-0ubuntu1.3) ...

如果出现了下面的,就是已经安装完成:

$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

这些是各种场合常见的 Git 命令:

开始一个工作区(参见:git help tutorial)
   clone      克隆一个仓库到一个新目录
   init       创建一个空的 Git 仓库或重新初始化一个已存在的仓库

在当前变更上工作(参见:git help everyday)
   add        添加文件内容至索引
   mv         移动或重命名一个文件、目录或符号链接
   reset      重置当前 HEAD 到指定状态
   rm         从工作区和索引中删除文件

检查历史和状态(参见:git help revisions)
   bisect     通过二分查找定位引入 bug 的提交
   grep       输出和模式匹配的行
   log        显示提交日志
   show       显示各种类型的对象
   status     显示工作区状态

扩展、标记和调校您的历史记录
   branch     列出、创建或删除分支
   checkout   切换分支或恢复工作区文件
   commit     记录变更到仓库
   diff       显示提交之间、提交和工作区之间等的差异
   merge      合并两个或更多开发历史
   rebase     本地提交转移至更新后的上游分支中
   tag        创建、列出、删除或校验一个 GPG 签名的标签对象

协同(参见:git help workflows)
   fetch      从另外一个仓库下载对象和引用
   pull       获取并整合另外的仓库或一个本地分支
   push       更新远程引用和相关的对象

命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。
查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的
帮助。

2.git具体命令

  1. (可以先切换到自己想要创建的目录位置)首先新建一个目录,在目录中新建一个文件
$ mkdir MarkdownPhotos (创建目录MarkdownPhotos)
$ cd MarkdownPhotos   (切换到MarkdownPhotos目录)
$ touch README.md  (新建README.md文件)

Tips:在进行任何Git操作下,首先切换到Git仓库目录,即切换到项目所在目录下。
那么,怎么判断这是不是一个Git仓库呢?

随便输入一个git命令,比如:git status,可看到下面的提示:

$ git statusfatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary 
(GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

即当前目录并不是一个Git仓库。

  1. 初始化git仓库
$ git init
初始化空的 Git 仓库于 /home/×××/workspace/MarkdownPhotos/.git/

随便输入一个命令测试下是否成功:

$ git status位于分支 master

初始提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

    README.md

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

成功!
默认就直接在master分支,这里“未跟踪的文件”表示README.md文件还没有被提交到git仓库中,后面还给出了提示,说可以使用“git add”命令提交想要提交的文件。

git status
即查看状态

下面先随意在README.md文件中写点东西再用git add提交和git status查看状态:

$ vim README.md (使用vim编辑器编辑文件)
$ git add README.md (提交文件到git仓库)
$ git status (查看状态)
位于分支 master 

初始提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)

    新文件:   README.md

这里提示README.md文件等待被提交,可以使用git rm --cached命令移除这个缓存

  1. 用命令git commit提交信息(可以继续用git status查看状态)
$ git commit -m 'first commit'

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.
$ git config --global user.name "Yojiaku"
$ git config --global user.email "×××@××.com"

正式提交的时候出了问题,需要配置号自己的用户名和邮箱。
接着,输入命令:git commit -m 'first commit'提交。
其中,commit是提交的意思,-m代表提交后面单引号中的信息,执行之后代表已经正式进行了第一次提交,这个时候再输
入git status,会提示:

位于分支 master
无文件要提交,干净的工作区
  1. 用命令git log查看产生的commit提交信息
$ git log
commit 21067ed046a76880b453989016c3b1a9be777420
Author: Yojiaku <×××@××.com>
Date:   Tue Oct 17 21:36:52 2017 +0800

    first commit

可以看到已经产生了一条commit记录,而提交时候的附带信息叫“first commit”。

git add & git commit
首先,git add先把改动添加到一个"暂存区",可以理解成一个缓冲区域,临时保存改动;而git commit是真正的提交。这样做可以防止错误提交。

  1. 理解git branch
    branch是分支的意思,即假设A,B做同一个项目,A创建了一个分支叫a,B创建了一个分支叫b,这样A,B做的所有代码改动都在各自的分支中,互不影响,等到两人都把各自的模块做完可以合起来。
    执行git init初始化git仓库时默认产生一个主分支master,可以输入git branch查看分支情况。
$ git branch
* master

执行git branch jianshu 就新建了一个名字叫jianshu的分支

$ git branch jianshu
$ git branch  jianshu
* master
$ git checkout jianshu
切换到分支 'jianshu'

用git checkout jianshu命令切换到jianshu分支

git merge
要上线的时候需要把分支合并到主分支master上来。此命令就是合并的意思,需要先切换到master分支,再执行git merge jianshu。

git branch -d 删除分支,当分支新建错误或者已经合并没有用处时可以删除。

3.向github提交代码

  1. SSH
    是一种网络协议,用于计算机之间的加密登录。在提交代码到github之前需要先添加SSH key设置。
  2. 生成SSH key
    linux都默认安装了SSH,可以在终端下输入ssh,若出现下面的信息说明已经安装了SSH:
$ ssh
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

接着输入 ssh-keygen -t rsa ,即制定rsa算法生成秘钥,接着连续三个回车键(不需要输入密码),会生成两个文件"id_rsa"、"id_rsa.pub",前一个是秘钥,后一个是公钥。
后面就是将id_rsa.pub的内容添加到Github上,这样本地的id_rsa密钥就能跟Github上的id_rsa.pub公钥进行配对,授权成功才可以提交代码

  1. Github 上添加 SSH key
    点击头像选中“settings”,找到侧边栏的 "SSH and GPG keys" ,然后选中右边的 "New SSH key" 按钮,将 id_rsa.pub 文件中的公钥复制进去(title不用填)

使用下面的命令查看id_rsa.pub文件
$ cd ~/.ssh
~/.ssh$ cat id_rsa.pub

SSH key添加成功后,输入 ssh -T git@github.com 测试,如果出现下面的信息就成功了:

$ ssh -T git@github.com
Hi Yojiaku! You've successfully authenticated, but GitHub does not provide shell access.
  1. push & pull
    push:将本地代码“推”到Github远程仓库上以保持本地和远程同步。
    pull:将远程仓库的最新代码“拉”到本地仓库中。
  2. 提交代码
    第一种方法:在Github上先创建一个仓库,然后clone到本地,接着在本地修改完再push上去,如下:
~/workspace$ git clone git@github.com:Yojiaku/MarkdownPhotos.git
正克隆到 'MarkdownPhotos'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (3/3), 完成.
检查连接... 完成。

注意这里有一个错误:应先切换到仓库目录下再push

~/workspace$ git push origin master
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
~/workspace$ cd MarkdownPhotos

首先链接到远程的git库

~/workspace/MarkdownPhotos$ git remote add origin git@github.com:Yojiaku/MarkdownPhotos.git

开始提交

~/workspace/MarkdownPhotos$ git add .  (把本地的文件全部添加下)
~/workspace/MarkdownPhotos$ git status (查看状态)
位于分支 master
您的分支与上游分支 'origin/master' 一致。
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    新文件:   jianshu/span.png

~/workspace/MarkdownPhotos$ git commit -m "新增简书照片" (提交)
[master d0ed2ef] 新增简书照片
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 jianshu/span.png
~/workspace/MarkdownPhotos$ git push -u origin master (提交到远程)
对象计数中: 4, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (4/4), 1.60 KiB | 0 bytes/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
To git@github.com:Yojiaku/MarkdownPhotos.git
   fc23857..d0ed2ef  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

成功!

第二种方法
我们本地已经有了一个MarkdownPhotos项目,我们就关联本地已有项目就行了。
首先需要在github上建立一个项目(我这里就叫MarkdownPhotos),接下来就是进行关联:

$ git remote add origin git@github.com:Yojiaku/MarkdownPhotos.git

意思是添加一个远程仓库,它的地址是 $ git remote add origin git@github.com:Yojiaku/MarkdownPhotos.git ,而origin是给这个项目的远程仓库取的名字(可随意取,但是一般认为只有一个远程仓库时名字就是origin)。
剩下步骤跟第一种方法一样啦^^

推荐阅读更多精彩内容