Vi中常用操作

插入类操作:

i:在光标之前添加文本
I:在光标行首添加文本
a:在光标之后添加文本
A:在光标行末添加文本
o:在光标下插入新行
O:在光标上插入新行

 

命令类操作:

:set nu 回车设置行号
:set nonu 回车取消行号
:n 移至文件的第n行
:n1,n2d 删除n1到n2行的内容

 

位置类操作:

ZZ: 退出
h: 左移一个字符
j: 下移一个字符
k: 上移一个字符
l: 右移一个字符
$: 移至行尾
0: 移至行首
Enter:移至下行行尾
H: 移至屏幕上端
M: 移至屏幕中端
L: 移至屏幕下端
G: 移至文件的最后一行
nG:移至文件的第n行:
1G移至文件的第1行,
10G移至文件的第10行

 

编辑类操作:

x: 删除光标所在的一个字符(相当于向后删除)
X: 删除光标前面的一个字符(相当于向前删除)
dd: 删除光标所在的行
dG: 删除光标所在的行到末尾的内容
D: 删除光标所在处到行尾的内容
u:撤销
yy,Y: 复制当前行
nyy,nY:复制包括当前行在内的n行
p: 将已经选择复制或被删除的行放到当前行下(粘贴)
r: 取代光标所在处的字符
R: 从光标所在处开始替换字符,按ESC结束
s: 替换光标所在处字符并进入文本输入方式
S: 替换光标所在全行,按ESC结束
u: 取消上一步操作(取消到上次打开文件的点上,并不是上次保存的点上),ctrl+r取消取消的操作
U: 取消当前行的所有操作
:w 保存
:w new_filename 另存为
:wq 保存退出
:q 不保存退出
:q! 强制不保存退出
:wq!强制保存退出
:x
:x!
/string 搜索字符串
?string 搜索字符串
n 向下搜索(?向上)
N 向上搜索(?向下)
:%s/旧的字符串/新的字符串/g 将旧的内容全部替换为新的内容
:%s/旧的字符串//g 将旧的内容删除
:r 文件名
:!操作系统命令
vi -o file1 file2 同时打开多个文件(水平排列)
vi -O file1 file2 同时打开多个文件(垂直排列)
ctrl+ww 文件之前切换

 

常用Git操作命令

1 赋权限

进入目录 cd .ssh/
命令:  ssh-keygen
获取key:  vim id_rsa.pub

2 安装

安装   apt-get install git-core
获得   git clone git://url
访问   http://url/gitweb

 

3 纳入版本控制:

 

git add *.txt     //添加指定文件
git add README    //添加单个文件
git add .         //添加所有文件包括子目录,但不包括空目录

 

4 提交:

git commit -m “no1”             //全部提交
git commit -m “no1” someFile    //提交指定文件
git commit -C HEAD -a —amend    //复用HEAD留言,增补提交(修改小错误,而不增加提交记录,掩盖自己的小马虎
-m “提交的说明”
-a 动把所有已经跟踪过的文件暂存,并提交.(工作目录中修改过的文件都提交到版本库,不需一个一个手动add了)
—amend 增补提交
-C 复用指定提交的提交留言
-c 打开编辑器在已有的提交基础上编辑修改

 

5 查看提交历史:

git log
这时“j”向下浏览,“k”向上浏览,“q”退出

 

6 问责:查明谁修改了代码

git blame hello.html            //查看修改过文件的人
git blame -L 12,+10 hello.html //12到22行  用”-L”参数在命令(blame)中指定开始和结束行:
blame还可以跟踪内容复制,文件复制

 

7 撤销缓存区的修改(没有commit的)

git checkout head 文件名 //撤销暂存区的修改
git checkout head readme.txt todo.txt
git checkout head *.txt
git checkout head . //撤销所有

 

8 反转提交:

git revert HEAD //创建一个反向的新提交抵消原来的提交改动
如果需要反转多个,必须从最后的开始反转, 加 -n可以不马上提交,之后一起提交。
git revert -n HEAD
git revert -n 54efhds
git commit -m “revert head and 54efhds”

 

9 复位:还没有commit,让工作目录回到上次提交时的状态

git reset —hard HEAD //所有未提交的内容清空,这会让”git diff” 和”git diff —cached”命令的显示法都变为空
git reset —soft HEAD //复位版本库,暂存差异,便于提交中发现错误需要更改时有用(例如私人密码放到里边了

 

10 分支:

在当前分支末梢建立分支:
git branch RB_1.0(建立分支不会自动切换过去
切换分支:
git checkout RB_1.0(切换到RB_1.0分支
创建并切换分支:
git checkout -b RB_1.0(简化上边2步操作
删除分支:
git branch -d RB_1.0
基于某次提交、分支或标签创建新分支:
git branch RB_1.0 master
git branch RB_1.0 6fe57de0
git branch Rb_1.01 1.0
查看分支:
git branch -r //显示远程分支
git branch -a //列出所有分支
分支重命名:
git branch -m master mymaster
-M 大写M会覆盖同名的分支
合并分支:
直接合并:
git merge 想合并到当前分支的源分支名
git merge —no-commit 分支 //合并但不提交
压合合并:将分支压合成一条commit记录,并合并过来
git merge —squash 某bug分支
git commit -m “修复某bug”
拣选合并:只合并一个提交
git cherry-pick 321d76f
如果需要连续拣选,就需要加 -n参数
然后再git commit ,但不要加-m参数,编辑器就会使用刚拣选的提交留言作为现在的留言。

 

11 标签Tag:

查看标签:
git tag
创建标签:
git tag 1.0 //在当前分支最后一次提交创建标签
git tag 1.0 RB_1.0 //基于RB_1.0分支的最新踢脚创建标签
git tag 1.0 ae468d8kt //为某次提交创建标签
检出标签:
git checkout 1.0 //检出标签与检出分支一样操作,但检出标签后用git branch查看本地分支会发现你现在不再任何分支上
这时你不应该修改,而应该立即基于此标签创建一个分支
git checkout -b from-1.0

 

12 变基:

1 git rebase RB_1.01 //也许修改过一个bug,希望新版本变基到RB_1.01分支上
2 手动解决冲突 //如果解决不了直接git rebase -skip或-abort来跳过特定提交或完全放弃变基
3 git add xxx.html //冲突解决
4 git rebase —continue
//—onto参数可以改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。
rebase -i 可以排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
详见版本控制之道p86 ,需要编辑器支持,windows记事本不行

 

13 远程相关:

git clone git://github.com/schacon/grit.git //从现有仓库克隆
git clone git://github.com/schacon/grit.git mygrit //换名,唯一区别就是新建的目录成了mygrit,其他都一样
添加远程仓库:
git remote add pb git://github.com/paulboone/ticgit.git
clone会默认添加origin仓库,如果原本用git init创建的版本库,后来又想提交到远程版本库,就可以用下边的办法
git remote add origin git@example.com:/xxxxxx
查看远程分支:
git remote -v //查看远程仓库,默认clone后,应该有一个origin仓库,-v显示对应的clone地址
git remote show origin //查看远程仓库信息
远程仓库重命名和删除:
git remote rename pb paul
git remote rm paul
获取数据:
现在pb/master可以在本地访问了,你可以合并到自己的某个分支,或者切换到这个分支看看有什么有趣的更新
git pull 抓取数据合并到工作目录中当前分支
推送数据:
git push [remote-name] [branch-name] //默认为 git push origin master
git push origin serverfix //推送分支,其实是下边一句的简化,提取我的 serverfix 并更新到远程仓库的 serverfix
git push origin serverfix:serferfix
git push origin :serverfix //这个语法用于删除,只要把分号前留空

 

14 其他:

git gc //垃圾回收,每隔一段时间例如一个月运行一次可以减少磁盘占用空间。
git reflog //最后的保障,列出误删的东东
git bisect //二分查找,版本控制之道p124页,略
归档版本库,导出压缩包:
git archive —format=格式 —prefix=目录/ 版本>压缩包.zip
git archive —format=zip head>test.zip
git archive —format=tar —prefix=mysite-1.0/ 1.0 | gzip>mysite-1.0.tar.gz
git archive —format=zip —prefix=mysite-1.0/ 1.0 >mysie-1.0.zip
通过git pull更新仓库,使用git init-db初始化自己的仓库。
commit:
git commit -a -e        提交全部修改文件,并调用vim编辑提交日志。
git reset HEAD^ or
git reset HEAD~1        撤销最后一次提交。
git reset –hard HEAD^  撤销最后一次提交并清除本地修改。
git reset SHA1          回到SHA1对应的提交状态。
add/delete/ls:
git add -a              添加所有文件。除了.gitignore文件中的文件。
git rm file             从git仓库中删除文件。
git commit              添加或是删除后要提交。
git ls-files -m         显示修改过的文件。
git ls-files            显示所有仓库中的文件。
这些事情都可以先在本地开 local branch 做,而不需要立即 Push 分享给别人。
git branch name       建立本地 local branch
git branch -m old_name new_name    改名字 (如果有同名会失败,改用 -M 可以强制覆盖)
git branch           列出目前有那些 branch 以及目前在那个 branch
git checkout name      切换 branch (注意到如果你有档案修改了却还没 commit,会不能切换 branch,解法稍后会谈)
git checkout -b name       本地建立 branch 并立即 checkout 切换过去
git branch -d  name       删除 local branch
git merge name     合併另一个 branch,若没有 conflict 衝突会直接 commit。若需要解决衝突则会再多一个 commit。
git merge –squash <branch_name> 将另一个 branch 的 commit 合併为一笔,特别适合需要做实验的 fixes bug 或 new feature,最后只留结果。合併完不会帮你先 commit。
git cherry-pick 321d76f 只合併特定其中一个 commit。如果要合併多个,可以加上 -n 指令就不会先帮你 commit,这样可以多 pick几个要合併的 commit,最后再 git commit 即可。
查看 分支版本
git branch -a
除了master之外,我们还可以随便创建分支,然后push到服务器上去。
$ git add .
$ git commit -m “”
$ git pull origin camp
$: git push origin camp
远程分支和本地分支需要区分,所以,在从服务器上拉取特定分支的时候,需要指定本地分支名字。
$: git branch product origin/product
更新分支到本地
$: git pull origin camp