Git分支高级管理[四]
2024-08-26 11:06:20
标签(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 | 文件层面 | (没有) |
最新文章
- EasyUi 改变 selelct 的 下拉内容 div 的高度
- 关于IE8及其以下的IE版本不支持getElementsByClassName
- MATLAB学习笔记(七)&mdash;&mdash;MATLAB解方程与函数极值
- Wordpress更改后台地址
- Linux 线程--那一年, 我们一起忽视的pthread_join
- 软件工程随堂小作业——最优惠价钱(C++)
- notepad++每行首尾添加内容
- Delphi实现多个图像相互覆盖时无内容处点击穿透
- Oracle 新增表空间文件
- cocoapods 的使用心得
- 【solr专题之一】Solr快速入门
- HDU2579--Dating with girls(2)--(DFS, 判重)
- laravel blade模板介绍
- 深入浅出Hadoop之HDFS
- Andriod Studio科普篇——3.关于gradle插件的常见问题
- 如何去掉word中的回车符??
- Linux如何查找文件的创建时间
- 【翻译】WhatsApp 加密概述(技术白皮书)
- [Go] 第一个单词首字母变大写:Ucfirst(),第一个单词首字母变小写:Lcfirst()
- Jackson 时间格式化,时间注解 @JsonFormat 与 @DatetimeFormat 用法、时差问题说明