[译]git checkout
git checkout
git checkout提供3种不同的功能:
checking out文件, checking out commits, checking out branch.
checkout commit会让你的工作目录整个回到某个commit的状态下. 你可以使用checkout commit查看你项目的老的版本, 而不需要担心会影响你项目的current状态. checkout一个文件会真正影响你的项目的current状态.
用法
git checkout master
回到master这个branch.
git checkout <commit> <file>
指定一个文件回到某个commit时的版本. 工作目录的<file>文件会完整copy<commit>中的文件的内容, 并且会被添加到stage区中.
git checkout <commit>
把工作目录所有的文件都回到指定的commit中时的状态. <commit>可以是一个hash或者一个tag. 运行后你是在一个detached HEAD的状态.怎么理解这个detached HEAD状态呢? 可以简单的说这个时候你运行git checkout master还是能回到最初那个真正的HEAD里面的状态. 你在detached状态里面做的修改(add, commit)其实不会真正有什么影响, 一git checkout master马上还原到最初的状态. 但是如果这个时候你使用git checkout -b <new branch> 创建一个新的分支, 然后git checkout master git merge <new branch> 你做的修改才会真正的起到作用.
讨论
一旦你创立了项目历史, git checkout能让你的本地机器的工作目录回到任何快照的时候.
checkout一个老的commit是一个只读的操作. 查看老的版本不会对你的仓储有什么影响. 你项目的当前状态还是在master这个branch里面, 没受什么影响. HEAD通常是指向master或者某个本地分支, 但是一旦你checkout了一个老的commit, HEAD不在指向分支, 而是指向你这个老的commit, 这就是所谓的detached HEAD状态.
不同的是, checkout一个老的文件会影响你仓储的当前状态. 你可以重新commit这个老版本的文件到新的快照中去. 所以git checkout可以让你指定的文件回到一个老的版本.
例子
查看一个老的版本
这个例子假设你要在你的项目中做一些疯狂的实验, 你不确定是否要保存你在这个实验中所做的工作. 首先你需要找到你想要的版本的ID.
git log --oneline
项目的历史如下:
b7119f2 Continue doing crazy things
872fa7e Try something crazy
a1e8fb5 Make some important changes to hello.py
435b61d Create hello.py
9773e52 Initial import
使用checkout 去查看“Make some import changes to hello.py”这个commit:
git checkout a1e8fb5
这时你的工作目录回到了a1e8fb5
commit的状态下. 这个时候你可以做任何你想要做的修改而不用担心你会破坏你的项目. 你在这做的任何操作都不会保存在你的仓储中. 使用下面的命令回到你项目的current状态中:
git checkout master
checkout一个文件
如果你只对某一个文件感兴趣, 你可以使用git checkout去获取这个文件的老版本. 例如, 如果只是想查看hello.py文件的一个老的版本, 你可以使用下面的命令:
git checkout a1e8fb5 hello.py
注意了, 和checkout一个commit不同, checkout文件会真正影响你项目的当前状态. 如果你不想要这个老版本了, 你可以checkout最新的版本:
git checkout HEAD hello.py
[译]git checkout的更多相关文章
- [译]reset, checkout和revert
git reset, git checkout, git revert能让你撤销你本地仓储的一些修改, 前两种命令可以作用于commit或者一个文件. Commit级别的操作 注意了git reve ...
- 代码回滚:git reset、git checkout和git revert区别和联系
git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...
- 分支合并git checkout adview git merge adview3
分支合并 git checkout adview git merge adview3
- 每天一命令 git checkout
检出 checkout 是git常用命令之一.主要用于创建切换分支,覆盖本地修改等 git checkout 用于显示工作区,暂存区,版本库中文件的区别 git checkout -b branch ...
- git checkout -b 的详细讲解
创建分支: $ git branch mybranch 切换分支: $ git checkout mybranch 创建并切换分支: $ git checkout -b mybranch 更新mast ...
- [译]git push
push就是把你本地仓储的commit传到远程仓储中去. 用法 git push <remote> <branch> push指定的分支到<remote>中去. ...
- [译]git pull
git pull把git fetch和git merge压缩成了一条命令. 用法 git pull <remote> 作用和git fetch <remote> &&a ...
- [译]git fetch
git fetch从远程仓储导入commit到你的本地仓储. 这些fetch到的commit是做为一个远程分支存储在你本地的. 这样你可以在集成这些commit到你的项目前先看看都有些什么修改. 用法 ...
- [译]git rebase -i
使用rebase -i会在终端出现一个交互页面. 在这个交互页面中我们可以对要rebase的commit做一定的修改. 用法 git rebase -i <master> 把当前的分支的c ...
随机推荐
- 降低磁盘IO使Oracle性能优化(转)
文章转自:http://blog.chinaunix.net/uid-26813519-id-3207996.html 硬件方面虽然只占Oracle性能优化的一个方面(另一方面是软件),但是仍不可忽视 ...
- phpMyadmin /scripts/setup.php Execute Arbitrary PHP Code Via unserialize Vul Object Injection PMASA-2010-4
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对这个漏洞简单的概括如下 . "/scripts/setup.php&q ...
- Handlers
示例: - name: Configure webserver with nginx and tls hosts: webservers sudo: True vars: conf_file: /et ...
- iOS开发者账号配置进行设备调试
PS:我特么写了这么久,居然图片消失了,服了. 问题一:苹果开发者账号类型: 分为三种:个人的(99美金一年).组织的(99美金一年)和企业账号(299美金一年),申请时需要信用卡,可以找淘宝的代理申 ...
- 【Alpha版本】冲刺-Day7
队伍:606notconnected 会议时间:11月15日 会议总结 张斯巍(433) 今天安排:上传界面设计 完成度:95% 明天计划:回收站界面设计 遇到的问题:无 感想:从一开始界面风格就要确 ...
- iOS - CALayer相关(CATransform3D)
一.图层的几何 图层的几何简单通俗,图层的所有几何属性(包括矩阵变换),都可以有隐式和显式动画. 图层几何的属性: 1.position是CGPoint值,她指定图层相对于她图层的位置,该值基于父图层 ...
- shell 中 &&和||的方法
Shell && 和 || shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中.当 $? == 0 时,表示执行成功:当 $? == 1 时 ...
- CSS-混合布局的几种方法(正确的方法和错误的原因)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Navicat 的使用(二)
一,navicat如何写sql语句查询? 方法1:ctrl+q就会弹出一个sql输入窗口,就可以在里面写sql了.写完sql后,直接ctrl+r就执行sql了. 还有一点,写sql语句时,navica ...
- Android之Proguard语法
-include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {class_pat ...