git使用教程之git基础
1 获取Git仓库
- 在现有目录中初始化仓库
git init
- 克隆现有的仓库
git clone https://github.com/yangwang12345/node_test.git
git clone -b 分知名 路径 //切换到其他远程分支
Git 支持多种数据传输协议
https:// 协议
git:// 协议
SSH 传输协议 : user@server:path/to/repo.git
2 记录每次更新到仓库

每一个文件都不外乎这两种状态:已跟踪(tracked)或未跟踪(untracked)
初始化一个仓库之后,文件处于未修改(Unmodified),编辑文件之后处于修改(Modifyed),将修改的文件放入暂存区(Staged),然后提交所有暂存区的修改,形成了Git的生命周期
2.1 检查当前文件状态
git status
如果有修改的文件,此时不被跟踪,将提示我们用git add使它被跟踪,git add可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等;运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:
git add xxx文件名
用git status会看到文件已被跟踪,并处于暂存状态
2.2 状态简览
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
?? 新添加的未跟踪文件
A 新添加到暂存区中的文件
MM Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。
M 该文件被修改了但是还没放入暂存区
M 该文件被修改了并放入了暂存区
2.3 忽略文件
新建一个.gitignore文件
touch .gitignore
*.[oa] //忽略所有以 .o 或 .a 结尾的文件
*~ //忽略所有以波浪符(~)结尾的文件
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
glob模式: glob 模式是指 shell 所使用的简化了的正则表达式。 星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号() 表示匹配任意中间目录,比如a/**/z可以匹配 a/z, a/b/z 或a/b/c/z等。
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
2.4查看已暂存和未暂存的修改
git diff
查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令
2.5提交更新
git commit
git commit -m "信息会一行显示"
git commit 会进入vim编辑器,i编辑,esc退出编辑模式 :wq保存并退出
2.6 跳过使用暂存区域
$ git commit -a -m 'added xxx'
给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交
2.7移除文件
移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交.
可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 git rm -f xxx,这样的数据不能被 Git 恢复。
git rm xxx
我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中,当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,git rm --cached或者glob模式
$ git rm --cached README
$ git rm log/\*.log
$ git rm \*~
2.8 移动文件
重命名file_from 为file_to
$ git mv file_from file_to
$ mv README.md README //等价于
$ git rm README.md
$ git add README
3 查看提交历史
git log
git log -p -2
-p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交
4 撤销操作
$ git commit --amend
如果自上次提交以来你还未做任何修改,那么快照会保持不变,而你所修改的只是提交信息
你提交后发现忘记了暂存某些需要的修改
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
取消暂存 CONTRIBUTING.md 文件
$ git reset HEAD CONTRIBUTING.md
撤销到某个历史版本commit
git log
git reset --hard xxx(commit历史快照)
撤销修改,还原成上次提交时的样子
git checkout -- CONTRIBUTING.md
撤销所有add的文件
git reset HEAD .
5 远程仓库的使用
5.1 远程仓库的使用
$ git remote
origin //远程服务器的简写
$ git remote -v //会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
origin https://github.com/yangwang12345/node_test.git (fetch)
origin https://github.com/yangwang12345/node_test.git (push)
5.2 添加远程仓库
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb,现在 Paul 的 master 分支可以在本地通过 pb/master 访问到
$ git fetch pb
5.3 从远程仓库中抓取与拉取
$ git fetch [remote-name]
必须注意 git fetch 命令会将数据拉取到你的本地仓库,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
5.3 推送到远程分支
git push [remote-name] [branch-name]
$ git push origin master //将 master 分支推送到 origin 服务器时
注意:当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
5.4 查看远程仓库
$ git remote show origin
5.5 远程仓库的移除与重命名
$ git remote rename pb paul
$ git remote
origin
paul
$ git remote rm paul
$ git remote
origin
6 打tag
6.1 查看标签
比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)
$ git tag
v0.1
v1.3
$ git tag -l 'v2017*' //只对2017开头的tag有兴趣
v20170105
v20170209
v20170216
v20170217
v20170302
v20170303
v20170713
v20170720
v20170721
v20170822
v20171026
6.2 创建标签
附注标签
$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4
$ git show v1.4 //查看标签信息
git使用教程之git基础的更多相关文章
- git使用教程之git分支
1 分支简介 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流. 你将经历如下步骤: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 正在此 ...
- git 入门教程之 git 私服搭建教程
git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...
- git 入门教程之 git bash 竟然不支持 tree 命令
开门见山 git bash 是 Windows 用户安装 git 时默认安装的命令行工具,不仅界面漂亮功能也不错,大多数情况下可以替代 Windows 原生的 cmd 命令行. 然而,git bash ...
- Nmap扫描教程之Nmap基础知识
Nmap扫描教程之Nmap基础知识 Nmap扫描Nmap基础知识 Nmap是一个免费开放的网络扫描和嗅探工具包,也叫网络映射器(Network Mapper).Nmap工具可以用来扫描电脑上开放的端口 ...
- [批处理教程之Git]001.Git 常用命令大全
基本技巧 1.安装后的第一步 安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息. $ git config --global user.name "Some One ...
- git 入门教程之github 教程
github 教程 github 是一个基于 git 的代码托管平台,是平时工作学习的好帮手,学会如何用好 github 网站能够帮助我们更好分享代码或者与其他开发人员合作. 注册 github 账号 ...
- CSDN code使用教程之git使用方法具体解释
首先须要下载GITclient.http://git-scm.com/downloads. . . 然后再code.csdn.net上面创建一个项目,假设 你的项目已经存在.那么请建立项目 ...
- Android/AndroidStudio/idea使用教程之git使用(详细)(码云)
已经安装好了AndroidStudio,安装教程 本教程是作者自己摸索出来的,有不足之处还请大家海涵.多多拍砖,互相学习. 第一步:下载git,安装git客户端 直接百度git,下载git 安装g ...
- git 入门教程之1分钟快速了解 git
git 入门教程 git 是分布式版本控制系统,是文本文档管理的利器,是帮助你管理文件动态的好帮手. 如果你曾经手动管理过文档,一定有这样的经历,比如你正在编辑文档,想删除某段落,又担心不久后可能会恢 ...
随机推荐
- js添加下拉列表的模糊搜寻
1引入插件<script type="text/javascript"src="common/lib/jQueryComboSelect/jquery.combo. ...
- 原型模式和基于原型继承的js对象系统
像同样基于原型编程的Io语言一样,javascript在原型继承方面,实现原理和Io非常类似,javascript也遵守这些原则 所有数据都是对象 要得到一个对象,不是通过实例化类,而是找到一个对象作 ...
- spring boot / cloud (十八) 使用docker快速搭建本地环境
spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...
- 自定义流程gooflow2.0+自定义表单
一.功能简介 gooflow功能清单1.自定义流程绘制2.自定义属性添加3.支持3种步骤类型普通审批步骤自动决策步骤手动决策步骤 4.决策方式(支持js决策,sql语句决策) 5.审批人员参与方式,可 ...
- [js高手之路] html5新增的定时器requestAnimationFrame实战进度条
在requestAnimationFrame出现之前,我们一般都用setTimeout和setInterval,那么html5为什么新增一个requestAnimationFrame,他的出现是为了解 ...
- 第5章 不要让线程成为脱缰的野马(Keeping your Threads on Leash) ---线程优先权(Thread priority)
有没有过这样的经验?你坐在你的车子里,目的地还在好几公里之遥,而时间已经很晚了.你拼命想告诉那些挡住你去路的人们,今天这个约会对你是多么多么重要,能不能请他们统统--呃--滚到马路外?很不幸,道路系统 ...
- C++ 虚函数 、纯虚函数、接口的实用方法和意义
也许之前我很少写代码,更很少写面向对象的代码,即使有写多半也很容易写回到面向过程的老路上去.在写面向过程的代码的时候,根本不管什么函数重载和覆盖,想到要什么功能就变得法子的换个函数名字,心里想想:反正 ...
- 移动WEB 响应式设计 @media总结
第一种: 在引用样式的时候添加 <link rel="stylesheet" media="mediatype and|not|only (media featur ...
- 30分钟快速学习Shell脚本编程
什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
- 我的第一个python web开发框架(5)——开发前准备工作(了解编码前需要知道的一些常识)
中午吃饭时间到了,小白赶紧向老菜坐的位置走过去. 小白:老大,中午请你吃饭. 老菜:哈哈...又遇到问题了吧,这次得狠狠宰你一顿才行. 小白:行行行,只要您赏脸,米饭任吃,嘻嘻,我们边走边聊. ... ...