看日记学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 config --global hello.test onlytest
//全局配置文件位于 %userprofile%/.gitconfig, 本地配置指cmd的当前工作目录
#获取
git config --get user.name
git config --get-all user.name //从各个级别(本地 全局)的配置文件中取配置值
git config --get-regexp user* //用正则指定想获取的配置项
#删除
git config --global --unset hello.test
git config --global --remove-section hello
#显示
git config -l
git config --global -list
#显示帮助
git config -h //命令行里显示简要帮助
git config --help //浏览器打开git安装目录下的html帮助文件

初始化本地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造成的垃圾代码

三棵树

working(工作目录) -> index(暂存区) -> HEAD(本地仓库)

添加文件并提交

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 //工作目录同HEAD的比较
git diff <branch1>..<branch2> #分支比较 git status //当前分支状态

查看日志

git log / git log -p
git log <tag1>..<tag2> //显示两个标签之间的提交日志
git log <tag1>.. //显示tag1标签之后的提交日志
git log --since="2 weeks ago"
git log -n 3 //查看最近3次的提交日志
git log v1.0.. somefolder //somefolder从v1.0后的提交日志 gitk --since="2 weeks ago"
git show HEAD //查看最近一次提交日志

撤销修改

//git reset 是指 撤销到哪个commitId,缺省commitId 则为HEAD
git reset //若当前修改stage了,但未提交,则回退,HEAD->index
git reset HEAD //HEAD->index 同上 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查看变化) HEAD->index
git reset -- . #撤销当前文件夹的staged状态 git rebase //重设基

分支管理

#创建
git branch mybranch //创建分支
git checkout -b local_name origin/remote_name #基于远端分支创建新分支
如:git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
git branch <branchName> <tagName> //基于某标签建立分支 #查看
git branch -a //显示所有分支
git branch -r //显示远端分支
git branch //列出所有分支
git show-branch //显示所有分支 信息多一点
git branch -v //同上 #切换 合并
git checkout mybranch //切换分支 ,
git checkout -b otherBranch 创建并切换
git checkout master
//do some change in master
git merge mybranch //合并分支到主干
//若有冲突 手动解决冲突后,再次提交
vim <file>
git commit -a -m "conflit resolved" //解决冲突后重新提交
gitk //可视化分支查看界面 #删除
git branch -d mybranch //分支合并到主干后 删除分支
git branch -D mybranch //无论分支是否合并 都执行删除

添加和查看远端仓库

git remote add origin repoUrl //添加远端仓库

git remote show origin
#显示远端仓库的详细信息(fetchUrl pushUrl, branches, "local branches configured for 'git pull'" , "local refs configured for 'git push' ")

推送数据

git push origin localBranch:remoteBranch//推送数据

 //本地master推送到远程的remaster 如:
git push origin master:remaster

检出代码

//检出代码到本地某文件夹, repoUrl可以为远端url或本地路径
//(注:只clone远端仓库的当前分支,并非全部分支都clone过来)
git clone <repoUrl> <localDir> //clone 远端仓库的某个分支
git clone -b <remote_branch> <remote_repo> //pull的意思是指从远端git仓库fetch修改的代码,
//然后merge到本地的git仓库当前分支/指定分支中
git pull <repoLocalPath> master //根据本地分支-远程分支的对应关系从远端拉取更新
//如git clone的仓库和自动和远程仓库的default分支建立对应关系
git pull git fetch origin remote_branch_name:local_branch_name
//拉取远端git仓库master分支到本地mybranch2分支
git fetch <remoteRepo> master:mybranch2

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

git show <commitid> //查看某个提交的信息,git log可获得commitid
git show HEAD //HEAD可以认为是最近一次commit的 commitid 同 git log -n 1 -p
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对象

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

搜索内容

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

查看帮助

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

一些git命令详解

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 --hard HEAD //--hard表示将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命令进阶

git remote

git remote update #更新远程主机的数据? 如远端增加或删除分支
git remote show origin #显示远程主机origin的信息 **很实用**
git remote -v #查看远端仓库的配置信息 cat -n .git/config #查看本地配置文件

git commit

# 本地修改文件后,不希望commit到远端仓库可以这样
git commit -m "commit part of changes" -- folderName_or_fileName
git commit --amend # 修改最后一次提交记录

git show

# 显示某次提交的内容
git show commitId
git show tag1
git show HEAD^
git show branchName

git checkout

git checkout branchName #通常用于切换分支

#撤销未暂存的修改
git checkout -- <file> # 抛弃未staged的某文件的修改 (index->workspace)
git checkout . # (未staged的情况下)抛弃工作区修改

git rm

git rm <file> # 从版本库中删除文件,同时从工作目录删除文件
git rm <file> --cached # 从暂存区中删除文件,但不删除工作目录中对应文件

git revert

git revert commitId # 恢复某次提交的状态,恢复动作本身也创建次提交对象

git revert HEAD # 恢复最后一次提交的状态

git diff

git diff <file> # 比较当前文件和暂存区文件差异 git diff

git diff <commitId1>..<commitId2> # 比较两次提交之间的差异

git diff <branch1>..<branch2> # 在两个分支之间比较

git diff --staged # 比较暂存区和版本库差异

git diff --cached # 比较暂存区和版本库差异

git diff --stat # 仅仅比较统计信息

git log

git log <file> # 查看该文件每次提交记录

git log -p <file> # 查看每次详细修改内容的diff

git log -p -2 # 查看最近两次详细修改内容的diff //同 git log -p -n 2

git log --stat #查看提交统计信息

Git 本地分支管理

#查看、切换、创建和删除分支

git branch -r # 查看远程分支

git branch <new_branchanch> # 创建新的分支

git branch -v # 查看各个分支最后提交信息

git branch --merged # 查看已经被合并到当前分支的分支

git branch --no-merged # 查看尚未被合并到当前分支的分支

git checkout <branch> # 切换到某个分支

git checkout -b <new_branch> # 创建新的分支,并且切换过去

git checkout -b <new_branch> <branch> # 基于branch创建新的new_branch

git checkout commitId # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除

git checkout commitId -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支

git branch -d <branch> # 删除某个分支

git branch -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)

 #分支合并和rebase

git merge <branch> # 将branch分支合并到当前分支

git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交

git rebase master <branch> # 将master rebase到branch,
相当于: git checkout <branch> && git rebase master && git checkout master && git merge <branch> Git补丁管理(方便在多台机器上开发同步时用) git diff > ../sync.patch # 生成补丁 git apply ../sync.patch # 打补丁 git apply --check ../sync.patch #测试补丁能否成功

Git暂存管理

git stash # 暂存

git stash list # 列所有stash

git stash apply # 恢复暂存的内容

git stash drop # 删除暂存区

Git远程分支管理

git pull # 抓取远程仓库所有分支更新并合并到本地

git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并

git fetch origin # 抓取远程仓库更新

git merge origin/master # 将远程主分支合并到本地当前分支

git checkout --track origin/branch # 跟踪某个远程分支创建相应的本地分支

git checkout -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上

git push # push所有分支

git push origin master # 将本地主分支推到远程主分支

git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)

git push origin <local_branch> # 创建远程分支, origin是远程仓库名

git push origin <local_branch>:<remote_branch> # 创建远程分支

git push origin  :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支

Git远程仓库管理

GitHub

git remote -v # 查看远程服务器地址和仓库名称

git remote show origin # 查看远程服务器仓库状态

git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址

git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址)
git remote rm <repository> # 删除远程仓库 创建远程仓库 git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库 scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上 mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库 git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址 git push -u origin master # 客户端首次提交 git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track git remote set-head origin master # 设置远程仓库的HEAD指向master分支 也可以命令设置跟踪远程库和本地库 git branch --set-upstream master origin/master

看日记学git摘要~灰常用心的教程的更多相关文章

  1. as3用鼠标拖动图形拼图——灰常简单的教程

    话说这种效果在课件里面经常用到,鼠标拖动事件,一个运用很频繁的事件,一起学习学习吧 首先SWF贡献给大家看看效果 感觉咋样,原理其实还蛮简单的,做做试试吧 下面来看看源码吧 package { imp ...

  2. freemarker常见语法大全,灰常有用!

    由于公司前端使用的技术是freemarker,于是没事就在网上看看别人写的关于freemarker的文章,感觉freemarker灰常简单,比jsp好用,jsp太乱太臃肿了,另外推荐大家看看freem ...

  3. 灰常牛逼的命令行备忘录 navi

    灰常牛逼的命令行备忘录 navi 1. navi命令简介 1.1 navi命令简介 命令行是非常高效的工具,但一个很常见的现象是,很多命令行过一段时间就容易忘.举个栗子,如果我们常用 git 命令行管 ...

  4. 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print ...

  5. 跟vczh看实例学编译原理——一:Tinymoe的设计哲学

    自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...

  6. 跟vczh看实例学编译原理——零:序言

    在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...

  7. 看代码学知识之(2) ListView无数据时显示其他View

    看代码学知识之(2) ListView无数据时显示其他View 今天看的一块布局是这样的: <!-- The frame layout is here since we will be show ...

  8. 沉浸式学 Git

    沉浸式学 Git cover — contents — about 目录 设置 再谈设置 创建项目 检查状态 做更改 暂存更改 暂存与提交 提交更改 更改而非文件 历史 别名 获得旧版本 给版本打标签 ...

  9. 向大家推荐两个灰常好用的插件LigerUI和报表控件highcharts

    废话不多说上一张图看看,向大家推荐两个灰常好用的插件LigerUI和报表控件highcharts.欢迎大家进技术群讨论:QQ群:15129679 http://ligerui.com/和http:// ...

随机推荐

  1. caret彻底的理解css的三角形【通过border】

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. javascript原型链继承

    一.关于javascript原型的基本概念: prototype属性:每个函数都一个prototype属性,这个属性指向函数的原型对象.原型对象主要用于共享实例中所包含的的属性和方法. constru ...

  3. boost signal2 trackable

    挺简单的一个类,只是维护了一个成员 shared_ptr<detail::trackable_pointee> _tracked_ptr; 这样看来的话,所谓的track还是基于智能指针, ...

  4. 一致性哈希(Consistent Hashing)

    前言:对于一致性哈希已经不是罕见概念,在此只是对原有理论概念的一个整理和用自己的理解讲述,希望对新手有些许帮助,利人利己足矣. 1.概念 一致哈希是一种特殊的哈希算法.在使用一致哈希算法后,哈希表槽位 ...

  5. Linux学习之sed命令详解

    概述 sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区 ...

  6. (转载)JS中的prototype

    原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html#!comments JS中的phototype是JS中比较难理解的 ...

  7. C#开发者通用性代码审查清单

    这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考.这是为了确保在编码过程中,大部分通用编码指导原则都能注意到.对于新手和缺乏经验(0到3年工作经验)的开发者,参考这份清单编码会很帮助 ...

  8. php 按列值合并数据

    /* * PHP按值合并数组 * */ function my_array_merge(&$array1, &$array2) { $result = Array(); foreach ...

  9. C#学习日志 day8 -------------- async await 异步方法入门(引用博客)以及序列化和反序列化的XML及json实现

    首先是异步方法的介绍,这里引用自http://www.cnblogs.com/LoveJenny/archive/2011/11/01/2230933.html async and await 简单的 ...

  10. sqlite3编译与查询

    1.sqlite3 http://www.sqlite.org/ 下载 wget http://www.sqlite.org/2014/sqlite-amalgamation-3080403.zip ...