Git 的基本用法
设置姓名和地址
$ git config --global user.name "Your Name"
$ git config --global user.email "your_email@email.com"
- 可以设置多用用户,就不要用--global,具体用法以后在研究。
提高可读性
$ git config --global color.ui auto
Mac OSX 上的vim设置
$ git config --global core.editor /usr/bin/vim -f
- 如不设置会报错:"There was a problom with the editor 'vi'."
设置 SSH Key
$ ssh-keygen -t rsa -C "your_email@email.com"
$ cat ~/.ssh/id_rsa.pub
# 把id_rsa.pub内容添加到github.com
# 然后测试
$ ssh -T git@github.com
初始化仓库
$ mkdir git-tutorial
$ cd git-tutorial
$ git init
查看仓库的状态
$ git status
十分常用,务必牢记!
向暂存区中添加文件
$ git add <file>
$ git status # 查看发生的变化
保存仓库的历史记录
$ git commit -m "First commit"
git add 和 git commit 可以合拼成如下命令:
$ git commit -am "Your commit"
- -m 参数后加“提交信息”
- 不加参数可以记述详细提交信息,格式如下:
第一行简述内容
第二行空行
第三行以后,记述更改的原因和详细内容
查看提交日志
$ git log
$ git log --pretty-short # 只显示简述
$ git log <path|file> # 只显示指定目录或文件
$ git log -p # 显示提交前后差异
$ git log -p <file> # 只显示改文件的差异
查看更改前后的差别
$ git diff
$ git diff HEAD # 查看工作树和最新提交的差别
- 养成良好习惯:在执行git commit 之前先执行 git diff HEAD 查看本次提交与上次提交的差别。
- HEAD 时指向当前分支中最新一次提交的指针。
显示分支一览表
$ git branch
\* master
feature-A
- 带‘*’号表示当前分支
创建、切换分支
$ git checkout -b <branch_name>
也可以分开成两个命令:
$ git branch <branch_name> # 创建分支
$ git checkout <branch_name> # 切换分支
$ git checkout - # 切换回上一个分支
合并分支
$ git merge --no-ff <branch_name>
- 为了在历史记录中明确记录下本次分支合并,需要创建合并提交,合并时加上参数--no-ff。
以图表形式查看分支
$ git log --graph
- 可以以图片形式输出提交日志,非常直观,务必牢记。
回溯历史版本
$ git reset
$ git reset --hard <HASH>
- 要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用到
git reset --hard
- 只要提供目标时间点的哈希值。
推进历史状态
$ git reflog
$ git reset --hard <HASH>
-
git reflog
查看当前仓库执行过得操作日志 - 即便开发者错误执行了git 的操作,基本也可以利用
git reflog
来恢复到原先的状态。
消除冲突
README.md
# git-toturial
<<<<<<<< HEAD
- feature-A
========
- fix-B
>>>>>>>> fix-B
-
=========
以上部分是当前HEAD的内容,以下部分是要合并的fix-B分支的内容。
修改提交信息
$ git commit --amend
压缩历史
$ git rebase -i
$ git rebase -i HEAD~2 # 最新的两次历史
- 把
pick
改成fixup
,原来的pick部分就会从历史中抹去。 - 一般用于拼写错误等小修改。
推送至远程仓库
在github上新建一个仓库。仓库名最好与本地仓库保持一致。
- 创建时不要勾选README选项,因为github自动生成的README文件与本地仓库失去了整合性。
添加远程仓库
$ git remote add origin git@github.com:<username>/<repository_name>.git
- 执行上述命令后,git会自动将远程仓库的名称设置成origin
推送至master分支
$ git push -u origin master
- -u 参数可以在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。
- 添加了这个参数,将来运行
git pull
从远程仓库获取内容时,本地仓库的这个分支就可以直接从origin的master分支获取内容,省去了另外添加参数的麻烦。
推送至master以外的分支
$ git checkout <branch_name>
$ git push -u origin <branch_name>
- 这样就可以把分支push给远程仓库并保持分支名称不变。
从远程仓库获取
$ git clone git@github.com:<username>/<repository_name>.git
查看当前分支的相关信息
$ git branch -a
- -a 参数可以同时显示本地仓库和远程仓库的分支信息。
获取远程的分支
$ git checkout -b <branch_name> origin/<branch_name>
- -b 参数后是本地仓库中新建分支的名称。
- 再后面是获取来源的分支名称。
获取最新的远程仓库分支
$ git pull origin <branch_name>
- 这样就可以将本地
<brach_name>
的分支更新到最新状态。
备注
$ git config --global push.defalt matching