笔记-git-基础使用
笔记-git-基础使用
1. git相关概念
- 工作区(Working Directory):
就是在电脑里能看到的目录,init后的当前目录就是一个工作区;
- 版本库(Repository):
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD;
- HEAD表示当前版本,HEAD^表示前一个版本,HEAD^^表示前前版本;
2. GIT客户端
2.1. 客户端配置管理
config 配置有system,global(用户级别) ,local(当前仓库)三个级别,顺序为system-》global-》local,底层配置会覆盖顶层配置,分别使用--system/global/local 可以定位到配置文件。
常用配置命令:
git config –global user.name “name”
git config –global user.email 123@163.com
git config –global core.editor <>
查看配置
git config –list
git config –global –list
git config –system –list
git config –local --list
2.2. 开始——获取仓库
1、 创建仓库
git init
初始化后,目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
2、 也可以clone
git clone https://github.com/libgit2/libgit2 mylibgit
3. 常用操作
3.1. 创建文件并提交到版本库
在当前目录下新增或修改文件后保存到版本库分为两步:
- git add将修改添加到暂存区;
- git commit [-m commit explain ] #提交说明不是必需项,但强烈建议每次提交写说明。
3.2. 查看暂存区
git status
git status –s #使用状态码表示文件状态
状态码解释:
A: 你本地新增的文件(服务器上没有)
C: 文件的一个新拷贝
D: 你本地删除的文件(服务器上还在)
M: 文件的内容或者mode被修改了
R: 文件名被修改了
T: 文件的类型被修改了
U: 文件没有被合并(你需要完成合并才能进行提交)
X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
?:未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理
3.3. 查看修改内容
有一个命令用于查看已修改部分:
git diff
git diff filename
这种是比较 工作区和暂存区
比较暂存区与最新本地版本库
git diff --cached filename
比较工作区和最新版本
git diff HEAD filename
比较工作区与指定的 commit -id 的差异
git diff commit-id filename
比较暂存区与指定 commit-id 的差异
git diff --cached commit-id filename
比较两个 commit -id 的差异
git diff commit-id commit-id
3.4. 回退
版本回退
git log查看历史记录
git reset –hard commit_id回退版本
git reset
git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset –-soft:回退到某个版本,只回退了commit的信息,换句话说只修改了HEAD指向,暂存和工作区没变;
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉。
回退总结:
- 版本回退:git reset --hard commit_id
- 查看版本号git log,确定回退到哪个版本,HEAD^也是可以的
- git reflog,如果回退版本后后悔了,使用该命令查看命令历史,再使用reset回到新版本。
3.5. 撤消
- 工作区文件修改撤消:git checkout –file;
- 工作区文件修改后添加到了暂存区,想放弃修改,分两步:
git reset HEAD <file>
git checkout --file
- 已提交到版本库后撤消,参考版本回退。
3.6. 删除文件
一般是在工作区删除了某个文件,有两种可能:
- 确实需要删除,那么也需要在版本库中删除:
git rm filename
git commit
- 误删除,需要恢复:
git checkout --filename
3.7. 分支管理
分支里有一个概念叫指针,head就是指针,指向当前分支,一般是master;
新建分支:
想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令:
$ git checkout -b iss53
Switched to a new branch "iss53"
它是下面两条命令的简写:
$ git branch iss53
$ git checkout iss53
切换回 master 分支了:
$ git checkout master
Switched to branch 'master'
修改分支iss53,然后将其合并回 master 分支,可以使用 git merge。
$ git checkout master
$ git merge dev1
可以使用带 -d 选项的 git branch 命令来删除分支:
$ git branch -d hotfix
git branch –v
git branch –a
3.8. git merge
git merge有fast-Foward模式和no-ff模式:
- Fast-Forward:当前分支合并到另一分支时,如果没有分歧,就会直接移动指针;
举例来说,开发一直在m分支进行,新建一个dev的分支,并在其上提交;
回到m分支,此时m分支在创建dev分支后未进行新的提交。
此时的合并就是fast-forward。
- no-ff模式:--no-ff:不使用fast-forward方式合并,保留分支的commit历史
git merge --no-ff -m "commit描述" 要合并的分支名
推荐使用no-ff模式,可以留下commit记录,便于管理。
3.8.1. 冲突
当mater和dev各有新的提交后在合并时会产生冲突。
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,打开文件后冲突示例内容:
<<<<<<< HEAD
12.merge:change master
=======
11.merge: change branch dev1
>>>>>>> dev1
可以在修改后再add,commit
小结:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
3.9. 远程仓库
3.9.1. 查看信息
git remote
git remote –v
git remote show <name> #查看详细信息
3.9.2. 添加
git remote add <shortname> <url>
3.9.3. 推送
语法:
git push <远程主机名> <本地分支名>:<远程分支名>
以下是一些示例:
$ git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示删除origin主机的master分支。如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
$ git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
$ git push -u origin master
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
3.9.4. fetch
git fetch:Download objects and refs from another repository
从远程仓库取回分支和分支信息。如果只想取回特定分支的更新,可以指定分支名。
git fetch <远程主机名> <分支名>
git fetch origin master
取回来的分支可以可以在本地主机上访问(即使断网),有一点不同是在本地主机上"远程主机名/分支名"的形式读取。
比如:
git fetch 130
git checkout 130/dev
3.9.5. 拉取
pull:Fetch from and integrate with another repository or a local branch
取回远程主机分支的更新,再与本地的指定分支合并。
一般情况下这样使用:
git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回130主机的dev分支,与本地的dev_temp分支合并:
git pull 130 dev:dev_temp
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull 130 dev
笔记-git-基础使用的更多相关文章
- 笔记-Git基础
git配置 git config --global user.name "xxx" //配置用户名 git config --global user.email "xxx ...
- 《Pro Git》笔记2:Git基础操作
第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...
- Git基础教程(二)
继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 配置命令:git config --global * 版本库初始化:git init 向版本库添加文件:git add * 提交 ...
- Git 基础 —— 常用命令
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 git init 创建 Git ...
- Git基础和入门
一.Git基础概念 Git功能简单概述 可以随时回滚到之前的代码版本(git reset --hard ): 协同开发时不会覆盖别人的代码(分支): 留下修改记录(git log): 发版时可以方便的 ...
- [转] Git 基础 - 打标签
2.6 Git 基础 - 打标签 打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列 ...
- Git基础操作
配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...
- git基础及分支
关于版本控制 git是一种分布版本控制系统,每一主机都保存了完整副本.必杀技是分支. 在Windows可安装git客户端msysgit. git基础 第一次看progit觉得有点不懂,不懂版本控制,一 ...
- Git详解之二 Git基础
Git 基础 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置: ...
- 2.4 Git 基础 - 撤消操作
2.4 Git 基础 - 撤消操作 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失 ...
随机推荐
- Java设计模式—模板方法模式
模板方法模式仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式. 1.定义: 一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该 ...
- Thymeleaf基础知识
Thymeleaf是一个Java类库,它是一个xml/xhtml/html5的模板引擎,可以作为MVC的Web引用的View层. Thymeleaf还提供了额外的模块与SpringMVC集成,因此推荐 ...
- Angular JS + Express JS入门搭建网站
3月份开始,接到了新的任务,跟UI开发有关,用的是Angular JS,Express JS等技术.于是周末顺便学习下新技术. 组里产品UI架构如下: 其中前端,主要使用Angular JS框架,另外 ...
- 【从业余项目中学习1】C# 实现XML存储用户名密码(MD5加密)
最近在写一个C#的项目,用户需求是实现Winform的多文档界面与Matlab算法程序之间的交互.做了一段时间发现,这既能利用业余时间,实战中也可学习一些技术,同时刚毕业也增加一份收入.所以后面会不断 ...
- mysql> set sql_mode=''; mysql> set sql_mode='traditional';
mysql> set sql_mode=''; mysql> set sql_mode='traditional';
- python 生成随机图片验证码
1.安装pillow模块 pip install pillow (1)创建图片 from PIL import Image #定义使用Image类实例化一个长为400px,宽为400px,基于RGB的 ...
- “System.OutOfMemoryException”类型的未经处理的异常在 mscorlib.dll 中发生
在VS中写程序遇到这样的问题.但数据规模小的时候不出现,但数据规模大的时候就出现.但我的电脑用32G内存.处理的文本也不是很多,在文本alignment时出错.
- Azure 6 月新公布
Azure 6 月新发布:磁盘加密预览版 , CDN 用户上传 HTTPS 自有证书及价格调整. Azure 磁盘加密预览版现已在中国发布 Azure 磁盘加密预览版已对 Azure 中国云地区的 W ...
- 简单的NLog配置文件
NLog.config <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="h ...
- leetcode: 贪心
1. jump game Given an array of non-negative integers, you are initially positioned at the first inde ...