配置
配置信息
$ git config --global user.name "Your name"
$ git config --global user.email "eamilname@example.com"
上述代码仅用运行一次
若有项目需要单独指定,则去掉 --global
配置即可
查看配置信息
查看所有:$ git config --list
查看单个:$ git config <perperty_name>
更改文本编辑器
默认Git 使用的是Vim,可以更换:
$ git config --global core.editors <editor_name>
准备工作
当前目录初始化新仓库
$ git init
初始化后,当前目录出现一个.git
目录,存放git 需要的数据和资源
$ git init <file-path>
指定在哪一个目录中初始化
获取帮助
windows 平台测试会给你下载一个html文档,可能和我设置有关系
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
工作流
你的本地仓库由 git 维护的三棵“树”组成。
第一个是你的 工作目录
,它持有实际文件;
第二个是 暂存区(Index 或叫 Stage)
,它像个缓存区域,临时保存你的改动;
最后是 HEAD
,它指向你最后一次提交的结果。
基础操作
添加和提交
查看差异:$ git diff <file_name>
在 git add
之前才有效
添加:$ git add <file-name> 或 $
会先暂存到暂存区git add *
提交:$ git commit -m "代码提交信息"
会提交到HEAD,但是还没有到达远端仓库
查看 commit 历史:$ git log [--pretty=oneline]
查看命令历史:$ git reflog
回滚
回退到之前版本:$ git reset --hard HEAD~<number>
number可以填写要回退到前第几个版本,
另外一种方法:$ git reset --hard HEAD^^^^
退几个版本就写几个^这里不知道为啥不可用,可能是CMD问题
从之前版本再返回来:$ git reset --hard <commit_id>
如果不知道 commit_id
可以通过查看命令历史:$ git reflog 获取
所以 git commit
时,写好注释很重要
删除修改:
add 之前:$ git checkout -- <file>
add 之后:$ git reset HEAD <file>
删除文件
先从本地删除:$ rm <file_name>
从版本库删除:$ git rm <file>
远程仓库
准备工作
创建SSH Key:$ ssh-keygen -t rsa -C "YourEmail@example.com"
在c:/users/basil/
有.ssh
目录,其中有id_rsa
和:id_rsa.pub
,分别是私钥和公钥
关联远程库:$ git remote add origin git@server-name:path/repository-name.git
第一次推送master分支:$ git push -u origin master
之后推送:$ git push orgin master
克隆
$ git clone <url>
举例:$ git clone git://github.com/schacon/grit.git
$ git clone <url> <repo>
查看远程库
$ git remote [-v]
分支
用途
将特性开发绝缘开来。创建时默认是master 分支。
在其它分支上开发,然后再把它们合并到master 分支。
创建
$ git checkout -b <branch_name>
相当于两个命令:$ git branch <branch_name>
$ git checkout <branch_name>
查看
$ git branch
切换
$ git checkout <branch_name>
删除
$ git branch -d <branch_name>
$ git branch -D <branch_name> 强制删除
合并
$ git merge <branch_name>
在master分支上操作
推送分支到远端
$ git push origin <branch_name>
不推送则远端不可见
拉取远端分支
$ git pull <remote> <branch>
$ git branch --set-upstream branch-name origin/branch-name
Bug 分支
场景描述:
应用出了bug,但是现在工作在dev分支,且未作完,
需要先保存当前的dev分支,$ git stash <branch_name>
然后切换master分支,
从master分支创建issue分支,在issue分支修复bug,
然后通master合并,
再返回dev分支工作。
查看保存的dev分支
$ git stash list
恢复现场的两种方法
$ git stash apply
恢复后,不删除stash,删除需要 $ git stash drop
$ git stash pop
恢复后,删除stash
保存多个stash的恢复方法
$ git stash list
查看stash
$ git stash apply@{0}
杂
变基:就是把提交历史分叉的重新整合到一条线。
$ git rebase
打标签以便于查找
$ git tag 查看所有标签
$ git tag <name> [commit_id]
打一个新标签[给commit_id]
查看标签内容:$ git show <tagname>
创建带有说明的标签:$ git tag -a <tagname> -m "something" <commit_id>
删除标签:$ git tag -d <tagname>
推送标签到远程:$ git push origin <tagname> 只推送单个标签
$ git push origin --tags 推送所有的标签