Git分支高级管理[四]
标签(linux): git
笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流
切换分支
git checkout
撤销对文件的修改
git checkout --file.ext
- checkout一个文件和带文件路径git reset非常像,除了它更改的是工作目录而不是缓存区。不像提交层面的checkout命令,它不会移动HEAD引用,也就是你不会切换到别的分支上去
- 如果你缓存并且提交了checkout的文件,它具备将某个文件回撤到之前版本的效果。注意它撤销了这个文件后面所有的更改,而git revert命令只撤销某个特定提交的更改


撤销对文件的修改
[root@git test]# git status
On branch about
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
[root@git test]# git checkout -- index.html
[root@git test]# git status
On branch about
nothing to commit, working directory clean
git reset
- --soft 缓存区和工作目录都不会被改变
- --mixed 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
- --hard 缓存区和工作目录都同步到你指定的提交
虽然在调用时加上 --hard选项可以令git reset成为一个危险的命令(译注:可能导致工作目录中所有当前进度丢失!),但本例中工作目录内的文件并不会被修改。不加选项地调用git reset并不危险——它只会修改暂存区域
git reset HEAD~2

执行命令后:

reset命令的影响


文件层操作
- 当检测到文件路径时,git reset将缓存区同步到你指定的那个提交。比如,下面这个命令会将倒数第二个提交中的foo.py加入到缓存区中,供下一个提交使用。
- git reset HEAD~2 foo.py
- 运行git reset HEAD foo.py 会将当前的foo.py从缓存区中移除出去,而不会影响工作目录中对foo.py的更改
- --soft、 --mixed和--hard对文件层面的git reset毫无作用,因为缓存区中的文件一定会变化,而工作目录中的文件一定不变。
reflog
- git reflog命令分析你所有分支的头指针的日志来查找出你在重写历史上可能丢失的提交
总结
| 命令 | 作用域 | 常用情景 |
|---|---|---|
| git reset | 提交层面 | 版本回滚,,在私有分支上舍弃一些没有提交的更改 |
| git reset | 文件层面 | 将文件从缓存区中移除 |
| git checkout | 提交层面 | 切换分支或查看旧版本 |
| git checkout | 文件层面 | 舍弃工作目录中的更改 |
| git revert | 提交层面 | 在公共分支上回滚更改 |
| git revert | 文件层面 | (没有) |

Git分支高级管理[四]的更多相关文章
- git分支提交管理
随着需求的增多,为了多人协作的顺利进行,需要进行分支开发,进而带来分支管理问题.今天主要讲一下如何管理分支及提交. 为了使git更好用,下面是我的git配置文件(放在C:\Users\Administ ...
- Git 分支代码管理日记备注
1〉 Bithucket 创建代码库 2〉 下载克隆代码 Git clone 代码链接 3〉 代码初始化完成之后,切换到代码文件夹 cd 文件夹名 4〉 查看分支情况 Git brach 5〉 ...
- Git分支的管理
(一)查看分支 1.查看本地分支:git branch 2.查看远程分支:git branch -r 3.查看所有分支:git branch -a (二)创建分支 1.创建本地分支:git branc ...
- Git分支管理及常见操作
众所周知,使用Git分支,我们可以从开发主线上分离开来,然后在不影响主线的同时继续工作. 既然要使用Git分支,这里就涉及到Git分支的管理及常见操作,如列出分支,分支的创建,分支的删除,分支的合并等 ...
- 使用VSTS的Git进行版本控制(四)——在Visual Studio中管理分支
使用VSTS的Git进行版本控制(四)--在Visual Studio中管理分支 可以从web版Team Services Git repo 的Branches视图中管理工作.定制视图来跟踪最关注的分 ...
- Git工程开发实践(四)——Git分支管理策略
A successful Git branching model https://nvie.com/posts/a-successful-git-branching-model/ Git工程开发实践( ...
- Git分支管理(四)
一.什么是分支 分支的好处: 同时并行推进多个功能开发,提高开发效率 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任 何影响.失败的分支删除重新开始即可. 二.分支的操作 1. 创建 ...
- 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...
- Git分支管理规范
关于Git的一些分支管理规范... 一.分支与角色说明 Git 分支类型 master 分支(主分支) 稳定版本 develop 分支(开发分支) 最新版本 release 分支(发布分支) 发布新版 ...
随机推荐
- java.io与网络通信
文件IO java.io.File是用于操作文件或目录的类: File file = new File("hello.txt"); 实例化File时不关心路径的目标并不会去读取文件 ...
- jdk1.8新特性 : 接口中可以有普通方法(非静态方法)和静态方法 , 颠覆了之前我的理解 : 接口中只能有共有常量和抽象方法的概念,后面必须要加一句jdk1.7和1..7之前
看到jdk某些接口中存在default方法,于是... http://shaomeng95.iteye.com/blog/998820 为什么接口只能是公有常量? public interfac ...
- fiddler抓手机报文的配置指南
前言 1.fiddler大名鼎鼎的抓包工具,而且支持重发,自动解码报文之类. 2.做爬虫时经常遇到需要抓移动端(手机/pad等)报文的情况. 网上各种资料比较,下面这篇是最准确的,转载自csdn:ht ...
- Mysql导入大文件报错(MySQL server has gone away(error 2006))
前言 我们在导入mysql数据时候,mysql客户端突然报错:MySQL server has gone away(error 2006) 类似这种情况,处理思路为:调节mysql允许导入包的大小即可 ...
- ssh爆破篇
使用pramiko模块 代码图: import paramiko import sys import time def cont(): b=open(sys.argv[1],'r').read().s ...
- 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...
- Vijos P1497 立体图【模拟】
立体图 描述 小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容.最近,他准备给小朋友讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子, ...
- 安卓Acitivity的启动模式
活动的四大启动模式 Ps:除了standar模式外,其他启动模式都要在AndroidManifest.xml中设置 android:lauchMode的值 安卓活动的启动模式(LaunchMode)有 ...
- 从零开始学习前端JAVASCRIPT — 4、JavaScript基础Math和Date对象的介绍
Math对象的介绍 1:Math对象 Math 对象用于执行数学任务.并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math().您无需创建它,通过把 Math 作为对象使用就 ...
- vue学习笔记(五)——指令
13条指令 1. v-text (数据绑定语法-插值) <span v-text="msg"></span> <!-- 和下面的一样 --> & ...