看日记学git摘要~灰常用心的教程

看日记学git

linux 命令行

cd
ls / ls -a
clear
mkdir
rmdir
echo "hi, good day" > hi.txt
touch hello.txt //创建文件
cat hi.txt //打印文件内容 cat -n hi.txt 带行号打印
rm hello.txt //删除文件
vim hi.txt //vim编辑hi.txt 同 vi hi.txt
help
tar // tar --help 解压 tar -xvzf mypro.tat.gz
whoami //当前用户

linux命令行下的快捷键

//光标定位
Ctrl-A 相当于HOME键,用于将光标定位到本行最前面
Ctrl-E 相当于End键,即将光标移动到本行末尾
Ctrl-B 相当于左箭头键,用于将光标向左移动一格
Ctrl-F 相当于右箭头键,用于将光标向右移动一格

//删除字符
Ctrl-D 相当于Del键,即删除光标所在处的字符
Ctrl-K 用于删除从光标处开始到结尾处的所有字符
Ctrl-U 用于删除从光标开始到行首的所有字符。一般在密码或命令输入错误时常用
Alt-BackSpace 用于删除本行所有的内容,基本上和Ctrl-U类似。
Ctrl-H 删除光标左侧的一个字符
Ctrl-W 用于删除当前光标左侧的一个单词

//清屏
Ctrl-L 清屏,相当于clear命令

//导航历史命令
Ctrl-R 进入历史命令查找状态,然后你输入几个关键字符,就可以找到你使用过的命令
Ctrl-P 相当于上箭头键,即显示上一个命令
Ctrl-N 相当于下箭头键,即显示下一个命令
Alt-. 用于提取历史命令中的最后一个单词。你先执行history命令,然后再敲击此快捷键若干下,你就懂了!

Ctrl-T 用于颠倒光标所在处字符和前一个字符的位置。(目前不知道有什么作用,哪位朋友知道?)
Ctrl-J 相当于回车键

//大小写转换
Alt-C 用于将当前光标处的字符变成大写,同时本光标所在单词的后续字符都变成小写。
Alt-L 用于将光标所在单词及所在单词的后续字符都变成小写。
Alt-U 用于将光标所在单词的光标所在处及之后的所有字符变成大写。

git 使用

配置

git config --global user.name "youname"
git config --global user.email "youemail"

初始化本地git仓库

//创建目录 初始化本地git仓库
mkdir myproject
cd myproject
git init //创建空的git仓库或重新初始化已有的仓库,创建.git目录(objects, refs/heads, refs/tags, HEAD和模板文件)
git init-db //同 git-init
git fsck //检查仓库有没有错误
git gc //用垃圾回收机制清除由于reset造成的垃圾代码

添加文件并提交

git add <file> / git add .
git commit -m "some comments" / git commit -a -m "add and commit"

查看状态和日志

git diff //工作目录 和 index的差异比较
git diff --cached//index和HEAD(最近一次提交)的差异比较 同 git diff HEAD
git status //当前分支状态
git log / git log -p
git reset //若当前修改stage了,但未提交,则回退
//git reset是指 撤销到哪个位置的意思
git reset --hard HEAD //working tree, index file 都撤销到最后一次commit的状态
git reset --soft HEAD^ //恢复到上一次commit的代码 soft表示不改动index file和working tree
git reset HEAD //默认是 --mixed, index file 和 commit都会撤销到最后一次commit之前的状态, working file不受影响。
git reset -- <file> //撤销某文件的staged状态 (git status查看变化)
git rebase //重设基

git log <tag1>..<tag2> //显示两个标签之间的提交日志
git log <tag1>.. //显示tag1标签之后的提交日志
git log --since="2 weeks ago"
gitk --since="2 weeks ago"
git log v1.0.. somefolder //somefolder从v1.0后的提交日志

推送数据

git remote add origin repoUrl //添加远端仓库
git push origin master //推送数据

分支 创建/切换/合并/删除

git branch mybranch //创建分支  
git branch  //列出所有分支 git show-branch //显示所有分支 信息多一点
git checkout mybranch  //切换分支 , git checkout -b otherBranch 创建并切换 
git checkout master
//do some change in master
git merge mybranch //合并分支到主干
//若有冲突 手动解决冲突后,再次提交
vim <file>
git commit -a "conflit resolved" //解决冲突后重新提交
gitk //可视化分支查看界面
git branch -d mybranch //分支合并到主干后 删除分支
git branch -D mybranch //无论分支是否合并 都执行删除

检出代码

git clone <repoUrl> <localDir> //检出代码到本地某文件夹, repoUrl可以为远端url或本地路径 (注:只clone远端仓库的当前分支,并非全部分支都clone过来)
git pull <repoLocalPath> master //pull的意思是指从远端git仓库fetch修改的代码,然后merge到本地的git仓库中
git fetch <remoteRepo> master:mybranch2 //拉取远端git仓库到本地mybranch2分支
git pull //从git clone的仓库拉取更新, pull和fetch都是用于保持和别人的git仓库同步更新的

查看git对象信息(commit, tag, branch)

git show <commitid> //查看某个提交的信息,git log可获得commitid
git show HEAD //HEAD可以认为是最近一次commit的 commitid
git show HEAD^ //显示上一次commit的信息(parent commit)
git show HEAD^^ //显示上上次commit
git show HEAD~3 //显示前3次commit
git show HEAD^1 //显示第1个上次commit(parent commit)

git show <branchName> //显示分支信息

git tag <tagName> //给最近的提交加标签 git tag v1.0
git tag <tagName> <commitid> //给某次commit加标签(起别名)
git show <tagName> //显示某标签对应commit的信息
git branch <branchName> <tagName> //基于某标签建立分支
git branch //可查看分支列表

//查看git对象内容(tree, blob, HEAD ,index)
git cat-file -t <id> //-t 获取id对应对象的类型
git cat-file commit <commitId> //查询一个commit对象
git ls-tree <treeId> //查看树对象
git cat-file blob <blobId> //查看二进制对象的内容
git ls-files --stage //查看index file的内容

cd .git
cat HEAD

搜索内容

//内容搜索
git grep "keyword" <branchName> //在某分支的文件中 搜索关键字
git grep "keyword" //在所有历史记录中搜索

查看帮助

//获取帮助
git <command> -h //直接在命令行显示用法
git <command> --help //用浏览器打开对应的文档

三棵树

working -> index -> HEAD

命令详解

1. commit 和 commit -a

commit -a自动地add所有改动的代码到index file中, 删除在index file中但不在working tree中的文件,执行commit

git log 和 git log -p

git log -p 不仅显示commit日志,同时显示每次commit的代码变动

git merge

合并两个或两个以上的分支,若自动合并(auto-merge)成功,则变更会被写入index file,需要再 commit 一下; 若发生冲突,则working tree
会处于一种特殊的状态(git status, git diff 查看冲突情况),手工解决冲突后,需要 git add <file> git commit

若要撤销合并,则git reset --head HEAD //herd表示将working tree和index file回退到之前的状态, soft表示撤销commit的修改
保留working tree和index file的, mixed则表示撤销index file 和commit的修改,保留working tree的

fetch的用法

用于从远端git仓库拉取更新, git fetch <options> <repo> <refspec> 格式 : , 表示源分支, 表示本地的分支
(dst为空则用当前分支) , 如: git fetch /home/lucy/myrepo master:lucyworks 从myrepo的master分支拉取内容到本地的lucyworks分支

pull的用法

用于从远端git仓库拉取更新并合并到本地的git仓库中, git pullgit fetchgit merge命令的组合
如: git pull /home/lucy/myrepo从myrepo目录拉取内容并合并到本地仓库的当前分支

git pull .相当于git merge, 如: git pull . mybranch . 表示当前仓库, 忽略了 参数,所以就是把当前仓库的mybranch分支拉取并合并到当前分支

常量的使用

  • HEAD: 最近一次提交
  • MERGE_HEAD: merge产生的commit的父commit
  • FETCH_HEAD: 指向 git fetch获得的object和ref信息的存储位置
  • HEAD^: HEAD的父commit
  • HEAD^^: HEAD的父commit的父commit
  • HEAD^1: HEAD的第一个父commit的信息
  • COMMIT_EDITMSG: 最后一次commit的提交信息

tag的用法

给commit起别名, git tag V3.2 5b88c, git show V3.2

git项目迁移

只需将开发的文件夹copy到需要的位置即可,需要恢复时,执行一下 git init 即可。

你可能感兴趣的:(看日记学git摘要~灰常用心的教程)