git 笔记记录
分布式版本控制系统Git 是一套内容寻址文件系统,从核心上来看不过是简单地存储键值对。
一: git 本地clone 一个仓库
1. 直接clone一个仓库:
$: git clone https://github.com/lmh2072005/gitStudy.git
2. 另外一种clone方式:
# 创建目录初始化本地仓库
$: mkdir gitStudy && cd gitStudy
$: git init
如果不是全局的用户,配置本地仓库用户信息
git config usr.name xxx
git config user.email xxx
# 添加远程仓库路径(git里,服务器上的仓库在本地称之为remote)
$: git remote add github https://github.com/lmh2072005/gitStudy.git
从远程pull(fetch + merge)
$: git pull github [branch name]
把工作目录迁移到github上面:
$: git push github --all
git remote 参数明细,查看远程库的信息
git remote add name url 在url创建名字为name的映射(Adds a remote named <name> for the repository at <url>)
git remote show name 给出remote name的信息。
git remote -v | --verbose 列出remote详细信息
git remote 不带参数,列出已经存在的远程分支,例如:
#git remote
github
二:git branch
git branch 不带参数 列出本地已经存在的分支
git branch -r 列出远程分支
git branch -a 列出本地分支和远程分支
git branch xxx 创建一个新的本地分支xxx
git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。
git branch -d | -D branchname 删除branchname分支
git branch -d -r branchname 删除远程branchname分支
创建并切换到当前分支:git checkout -b branchname
只要local有改动,没有提交,都不能切换branch
git branch --merged 查看哪些分支已被并入当前分支
git branch --no-merged 查看尚未合并的工作
git branch -v 查看各个分支最后一个提交对象的信息
三:git stash
git stash 将当前分支的所有改动剪切保存起来, 只用于暂存区改动,如果已经提交到本地仓库可以回退历史git reset --soft HEAD^ 回到暂存区再stash,
git stash apply 将保存起来的所有的改动应用到当前分支
git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
另一种方式是用git stash pop,恢复的同时把stash内容也删了
git stash list 查看所有的stash
取消储藏 在某些情况下,你可能想应用储藏的修改,在进行了一些其他的修改后,又要取消之前所应用储藏的修改
git stash show -p stash@{0} | git apply -R
如果你沒有指定具体的某个储藏,Git 会选择最近的储藏
git stash show -p | git apply -R
新建一个別名,在你的 Git 里增加一个 stash-unapply 命令,这样更有效率
git config --global alias.stash-unapply '!git stash show -p | git apply -R'
四:git diff
查看具体修改了什么内容 ,工作区和版本控制区的比较
git diff HEAD --filename”命令可以查看工作区和版本库里面最新版本的区别
git diff --check,会把可能的多余白字符修正列出来
git diff HEAD 显示工作区和HEAD的区别。
git diff A B 显示A和B的区别,A和B可以是标签、分支、commit等。
git difftool -y HEAD^..HEAD 应用比较工具比较上一个版本和当前版本的区别
git diff HEAD^..HEAD 比较上一个版本和当前版本的区别
五:git log
git log 查看提交的历史记录
git log --pretty=oneline 查看简单的历史记录
用带参数的git log也可以看到分支的合并情况,生成类似分支树形图
$ git log --graph --pretty=oneline --abbrev-commit
Git提供了一个命令git reflog用来记录你的每一次命令
六:git reset
回退到历史版本
git reset --hard HEAD^
用HEAD表示当前版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset --hard fe8e15651 回退到具体提交的记录
用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区.
再用git checkout --file 撤销工作区的修改
如果已经提交到了版本库就只能回退历史版本了git reset --hard HEAD^
git reset --soft
--soft:index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit> ,则位于HEAD后面的<commit>处于准备提交的状态。
相当于分支上移动HEAD,通常用于减少提交记录 。(比如commit了100次,当HEAD移动到第一次提交记录时再push,这个时候历史记录只会有1次提交历史)
七:工作区(Working Directory)版本库(Repository)
工作区就是你在电脑里能看到的目录
工作区有一个隐藏目录“.git”,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用“git add”把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支.
八:git checkout
git checkout branch 切换分支
git checkout -- file可以丢弃工作区的修改 eg:git checkout -- a.txt
git checkout -b branch 创建分支并切换到该分支
九:git count-objects -v
git count-objects -v 以查看项目使用了多少空间
十:git rm
删除文件 git rm file
十一:git merge
git merge命令用于合并指定分支到当前分支
比如当前所在分支为master, git merge dev 表示合并dev到当前master分支
合并分支时,如果可能,Git会用“Fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息
如果要强制禁用“Fast forward”模式,Git就会在merge时生成一个新的commit
git merge --no-ff -m "merge with no-ff" dev
将dev 合并到当前分支 ,--no-ff参数,表示禁用“Fast forward”
十二:git pull
从远程服务端更新到本地仓库
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,
用命令git branch --set-upstream branch-name origin/branch-name
十三:git push
将本地仓库的提交推送到远程
推送时,如果指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
git push origin master 将本地master推送到远程origin
十四:git tag
标签是版本库的一个快照 ,是指向某个commit的指针,一个别名,为了更方便的查看管理。
git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id
git tag查看所有标签
git tag name commitid 为过去的提交打标签
eg: git tag v0.1 23fsdfa
git show tagname查看标签信息
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 3628164
git tag -d tagName 删除tag
创建的标签都只存储在本地,不会自动推送到远程,如果要推送某个标签到远程,使用命令git push origin tagname
一次性推送全部尚未推送到远程的本地标签: git push origin --tags
如果标签已经推送到远程,要删除远程标签,先从本地删除
git tag -d v0.9
然后,从远程删除,删除命令也是push: git push origin :refs/tags/v0.9
十五:git remote
git checkout -b [分支名] [远程名]/[分支名]
eg: git checkout -b serverfix origin/serverfix
切换到新建的 serverfix 本地分支,其内容同远程分支 origin/serverfix 一致
git push [远程名] :[分支名] 删除远程分支
git push origin :serverfix 在服务器上删除 serverfix 分支
十六:gir rebase
git rebase衍合
比如将a分支合并到master ,采用merge :
git checkout master 、 git merge a
如果master分支还有新的提交 ,则a分支的提交会和master的提交合并为一个新的提交记录
采用rebase :
git checkout a、 git rebase master
会将a分支的更改生成一个对应的快照放在master后面,看起来所有修改都是在一根线上先后进行的尽管实际上它们原本是同时并行发生的
两种合并结果一样 ,只是历史记录不一样
十七:git filter-branch
如果你想用脚本的方式修改大量的提交,还有一个重写历史的选项可以用
要从整个历史中删除一个名叫password.txt的文件
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
十八:git blame 文件标注
如果你发现自己代码中的一个方法存在缺陷,你可以用git blame来标注文件,查看那个方法的每一行分别是由谁在哪一天修改的。
下面这个例子使用了-L选项来限制输出范围在第12至22行:
git blame -L 12,22 simplegit.rb
git blame后加上-C,Git会分析你在标注的文件然后尝试找出其中代码片段的原始出处,比如从其它文件剪切过来的
git blame -C -L 12,22 simplegit.rb
十九:Git属性 .gitattributes
比如二进制文件版本管理在比较时无法区分 ,可以在.gitattributes文件中设置相关属性
.gitattributes文件通常是你项目的根目录
对Word文档进行版本控制,word文档为二进制文档不能直接比较两个不同版本的Word文件
Git 属性能很好地解决此问题,把下面的行加到.gitattributes文件:
*.doc diff=word
其实就是 Git 使用strings 程序,把Word文档转换成可读的文本文件
再配置个git config diff.word.textconv catdoc
现在如果在两个快照之间比较以.doc结尾的文件,Git 对这些文件运用"word"过滤器,在比较前把Word文件转换成文本文件
比较图片在.gitattributes文件加:*.png diff=exif,配置git config diff.exif.textconv exiftool (如果你下载并安装了exiftool程序)
二十:配置
在Git工作区的根目录下创建一个特殊的.gitignore文件然后把要忽略的文件名填进去,Git就会自动忽略这些文件
在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了, windows下打开cmd输入 copy > .gitignore 在当前目录生成.gitignore文件
比如过滤内容:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
配置别名
告诉Git,以后st就表示status
git config --global alias.st status
现在敲git st 就相当于git status
eg:git config --global alias.unstage 'reset HEAD'
git config commit.template 当运行git commit时, Git 会在你的编辑器中显示设置的内容
eg : git config --global commit.template $HOME/.gitmessage.txt
git config core.autocrlf 配置处理在windows操作系统和其它操作系统结束符问题
在过滤.idea文件夹时发现没发过滤,原来是之前已经加入git版本了 ,
所以要先清理下缓存 git rm -r --cached .idea
再在.gitignore里面加入/.idea/
参考:http://stackoverflow.com/questions/9550437/how-to-make-git-ignore-idea-files-created-by-rubymine
二十一:git-cherry-pick
Apply the changes introduced by some existing commits
Given one or more existing commits, apply the change each one
introduces, recording a new commit for each. This requires your
working tree to be clean (no modifications from the HEAD commit).
可以将已存在的提交应用到当前分支,git cherry-pick commitid
eg: git cherry-pick 3f3a085
二十二:git commit --amend
修改提交的注释
参考资料:
http://git-scm.com/book/zh/
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
其它网上资料
更多学习资料:
https://www.atlassian.com/git/workflows#!workflow-overview
http://ihower.tw/blog/archives/5140
http://www.worldhello.net/gotgithub/04-work-with-others/010-fork-and-pull.html
http://rogerdudler.github.io/git-guide/index.zh.html
http://www.ibm.com/developerworks/cn/opensource/os-cn-tourofgit/
http://scottchacon.com/2011/08/31/github-flow.html
http://nvie.com/posts/a-successful-git-branching-model/
http://blog.csdn.net/hudashi/article/details/7664464
整理:
1 | 教程 | Git简易教程 | 点击查看 | 比较简单,提供概览。 |
2 | 教程 | 开源分布式版本控制工具 —— Git 之旅 | 点击查看 | 比较详细的一个教程。 |
3 | 开发流程 | GitHub Flow | 点击查看 | GitHub官方流程,适合自动化程度比较高的团队。 |
4 | 开发流程 | A successful Git branching model | 点击查看 | 适应性比较广的流程,适合从传统流程迁移过来的团队。 |
5 | 开发流程 | Git flow 開發流程 | 点击查看 | 4的中文解说。 |
6 | 书 | Pro Git | 官方推荐的免费书籍,难度适中,强烈推荐阅读。 |
git 笔记记录的更多相关文章
- git笔记记录
廖雪峰Git教程学习记录. 0.常用命令总结: pwd 命令用于显示当前目录 git init 命令把这个目录(自己建的文件夹)变成Git可以管理的仓库(必须切换到当前文件夹下面执行这个命令) ls ...
- Git 笔记三 Git的初步使用
Git 笔记三 Git的初步使用 在上一篇中,学习了如何配置Git环境,这一篇,开始学习Git的初步使用.Git的初步使用还是很简单的.总体上知道git init, git clone, git ad ...
- Git 笔记一 Git简介
git 笔记一 什么是版本控制 所谓版本控制就是记录对文件的修改记录,这样以后就能回退到需要的 版本.比如你对一段代码进行了几次修改,有几次修改不想要了,如果 使用了版本控制,就可以回退到未做这些修改 ...
- 项目管理---git----快速使用git笔记(七)------coding.net项目管理多人操作的流程规范--合并代码审核
我们在前面已经介绍了coding.net和本地git的基本用法. 但是多人协作开发时情况会复杂得多,所以我们最好有一些规范来保证项目多人开发顺利进行. 比如说 规范一 master代码分支 需要开启 ...
- 项目管理---git----快速使用git笔记(五)------本地项目代码提交到远程仓库---新建项目
上一篇我们已经知道了怎么从远程仓库获取项目文件代码. 项目管理---git----快速使用git笔记(四)------远程项目代码的首次获取 git还有一种使用场景是 我本来在电脑里就有一个项目,现在 ...
- GIT笔记:将项目发布到码云
GIT笔记:将项目发布到码云 发布步骤 1.码云创建项目 记录下项目的远程地址: https://gitee.com/mrsaber/ms_supplyAndSale.git 2.在本地创建GIT仓库 ...
- git 学习记录—— git 中的仓库、文件状态、修改和提交操作等
最近开始学习使用版本控制工具 git .学习方式主要通过阅读 git 网站上的 Pro git 和动手实践,使用的系统为 Ubuntu16.04LTS,以及 Windows 8.1. 本文主要关注 ...
- Activiti 学习笔记记录(2016-8-31)
上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件
- Activiti 学习笔记记录(二)
上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...
随机推荐
- 文成小盆友python-num14 - web 前端基础 html ,css, JavaScript
本部分主要内容 html - 基础 css - 基础 一.html 标签 html 文档标签树如下: head 部分 Meta(metadata information) 提供有关页面的元信息,例:页 ...
- nginx 中location和root
nginx 中location和root,你确定真的明白他们关系? 2016-01-17 14:48 3774人阅读 评论(1) 收藏 举报 分类: linux(17) 版权声明:本文为博主原创文 ...
- android_demo 之生成颜色
老师说循环出颜色数字 然后显示出来 他说的什么一脸懵逼(=@__@=) 代码还在手上也还是懵逼 (づ。◕‿‿◕。)づ 不管了 留个脚印在这 以后想起来 至少也知道 直接上代码吧 说 ...
- 解决rsyslog 断电或者被kill 重发问题
$InputFilePersistStateInterval 1 Specifies how often the state file shall be written when processing ...
- 【转】我的Android笔记(十)—— ProgressDialog的简单应用,等待提示
原文网址:http://blog.csdn.net/barryhappy/article/details/7376231 在应用中经常会用到一些费时的操作,需要用户进行等待,比如加载网页内容…… 这时 ...
- Android 应用框架 —— 组件
本文内容根据个人自学整理记录,理解不当之处,希望大家批评指正,大家相互学习,写学习归纳,写博客是个好习惯,希望能够坚持下去. 在前一篇文章当中介绍了Android 的系统框架,主要是为了让大家对And ...
- 解决Qt5.7.0 cannot find -lGL
很久没用Qt了,这次要做一个协议编辑器,在ubuntu 14.04上安装了最新版本的Qt 5.7.0.界面改用扁平化风格,第一感觉还不错.按默认步骤创建了一个gui程序,编译运行,报了一个错:cann ...
- 查询rman备份信息经常使用指令
查询rman备份信息经常使用指令 ----登陆到rman $rman target / ----以精简的格式查看备份信息 RMAN> list backup of database summar ...
- 最长回文字符串(manacher算法)
偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ...
- 用户与 Oracle DB 交互具体过程
与 Oracle DB 交互 以下的演示样例从最主要的层面描写叙述 Oracle DB 操作.该演示样例说明了一种 Oracle DB 配置,在该配置中,用户和关联server进程执行于通过网络连接的 ...