Junhc

岂止于博客

Git使用指南

工作流

你的本地仓库由 git 维护的三棵“树”组成。
第一个是你的 工作目录,它持有实际文件;
第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动;
最后是 HEAD,指向你最近一次提交后的结果。

添加与提交

你可以计划改动(把它们添加到缓存区),使用如下命令:
git add <filename>
git add *
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
git commit -m "代码提交信息"
现在,你的改动已经提交到了 HEAD,但是还没到你的远端仓库。

推送改动

你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
git push origin master
可以把 master 换成你想要推送的任何分支。

如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
git remote add origin <server>
如此你就能够将你的改动推送到所添加的服务器上去了。

生成SSH-KEY
$ ssh-keygen -t rsa -b 4096 -C "youremail@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [直接回车]
Enter passphrase (empty for no passphrase): [输入密码]
Enter same passphrase again: [再次输入密码]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
26:f2:ea:6a:d3:e3:f4:1f:08:65:23:f8:5e:bf:e0:2a youremail@example.com
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
|   .             |
|  . . +          |
|   . + .         |
|    + o S        |
|   . = =         |
|   .o + o        |
|  E.o+ . o       |
| ..*=oo.o        |
+-----------------+

/root/.ssh/id_rsa.pub文件里的public key,设置到你的github里。

设置Github帐户信息
$ git config --global user.name "Your Name"
$ git config --global user.email "youremail@example.com"
设置Git显示颜色
$ git config --global color.ui true
灵活运用Git的”储藏”功能
# 储藏命令参数列表
$ git stash -h
Usage: git stash list [<options>]
   or: git stash show [<stash>]
   or: git stash drop [-q|--quiet] [<stash>]
   or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
   or: git stash branch <branchname> [<stash>]
   or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] [<message>]]
   or: git stash clear
# 查看状态,修改记录如下
$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   _posts/2015-08-23-git.md
#

# 储藏当前的修改,为了修复线上紧急Bug
$ git stash
Saved working directory and index state WIP on master: 811ec98 新增404
HEAD is now at 811ec98 新增404

# 再次查看状态,没有修改记录了
$ git status
# On branch master
nothing to commit (working directory clean)

# 查看储藏列表
$ git stash list
stash@{0}: WIP on master: 811ec98 新增404

# 线上紧急Bug修复完成,还原储藏,继续工作
$ git stash pop
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   _posts/2015-08-23-git.md
#

# 查看状态,发现原先的修改记录又回来了,很神奇吧
$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   _posts/2015-08-23-git.md
#

git stash popgit stash apply 的区别,后者还原储藏后并没被删掉,需使用git stash drop删除
git stash save "写点内容来帮助你记忆吧"
git stash pop|apply stash@{x} 还原特定版本的储藏

错误锦集
"warning: CRLF will be replaced by LF"
#就是回车(CR, ASCII 13, \r),换行(LF, ASCII 10, \n)。
#这两个ACSII字符不会在屏幕有任何输出,但在Windows中广泛使用来标识一行的结束。而在Linux/UNIX系统中只有换行符。
#也就是说在windows中的换行符为CRLF, 而在linux下的换行符为LF
#使用git生成一个工程后,文件中的换行符为LF, 当执行git add *时,系统提示LF将被转换成CRLF

$ git config --global core.autocrlf false  
备忘录

参考资料