git 命令及文本vim操作

深入了解git工作流 stackflow

非常基础的一些知识。写的有点乱,后期内容多了再整理。

创建一个本地git仓库

mkdir <文件名> | 创建新的文件夹
cd <文件夹> | 进入文件夹
git init | 初始化成仓库

文件操作

touch <文件名> 创建一个文件
echo " 内容" >> <文件名> 写入内容到文件夹
每次仓库更新后都会需要执行一次add 操作将文件提交到暂存区
git add . (.代表所有的改变,也可以指定某个已改变的文件)
git commit -m “2017-10-10 因为修改某个bug” // 引号内为注释

提交

git 仓库 有工作区和暂存区
git add 文件名 | 提交到暂存区
git add . | 提交所有文件变化到暂存区
然后从暂存区提交到工作区执行一次 commit 操作
git commit -m " 提交的注释 "
git status 查看当前状态 工作区和暂存区的。
git log 查看历史信息
git diff head^ 文件名 查看当前版本和上一个版本的该文件的差异, head^^上上版本 或者 HEAD~1

查看本地分支

$ git branch

查看远程分支

$ git branch -r

查看本地、服务器所有分支

$ git branch -a
显示本地分支和服务器分支的映射关系
$ git branch -vv
2. 创建分支
创建本地分支,新分支创建后不会自动切换为当前分支
$ git branch [branch name]
3. 创建分支后切换到新分支
建立分支后切换到新分支
$ git checkout -b [branch name]
切换到指定分支
$ git checkout
5. 本地分支关联到远程分支

本地分支建立,与远程分支同步之后,就可以直接使用git pull命令了

$ git branch --set-upstream-to=origin/<远端branch_name> <本地branch_name>

将本地dev分支关联到远程dev分支–举例说明

$ git branch --set-upstream-to=origin/dev dev
6. 合并分支

合并分支,将名称为[name]的分支与当前分支合并

$ git merge [name]
7. 删除分支

删除远程分支

$ git push origin --delete [branch name]

删除本地分支(-d删除已经参与了合并的分支,对于未有合并的分支是无法删除的,如果想强制删除一个分支,可以使用-D选项)

$ git branch -d [branch name]
8. 显示分支和提交

显示分支和提交记录

$ git show-branch

工作相关

在实际工作中,你需要自己创建一个分支,在创建分支上修改后,提交合并到主分支的请求。审核后合并到master分支上。
1.如果当前分支不是master, 首先切换到master
git checkout master
git pull origin master //你需要更新本地的代码,由于短时间内可能会有别的合并请求提交
如果你没有创建分支
git checkout -b 分支名 master //从master创建新的分支
如果已经创建了分支
git checkout 分支名
git merge --ff master //这个命令建议深究一下, 把当前的分支强制合并到master分支
如果有合并冲突 并且想要撤销本地所有修改,
1.git fetch --all (获取所有分支的更新)
2.git reset --hard origin/master (回退到最新master分支的commit修改)
修改本地文件,改好后
git status
git add 文件名
git commit -m “做了什么事,为什么这么做”
git push origin

问题:由于切换分支的时候,不允许有分支上的文件修改,你需要git checkout 文件名 取消修改 (这种原因的产生就是没有好好一步步按上面步骤执行),这种时候有可能造成文件的修改丢失,需要注意备份。

vim编辑器

ctrl+z 挂起
fg %n 调出挂起文件n(n代表第几个管道作业)
vi 文件 | 进入vim编辑模式
vim有三种模式:命令模式,编辑模式,可视模式。
##命令模式下:
u 撤销
ctrl+r 回退一个操作(撤销撤销)
ctrl+s 表示停止向终端输出
ctrl+q 恢复向终端输出.
##输入v进入可视模式 :选择需要剪切的文字后,按下d就可以进行剪切了。
剪切
dd:剪切当前行
ndd:n表示大于1的数字,剪切n行
dw:从光标处剪切至一个单子/单词的末尾,包括空格
de:从光标处剪切至一个单子/单词的末尾,不包括空格
d : 从 当 前 光 标 剪 切 到 行 末 d 0 : 从 当 前 光 标 位 置 ( 不 包 括 光 标 位 置 ) 剪 切 之 行 首 d 3 l : 从 光 标 位 置 ( 包 括 光 标 位 置 ) 向 右 剪 切 3 个 字 符 d 5 G : 将 当 前 行 ( 包 括 当 前 行 ) 至 第 5 行 ( 不 包 括 它 ) 剪 切 d 3 B : 从 当 前 光 标 位 置 ( 不 包 括 光 标 位 置 ) 反 向 剪 切 3 个 单 词 d H : 剪 切 从 当 前 行 至 所 显 示 屏 幕 顶 行 的 全 部 行 d M : 剪 切 从 当 前 行 至 命 令 M 所 指 定 行 的 全 部 行 d L : 剪 切 从 当 前 行 至 所 显 示 屏 幕 底 的 全 部 行 复 制 y y : 复 制 当 前 行 n y y : n 表 示 大 于 1 的 数 字 , 复 制 n 行 y w : 从 光 标 处 复 制 至 一 个 单 子 / 单 词 的 末 尾 , 包 括 空 格 y e : 从 光 标 处 复 制 至 一 个 单 子 / 单 词 的 末 尾 , 不 包 括 空 格 y :从当前光标剪切到行末 d0:从当前光标位置(不包括光标位置)剪切之行首 d3l:从光标位置(包括光标位置)向右剪切3个字符 d5G:将当前行(包括当前行)至第5行(不包括它)剪切 d3B:从当前光标位置(不包括光标位置)反向剪切3个单词 dH:剪切从当前行至所显示屏幕顶行的全部行 dM:剪切从当前行至命令M所指定行的全部行 dL:剪切从当前行至所显示屏幕底的全部行 复制 yy:复制当前行 nyy:n表示大于1的数字,复制n行 yw:从光标处复制至一个单子/单词的末尾,包括空格 ye:从光标处复制至一个单子/单词的末尾,不包括空格 y d0d3l3d5G5d3B3dHdMMdLyynyyn1nyw/ye/y:从当前光标复制到行末
y0:从当前光标位置(不包括光标位置)复制之行首
y3l:从光标位置(包括光标位置)向右复制3个字符
y5G:将当前行(包括当前行)至第5行(不包括它)复制
y3B:从当前光标位置(不包括光标位置)反向复制3个单词
粘贴
p 小写p代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面
P 大写P代表贴至游标前(上)
##输入i进入编辑模式:
ctrl+n或ctrl+p 补全

cat

cat <文件名> | tail -n 10 显示后10行
cat <文件名> | head -n 10 | tail -n +20 显示第10行到第20行
cat <文件名> 显示文件内容
cat <文件名1> <文件名2> > <文件名3> 将文件1和文件2合并放到文件3
cat <文件名> | grep <内容> 查找文件中包含内容所在的行
cat > <文件名> 写入文件,ctrl+d结束
cat /dev/null > <文件名> 清空文件
cat > <文件名> << EOF 输入内容直到输入EOF结束

diff <文件名1> <文件名2> 列出文件的不同

sed

sed -n ‘10,20p’ <文件名> 显示第10行到第20行(包括)

文本替换

: s/old/new/g:将当前行所有的old替换成new,s是substitute,g是global
:1,10s/old/new/g:将第1到第10行所有的old替换成new
:%s/old/new/g:将当前文件所有行的old替换成new,%是每一行的意思
:%s/old/new/gc:同上,但是替换前需要确认,c是confirm
:g/pattern/s/old/new/g:将符合pattern的行内的所有old替换成new,第一个g是指匹配pattern的所有行,第二个g是指行内所有的匹配old的字符串

cut命令

cut:以某种方式按照文件的行进行分割

参数列表:
-b 按字节选取 忽略多字节字符边界,除非也指定了 -n 标志
-c 按字符选取
-d 自定义分隔符,默认为制表符。
-f 与-d一起使用,指定显示哪个区域。
that contains no delimiter character, unless
the -s option is specified
–complement 补全选中的字节、字符或域
-s, --only-delimited 不打印没有包含分界符的行
–output-delimiter=字符串 使用指定的字符串作为输出分界符,默认采用输入
的分界符
范围控制:
n:只有第n项
n-:从第n项一直到行尾
n-m:从第n项到第m项(包括m)
-m:从一行的开始到第m项(包括m)
-:从一行的开始到结束的所有项
cat /etc/passwd | cut -b1-3 #取每行的第1-3字字节
cat /etc/passwd | cut -b1-3,5-7,8 #取每行的第1-3,5-7,8的字节(后面的数字会先进行从小到大的排列) 需要事先知道具体字节,很容易出错
cat song.txt |cut -nb 1,2,3#当 -b 添加 -n 后则不会分割多字节 (我的系统是utf-8,所以需要用三个字节来表示一个汉字)
cat /etc/passwd | cut -c1,3 #适用于中文
cat /etc/passwd | cut -d : -f 3 #以:分割,取第三段
cat /etc/passwd | cut -d ‘’ #以空格进行分割,且是一个空格

缺点: 有的时候分隔符很难确定

正则表达式

. :匹配除了换行符之外的任何符号(包含空格),如a.a匹配aaa和aba
* :重复前面(零次或多次)匹配符,如a匹配a和aa
^ :当出现在表达式前面时,表示头部匹配,如^.匹配行首第一个字符
$ :当出现在表达式尾部时,表示尾部匹配,如.$匹配行尾第一个字符
\ :转移符,如表示匹配,而不是重复前面的匹配符
[] :匹配中括号中任何一个匹配符,如[ab]表示匹配a或者b
\(\):将括号中的模式保存
\<\>:匹配以\<符号后开始和\>符号前结束的单词

输入 esc 退出当前模式 后 输入 :wq 保存退出 :w 保存 ctrl + z 退出 :q! 不保存退出 或者直接两下ctrl+z

reset

git reset --hard HEAD^ | 回退到上一个版本
git reset --hard <版本号> | 回退到某个版本 版本号对应git log中哈希散列值的前7位 如fdd369e
git reflog 提交的ID号和对应提交的信息
git checkout – <文件名> | 丢掉工作区该文件的修改
git reset head file 回退暂存区的修改
Git 分支命令

  1. 查看分支

接下来讲讲windows如何连接github,上传文件到自己的仓库。(小白教学) 其他操作系统同理。

1.在github上注册新用户。
2.本地下载git,安装git https://git-scm.com/downloads
3.本地创建个人账户名和邮箱名
git config --global user.name
git config --global user.email
–global 是全局的意思,代表所有用户,区别于
–system
直接config
4.创建ssh key
ssh-keygen -t rsa -C "XXX@XXX.com" 最好填真实的邮箱
需要填写密码,可以回车不填
找到 c盘>用户>用户名>.ssh>.pub结尾文件 打开复制里面内容
在github右上角找到setting,里面有个SSH and GPG keys
点击new ssh key
将复制内容填入。
最后测试
ssh git@github.com
如果出现
Hi.XXX! You’ve successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
就可以了。
然后创建一个本地的仓库(上面有讲)。 将想要上传给远程仓库的内容复制进去。
上传文件的第一步:需要添加远程仓库(关联)
git remote add origin git@github.com:用户名/仓库名.github.io.git 这里填写你创建的repository 直接复制绿色图标里的ssh或者https
origin是远程仓库的名字
git remote 查看远程仓库
下面会出现origin,说明关联成功
然后执行
git pull origin master(远程分支名,一般是master)[:本地分支名] (一般默认当前分支)
//别忘了本地先提交,确保暂存区和工作区没有内容需要更新,不妨执行git status 查看目前状态
git push origin master | 将本地文件传到github对应的仓库中。
1.错误解决:fatal: Could not read from remote repository.
github上在创建仓库时,需要初始化,也就是要有README.md文件
2.错误解决:fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories
3.错误解决:error: failed to push some refs to 'git@github.com:
原因是本地需要有readme.md
git pull --rebase origin master
4.fatal: The current branch master has no upstream branch.
这样一劳永逸 下次直接push就可以了
git push --set-upstream origin master

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值