@guoxs
2015-08-30T09:40:25.000000Z
字数 3710
阅读 2667
前端工具
重温一下git, 总结了一些git常用命令。
笔记参考廖雪峰的git教程:git教程
sudo apt-get install git : Debian或Ubuntu Linux
sudo apt-get install git-core : 老一点的Debian或Ubuntu Linux
如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config
,make
,sudo make install
这几个命令安装就好了。
第一种、安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。
第二种、从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
下载一个单独的sysgit.exe安装程序
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
首先,选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
windows系统目录尽量不要用中文
第二步,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
这两步后会生成一个.git
目录,默认隐藏,可用'ls -ah'命令就可以看见
$ git add <filename>
$ git commit -m "本次提交的说明"
版本库:
add files:
commit之后:
$ git status : 查看仓库当前状态
$ git diff <filename> : 查看difference,显示的格式是Unix通用的diff格式
$ git log : 显示从最近到最远的提交日志
$ git log --pretty=oneline : 强制一行显示一条记录
$ git reset --hard HEAD^ : 回退到上一个版本
$ git reset --hard commit_id : 回退到指定版本
$ git reflog : 记录每一次命令,可用于查找commit_id
$ cat <filename> : 读文件
$ git diff HEAD -- <filename> : 查看工作区和版本库里面最新版本的区别
$ git checkout -- <filename> : 丢弃工作区的修改
$ git reset HEAD <filename> : 把暂存区的修改撤销掉(unstage)
$ rm <filename> : 直接在文件管理器中删除文件
$ git rm <filename> + git commit : 从版本库中删除文件
$ ssh-keygen -t rsa -C "youremail@example.com"
一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,id_rsa.pub
是公钥。
登陆GitHub,打开“Account settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容,点“Add Key”,你就应该看到已经添加的Key。
首先在github上新建一个Repository,在本地的仓库下运行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
$ git push -u origin master : 第一次把本地库的所有内容推送到远程库上
$ git push origin master : 非第一次
$ git clone git@github.com:michaelliao/gitskills.git : 从远程库克隆
clone时,GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
$ git checkout -b dev : 创建dev分支,然后切换到dev分支
相当于:$ git branch dev + $ git checkout dev
$ git branch : 查看当前分支
$ git merge dev : 把dev分支的工作成果合并到master分支上
$ git branch -d dev : 删除dev分支
$ git branch -D dev : 强行删除
这种情况下无法执行“快速合并”,需手动修改
$ git log --graph --pretty=oneline --abbrev-commit : 图形方式展示分支情况
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev : 不使用Fast forward模式
不使用Fast forward模式:
团队合作的分支看起来就像这样:
$ git stash : 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list : 查看储存的工作现场
$ git stash apply : 恢复工作现场
$ git stash drop : 删除stash储存的工作现场
$ git stash pop :恢复的同时把stash内容也删了
$ git remote : 查看远程库的信息
$ git remote -v : 显示更详细的信息
$ git push origin master : 推送分支
$ git clone @... : 抓取分支
$ git checkout -b dev origin/dev : 创建远程origin的dev分支到本地
若多人同时推送冲突,需先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。
$ git branch --set-upstream dev origin/dev : 指定本地dev分支与远程origin/dev分支的链接
多人协作的工作模式通常是这样:
$ git tag <name> : 创建标签
$ git tag : 查看所有标签
$ git log --pretty=oneline --abbrev-commit : 补打标签
$ git show <tagname> : 查看标签信息
$ git tag -a v0.1 -m "version 0.1 released" 3628164 : 创建带有说明的标签,用-a指定标签名,-m指定说明文字
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a : 通过-s用私钥签名一个标签
$ git tag -d <tagname> : 删除标签
$ git push origin --tags : 一次性推送全部尚未推送到远程的本地标签
$ git push origin :refs/tags/<tagname> : 删除远程标签
$ git config --global color.ui true : 让Git显示颜色
忽略某些文件时,需要编写.gitignore
;
.gitignore
文件本身要放到版本库里,并且可以对.gitignore做版本管理。
$ git config --global alias.st status : 用st表示status
配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
每个仓库的Git配置文件都放在.git/config文件中,别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。