看日记学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. perl 递归地遍历目录下的文件

    #!/usr/bin/perl -w use strict; use File::Spec; local $\ ="\n";#当前模块的每行输出加入换行符 my %options; ...

  2. You have not agreed to the Xcode license.

    You have not agreed to the Xcode license. Before running the installer again please agree to the lic ...

  3. IE6下不能定义1px高度的容器和IE6 双边距

        (1)触发的条件---定义一个div,将容器的高度设置成1px (2)  编码得到的结果---在IE6浏览器中,容器的高度不是1px   而是18px (3)出现问题的原因---是因为IE6浏 ...

  4. javascript prompt示例

    <html lang="en"> <head>   <title>Date example</title> <script t ...

  5. C语言复杂的函数指针声明

    复习C语言ING,发现复杂的函数指针声明看不懂,百度半天终于略知一二. 讲的比较详细的一篇blog: http://blog.csdn.net/megaboy/article/details/4827 ...

  6. MVC自学第二课

    鉴赏一个软件开发框架最好的办法是投入其中并使用它.本课将使用ASP.NET MVC框架创建一个简单的数据录入应用程序.为简化起见,本课涉及到的一些技术细节在这里可能会跳过,会在以后的课程中再详细说明. ...

  7. Oracle EBS-SQL (GL-5):从发票追溯到接收

    SELECT destination_type_code, distribution_line_number, line_type, amount,vat_code, tax_code_id, tax ...

  8. Umbraco安装权限问题

    当安装或升级,甚至是使用Umbraco时,如果出现一些莫名其妙的问题. 估计都是权限出了问题,用心参考下文: https://our.umbraco.org/documentation/Getting ...

  9. ubuntu下vim与系统剪切板互相拷贝

    1.install xclip sudo apt-get install xclip 2. install gvim sudo apt-get install vim-gnome 此时使用 “+ 寄存 ...

  10. Error copying image in the datastore: Not allowed to copy image file

    opennebula error copying image in the datastore not allowed to copy image file Error copying image i ...