身份认证

SSH Key

1
$ ssh-keygen -t rsa -C "your_email@youremail.com"

会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key

用户名,密码

1
2
$ git config --global user.name "your name"  
$ git config --global user.email "your_email@youremail.com"

测试

1
$ ssh -T git@github.com

分支操作

创建新分支

创建不切换

1
$ git branch 分支名

创建并切换

1
$ git checkout -b 分支名

相当于执行

1
2
$ git branch 分支名
$ git checkout 分支名

本地分支关联远程分支

只有本地分支

本地分支存在而远程分支不存在的情况:

  1. 先切换到你的目标本地分支
1
$ git checkout destinationBranchName
  1. 远程将直接生成以该名字命名的分支,并同时将本地分支与该分支关联上
1
$ git push origin theBranchNameYouWant

只有远程分支

远程分支存在而本地分支不存在:

1
$ git checkout -b 本地分支名x origin/远程分支名x

使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。

回滚

从远程仓库回滚

无论是soft还是hard,修改了本地之后,必须强制推送远程

1
$ git push -f

soft

修改版本库,保留暂存区,保留工作区

1
$ git reset --soft HEAD~1 (或commit id)

将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。

hard

修改版本库,修改暂存区,修改工作区

1
$ git reset --hard HEAD~1 (或commit id)

将版本库回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本

从本地提交回滚

1
git reset HEAD xxx

从本地修改回滚

1
$ git checkout xxx

GitHub仓库

远程仓库存在

直接克隆远程仓库到本地:

1
$ git clone

然后再在本地仓库进行操作

远程仓库不存在

如果GitHub上还不存在该项目的仓库,需要将本地仓库放上GitHub:

  1. 先在GitHub上创建一个项目,但是不要初始化
  2. 将本地仓库与刚创建的GitHub项目关联,命令如下
1
$ git remote add origin git@github.com:user_name/repository_name.git
  1. 正常对本地仓库进行操作,最终通过git push来推送到远程仓库

改变默认编辑器

Git Commit的编辑器默认是GUN nano,部分程序员用起来不习惯:
添加你的commit imformation 然后ctrl+o,回车保存,再ctrl+x退出。

我习惯使用的编辑器是Vim,于是把git commit的编辑器改回到Vim。
有如下两种方法:

  1. 方法一:
    直接敲命令:
1
$ git config –global core.editor vim
  1. 方法二:
    编辑~/.gitconfig文件。在core中添加editor = vim。如此以后在使用git的时候就自动使用vim作为编辑器

Linux上中文显示问题

在默认设置下,中文文件名在工作区状态输出,查看历史更改概要,以及在补丁文件中,文件名的中文不能正确地显示,而是显示为八进制的字符编码,示例如下:

1
2
3
4
5
6
7
$ git status
On branch hexo
Your branch is up-to-date with 'origin/hexo'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: "source/_posts/iOS\347\237\245\350\257\206\347\202\271\346\221\230\350\246\201.md"

通过将Git配置变量 core.quotepath 设置为false,就可以解决中文文件名称在这些Git命令输出中的显示问题:

1
2
3
4
5
6
7
8
$ git config --global core.quotepath false
$ git status
On branch hexo
Your branch is up-to-date with 'origin/hexo'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: source/_posts/SSH-Key生成及使用.md