Git 版本管理

应用情景1:添加文件(单个、多个、目录)到Git版本库,提交一个版本快照。

应用情景2:穿越历史回到过去,版本回退,从当前版本回退到之前提交过的某个版本上。

应用情景3:穿越历史过头了,版本回退多了,目的时间是2000年,结果硬是穿到了1900年,没办法,又得从1900年穿越到"未来"的2000年。

情景1:

假设有一个目录 work ,里面三个文件:file1、file2、file3:

git add work/file1    # 添加单个文件到版本库
git add work/file1 work/file2 work/file3    # 添加多个文件到版本库
git add work/    # 添加整个目录到版本库
git add .    # 添加所有文件到版本库(.gitignore忽略的文件除外)
git commit -m "add file1 file2 file3"    # 提交版本快照

情景2:

假设从项目开发到现在,一共提交了3个版本快照到Git版本库(3次有效的 git commit),分别是

git commit -m "first commit"
git commit -m "second commit"
git commit -m "third commit"

当前我们便是在最新版本(也就是最后一次提交的版本 "third commit")上进行开发,假设突然发现 "third commit" 版本存在重大问题,需要回退到"之前某个版本"上重新开发:

# 第一步:找到之前提交的某个版本的 commit id
git log  # 查看历史提交记录,里面有 commit id 信息
git log --pretty=oneline  # 简化版的历史提交记录

# commit id类似于 "5c6c438396bd9db4f24d299fc68f3150ec81b2f8" 这样的字符串

# 根据 commit id 回退到指定版本
git reset --hard
git reset --hard 5c6c438396bd9db4f24d299fc68f3150ec81b2f8  # 没必要写全,写前几位即可,但是要保证Git能够根据你提供的信息找到唯一的 commit id

回退版本的另外一种方法:Git中有一个特殊的指针HEAD,永远指向当前版本,所以,可以用HEAD表示上一个版本HEAD^,上上个版本HEAD^^,向上几个版本就在HEAD后面加写几个^,当然,写太多的^不现实,所以向上100个版本可简写为HEAD~100,其它可依此类推。

git reset --hard HEAD^  # 回退到上个版本
git reset --hard HEAD^^  # 回退到上上个版本
git reset --hard HEAD~100  # 回退到100个版本之前

当前版本(third commit)回退到某个版本 (first commit)后,当前版本就是 first commit。查看历史提交记录,只会有 first commit 及之前的提交记录,就仿佛是 second commit 版本和 third commit 版本是一种幻觉,从来就没有提交过一样。

情景3:

在情景2中,回退到了 first commit 版本上后发现回退多了,此时想要再回到 "未来 second commit 版本" 或是 "未来 third commit 版本"

# 版本可以自由回退穿越,但是所有的git操作都会被git按顺序记录下来,必然有某个命令可以查看历史操作。
git reflog  # 查看历史操作记录,从中可以找到所有真实提交过的 commit id

# 假设 second commit 版本 id 是 6w59a45,third commit 版本 id 是 8m334k2
git reset --hard 6w59a45  # 从 first commit 版本穿越到"未来" second commit 版本
git reset --hard 8m334k2  # 从 first commit 版本穿越到"未来" third commit 版本

总结:所有提交过的版本都会被Git如实的记录下来并分配独一无二的 commit id,在版本间来回穿越的关键就是想方设法找到目的版本的 commit id。

时间: 2024-10-09 01:16:21

Git 版本管理的相关文章

Cocoapods使用及git版本管理

1.git.oschina.net上新建私有项目CocoaPodsTest,拷贝git路径留作下一步使用 2.本次mac上新建xcode项目CocoaPodsTest 3.在命令行cd到项目根路径/Users/cyber/Documents/Projects/CocoaPodsTest执行以下命令 git init git remote add origin https://git.oschina.net/cybxcoder/CocoaPodsTest.git git pull origin m

Git 版本管理工具(一)

Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便. Git 的速度很快,这对于诸如 Linux kerne

git学习——<四>git版本管理

一.git版本管理的优势 都说git比svn强大,强大在哪呢? 首先,从部署上说:svn.cvs都是集中式的,一台服务器上部署服务,所有客户端编写的代码都要提交到该服务器上.git是分布式的,所有人都可以从同一个版本库上克隆相同的版本库到自己的机子上. 这有什么好处呢? 1.使用svn和cvs,提交和check代码,你必须和服务器连上网,否则肯定不能用.git本地就是版本库,所以,你不链接其他机子也能提交到版本库中. 2.每个人都有一个版本库,不担心服务器会挂掉. 3.也可以实现一台机子进行代码

git版本管理工具的上手

git是一个分布式的版本管理工具 和其他集中式版本管理 工具相比具有以下优点: 1.可以在不联网的情况下开发 2.可以方便的建立本地分支 3.本地化的日志,快速获得信息 git命令的使用 mkdir /d/myproject  (在本地d盘下面创建一个名为myproject的本地仓库) cd /d/myproject    (切换到该目录下) git init  (初始化为主枝) git add filename  (添加一个文件的记录   一次只能添加一个文件) git commit -m "

Git版本管理器与猫脸五爪鱼

Git版本管理器与猫脸五爪鱼 (声明:内容按个人实践经验并部分整合自网络,供学习参考) 一.git软件是什么?它与SVN有什么异同? Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问. svn属于集中化的版本控制系统:有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的成员通过客户端连接到这台服务器,进行文件上传和更新. 优点:a.使用简单,比较符合我们的常规思维.b.同步代码比较简单,只要一步操作即可. 缺点:a.丢失数据

创建自己的git版本管理服务器

步骤一: 配置权限,让Git用户可以访问这个目录 chmod g+rx /path-to/gitroot 步骤二: 建立新的Git仓库,叫做myrepo cd /path-to/gitroot git init --bare myrepo.git 步骤三: 将能够访问的用户的秘钥添加到自己服务器上面,使他不必每次访问时都要输入密码 cat 他的秘钥 >> 服务器的~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys (这一句很重要,Li

GIT版本管理工具

原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方

Git——版本管理工具(一)

Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便. Git 的速度很快,这对于诸如 Linux kerne

Git 版本管理的简单理解

来源:百度知道 现在使用Git版本管理代码的项目非常多.但是Git本身是一条复杂的系统.我从几个简单的点来说明Git的基本功能.希望能帮助初学者快速入门. 工具/原料 Git code dot jd dot com TortoiseGit 方法/步骤 建一个目录.经过图二的Git Create Repository后.变成了一个含有.git系统目录的文件夹.工作目录可以放入自己的项目文档.   在工作目录下放入项目的文档.(Git对于非Asc码文件支持不太好,如word文档.所以尽可能避免同时多

FreeSWITCH Git版本管理

由于测试FreeSWITCH不同版本的需要,研究了下Git的使用,通过Git来管理所有的版本,方便了测试.以下就总结下具体的使用方法: 其中:git clone ..是现在git仓库:git tag 是查看freeswitch的版本 : git checkout v.. 是切换到指定的v.. 版本 :git archive 是将v..版本导出到上一级目录中,导出文件是name.tar ; git pull是更新git仓库 :至于具体的安装,本人之前的博客有讲过,有需求的可以去找找. FreeSW